我要啦免费统计
filecache  32m
内存映射文件 处理md5,io cpu都降下来了
254file 6.54g
多线程
线程数 cpu_count()
cpu变为38%  io减为 读取16,348 写入 2,000
[2013-04-19 12:09:02] check is ok!
[2013-04-19 12:10:06] check is ok!
64s
单线程
[2013-04-19 11:57:00] is ok
[2013-04-19 11:57:41] is ok
41s
-----------------------------------------------------------------------------------
多线程 增加运行线程数
cpu_count()*2;
线程分布给cpu亲缘性  设置一下
[2013-04-19 13:23:49] check is ok!
[2013-04-19 13:24:14] check is ok!
25s
cpu 占用53%最多峰值
cpu_count()*4;
线程分布给cpu亲缘性  设置一下
[2013-04-19 13:27:57] check is ok!
[2013-04-19 13:28:19] check is ok!
22s
cpu90%峰值
cpu_count()*8;
线程分布给cpu亲缘性  设置一下
[2013-04-19 13:30:44] check is ok!
[2013-04-19 13:30:51] check is ok!
7s
cpu100%峰值
cpu_count()*16
[2013-04-19 13:33:23] check is ok!
[2013-04-19 13:33:31] check is ok!
8s
cpu100%峰值


单线程:

2081 FILE
11.9G
[2013-04-24 15:32:28] is ok
[2013-04-24 15:41:31] is ok
9分钟
磁盘到了读取的极限 20-30m/s
cpu 未充满 20%左右
io为瓶颈


总结:采用内存映射文件,一次性加载文件到内存块计算md5 降io和io cpu损耗
采用线程和cpu亲缘性,充分利用释放出来的cpu计算能力。
实验记过254哥文件6.5g  4核机器 开启32哥线程分布到各个cpu 可以得到7秒的计算结果,比上面单线程未优化提升6倍速度,比上面多线程未优化提升9倍

一个解决方案:
一个文件: 分段md5,    特征为 md51|md52|md53……
一个连续读取文件的线程,
每个md5作为一个任务计算。
读取持续性读取,到一个连续性内存,分段任务给线程池分段计算,算完全体统计一下,
如果过程中出现里面局部有一个是失败的,那么整个数据都不用验证了,其他任务也不用继续了,直接认为失败,这个概率很高。减少计算一大堆,切分粒度中一点别切太多片。每个任务结束的时候都释放内存回收使用。
io在独立线程, 计算md5在线程池,这样彻底分离,重复内存持续复用。

posted on 2013-04-19 13:44 阅读(2562) 评论(5)  编辑 收藏 引用 所属分类: life

评论:
# re: 多线程 md5 较验 和 单线程校验 校验比较多的文件数 性能评价(初步成果)(2) 2013-04-19 17:17 | YzL
这个跟MD5有啥关系??我还以为是单文件能多线程计算,这才跟MD5有点意义  回复  更多评论
  
# re: 多线程 md5 较验 和 单线程校验 校验比较多的文件数 性能评价(初步成果)(2) 2013-04-19 17:32 | 蔡东赟
@YzL
我这里有上w个文件,解决当前问题为主要要务。

单文件多线程md5 没有那个功力啊。  回复  更多评论
  
# re: 多线程 md5 较验 和 单线程校验 校验比较多的文件数 性能评价(初步成果)(2) 2013-05-03 12:08 | x x
磁盘的读取极限绝对不止20M-30M.  回复  更多评论
  
# re: 多线程 md5 较验 和 单线程校验 校验比较多的文件数 性能评价(初步成果)(2) 2013-05-05 21:42 | 蔡东赟
@x x

system占用 40m/s了
我程序也三四十m了。


  回复  更多评论
  
# re: 多线程 md5 较验 和 单线程校验 校验比较多的文件数 性能评价(初步成果)(2) 2013-05-05 21:43 | 蔡东赟
@x x

还有方案不?

上面是虚拟内存用完了,卡在虚拟内存了。
难道直接用系统的物理内存
  回复  更多评论
  

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   博问   Chat2DB   管理