V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX  ›  ncisoft  ›  全部回复第 12 页 / 共 13 页
回复总数  244
1 ... 4  5  6  7  8  9  10  11  12  13  
2015-04-04 12:35:09 +08:00
回复了 zungmou 创建的主题 C 高效扫描一个大文件内字节出现的频率?
@zungmou 既然硬盘IO才是瓶颈,那是无法绕过去的,这是物理限制,没法通过代码实质优化。上SSD加持IO速度吧,有了SSD,随机读取也不是问题了,可以开多线程读取统计。在我的老笔记本做了测试,和atom比差距很大,机械硬盘 vs eMMC。不知windows上有没有类似 flashcache 这样逆天的玩意?

mgwin32不支持mmap函数,就只好屏蔽不测了

D.2 w/count(laptop)
real 3m7.672s
user 0m0.031s
sys 0m0.046s

A.2 w/count(atom)

real 1m18.648s
user 0m45.452s
sys 0m4.648s
2015-04-04 03:34:03 +08:00
回复了 zungmou 创建的主题 C 高效扫描一个大文件内字节出现的频率?
@Andiry
淘宝地址奉上,我的atom小主机,eMMC硬盘,比ssd逊色,比普通机械硬盘快一些,关键是便宜啊,linux开发对机器性能又没有要求,是我目前的主力开发机

文件格式也是ext4,debian testing x64。肯定是 block device。

http://item.taobao.com/item.htm?id=43136382454
2015-04-04 03:07:19 +08:00
回复了 zungmou 创建的主题 C 高效扫描一个大文件内字节出现的频率?
还以为回复支持MD,,,重贴一次测试代码链接

https://github.com/ncisoft/ncisoft.github.io/blob/master/file.c
2015-04-04 02:51:07 +08:00
回复了 zungmou 创建的主题 C 高效扫描一个大文件内字节出现的频率?
@zungmou 小机器的测试结果出来了

dd if=/dev/zero of=5G.bin bs=1024k count=5242880

A.1 wo/count
real 1m1.869s
user 0m27.836s
sys 0m5.412s

A.2 w/count

real 1m18.648s
user 0m45.452s
sys 0m4.648s

B.1 wo/count+mmap
real 0m22.094s
user 0m22.080s
sys 0m0.000s

B.2 w/count+mmap
real 0m46.465s
user 0m43.320s
sys 0m2.260s

C.1 wo/count+mmap(不启用系统文件缓存)
real 0m22.118s
user 0m22.100s
sys 0m0.008s

C.2 w/count+mmap+ O_DIRECT(不启用系统文件缓存)
real 0m35.925s
user 0m31.856s
sys 0m2.272s


基本结论:
1. mmap 的加持很明显,尤其体现在sys调用消耗上(对比A B的测试结果)
2. mmap 配合 O_DIRECT 效果更为出色(对比 B C 的测试结果)
3. 内存遍历也是相当消耗cpu的,参照B.1 B.2的对比
4. mmap 的方式实际上仍然需要磁盘io,所以不确定并发多线程统计会有帮助
5. 传统文件读取方式,可以考虑用并发多线程去做统计,感觉效果有限
6. 以上测试基于2G内存的atom小主机,不足以容纳5G的文件缓存,故测试结果是可信的,缓存因素已被排除
7. 如果你机器内存够大,可以创建内存虚拟盘,把文件放上去测试,首先去除磁盘io影响因素
8. 我用的atom小主机性能很烂的,还不到500块钱,你的机器性能更好,性能应该能得到保证

