filecache 32m
內(nèi)存映射文件 處理md5,io cpu都降下來了
254file 6.54g
多線程
線程數(shù) cpu_count()
cpu變?yōu)?8% 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
-----------------------------------------------------------------------------------
多線程 增加運行線程數(shù)
cpu_count()*2;
線程分布給cpu親緣性 設(shè)置一下
[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親緣性 設(shè)置一下
[2013-04-19 13:27:57] check is ok!
[2013-04-19 13:28:19] check is ok!
22s
cpu90%峰值
cpu_count()*8;
線程分布給cpu親緣性 設(shè)置一下
[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為瓶頸
總結(jié):采用內(nèi)存映射文件,一次性加載文件到內(nèi)存塊計算md5 降io和io cpu損耗
采用線程和cpu親緣性,充分利用釋放出來的cpu計算能力。
實驗記過254哥文件6.5g 4核機(jī)器 開啟32哥線程分布到各個cpu 可以得到7秒的計算結(jié)果,比上面單線程未優(yōu)化提升6倍速度,比上面多線程未優(yōu)化提升9倍
一個解決方案:
一個文件: 分段md5, 特征為 md51|md52|md53……
一個連續(xù)讀取文件的線程,
每個md5作為一個任務(wù)計算。
讀取持續(xù)性讀取,到一個連續(xù)性內(nèi)存,分段任務(wù)給線程池分段計算,算完全體統(tǒng)計一下,
如果過程中出現(xiàn)里面局部有一個是失敗的,那么整個數(shù)據(jù)都不用驗證了,其他任務(wù)也不用繼續(xù)了,直接認(rèn)為失敗,這個概率很高。減少計算一大堆,切分粒度中一點別切太多片。每個任務(wù)結(jié)束的時候都釋放內(nèi)存回收使用。
io在獨立線程, 計算md5在線程池,這樣徹底分離,重復(fù)內(nèi)存持續(xù)復(fù)用。
posted on 2013-04-19 13:44
爬 閱讀(2607)
評論(5) 編輯 收藏 引用 所屬分類:
life