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