测试代码放在github上了,时间紧,写得不够完善:[file.c](https://github.com/ncisoft/ncisoft.github.io/blob/master/file.c)
2015-04-03 23:22:36 +08:00
回复了 zungmou 创建的主题 C 高效扫描一个大文件内字节出现的频率?
@zungmou 还需要提供两个profile数据,w/wo count loop,用来判断瓶颈是c#的磁盘读还是count

另外,count loop那部分代码不够优化,我对c#不熟,用熟悉的c给你贴示例代码
chatr*cp_last = buffer + read;
char *cp = buffer;
while (cp < cp_last) {
_count[*cp++]++;
}

read = _viewAccessor.ReadArray(_position, buffer, 0, buffer.Length);
这段代码也很诡异,读文件怎么还要指定position呢,反正你都是顺序读,linux是这么定义文件读api的
ssize_t read(int fd, void *buf, size_t count);
如果要指定位置,则有pread函数
ssize_t pread(int fd, void *buf, size_t count, off_t offset);
我不确定指定position会不会导致磁盘移动开销

还有一个奇怪的地方,既然你用到了MemoryMappedFile ,我理解和linux下的mmap是类似的东西,可是linux下的mmap之后,就可以直接当内存读取了,根本就不再需要有read操作。

对c#实在不熟悉,比如MemoryMappedViewAccessor这层封装是不是会引起额外的内存开销,以及由此触发的gc开销,拼性能的时候,api封装越少越好。

讲速度,必须要有硬件条件为前提,cpu主频、硬盘类型(SSD OR SATA OR RAID10),内存总线速度。

一会我在atom小机器上写段c代码测试一下。
2015-04-03 22:24:48 +08:00
回复了 zungmou 创建的主题 C 高效扫描一个大文件内字节出现的频率?
不贴代码谁知道怎么回事
2015-04-03 15:52:38 +08:00
回复了 wzc0x0 创建的主题 问与答 目前在路由器上有没有什么稳定的干净 dns 解析方案?
@shaytan @wzc0x0 ss-local 一个就够了,别的都是多余的。回头我写个教程出来
2015-04-03 15:49:29 +08:00
回复了 wzc0x0 创建的主题 问与答 目前在路由器上有没有什么稳定的干净 dns 解析方案?
@wzc0x0 ss自己就是支持服务器端域名解析的,为啥还执著于干净的dns?
2015-04-03 11:47:19 +08:00
回复了 wzc0x0 创建的主题 问与答 目前在路由器上有没有什么稳定的干净 dns 解析方案?
@shaytan 用ss其实不需要所谓的稳定干净的dns,因为域名解析都在ss服务器端处理的(浏览器使用场景下)
2015-04-03 05:21:03 +08:00
回复了 wzc0x0 创建的主题 问与答 目前在路由器上有没有什么稳定的干净 dns 解析方案?
@shaytan via ss-redir, redsocks is better
2015-04-02 22:11:32 +08:00
回复了 wzc0x0 创建的主题 问与答 目前在路由器上有没有什么稳定的干净 dns 解析方案?
@shaytan pdnsd 自身就支持tcp connect dns,网上教程很多
2015-04-01 17:49:13 +08:00
回复了 jameszeng 创建的主题 VPS Bandwagon Host 的 OpenVPN 怎么设置同时连接用户数大于 1?
不同的设备要用不同的证书,否则后面连进去的就会把前面连进去的给踢掉
2015-03-31 12:29:56 +08:00
回复了 wzc0x0 创建的主题 问与答 目前在路由器上有没有什么稳定的干净 dns 解析方案?
@shaytan 哪个细节不清楚?
2015-03-31 03:50:57 +08:00
回复了 Lamian 创建的主题 数据库 讨论一下 cache 的用法
如果Cache不可信,加cache干啥,过期时间再短也是自欺欺人,你那同事想多了。只是要注意程序以外的地方直接修改数据库,或直接修改cache,这样会造成数据不一致,都跟过期设置无关。可从审计角度考虑问题
2015-03-27 02:54:05 +08:00
回复了 wzc0x0 创建的主题 问与答 目前在路由器上有没有什么稳定的干净 dns 解析方案?
Dnsmasq(使用server选项,选择性强制某些域名的解析通过此路径) --UDP-->dnscrypt-proxy or pdnsd--TCP-->ss-redir-->opendns or google dns
只要ss稳定,就一切稳定。dns不稳定往往是因为ss不稳定,可通过socks用curl测试ss的联通性,找个国内随意下载地址测试即可。
我比较喜欢pdnsd + google dns方案
支持Openwrt
2015-03-26 17:05:08 +08:00
回复了 simman 创建的主题 MySQL mysql5.5/5.6 视图的性能
@simman 作为玩具还是可以用的,但MySQL整个就只能称之为simple database,简单查询可以,复杂的就直接跪了,和oracle差了不止一个时代。分别用过这两者的执行计划就清清楚了。
1 ... 4  5  6  7  8  9  10  11  12  13  
关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1064 人在线   最高记录 6679   ·     Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.5 · 22ms · UTC 19:30 · PVG 03:30 · LAX 12:30 · JFK 15:30
Developed with CodeLauncher
♥ Do have faith in what you're doing.