多執行緒讀記憶體變慢如何解決?

時間 2021-05-07 03:28:27

1樓:洪春濤

感覺你做壓力測試的時候已經把記憶體頻寬撐滿了。一次請求查5000個指紋,每個指紋帶5000首歌的倒排表,那就是25M,每首歌8個位元組的話就是200MB。對這200MB進行排序的話,假設需要讀取3倍資料量,那就是600MB。

讀完再對每首歌進行一次匹配,估計又用掉600MB左右,於是每個請求需要1~2GB的記憶體頻寬,10次請求就是20GB,這已經接近記憶體頻寬的極限了。

即使上面的估計有誤差,那也就是三五倍的差別,數量級應該是沒錯的,所以再怎麼優化也就是10 QPS到50 QPS的差距了。。。

單執行緒的時候3個請求每秒,20執行緒的時候變到0.5個每秒,很可能就是因為記憶體頻寬已經滿了,於是每個請求都需要等待更長的時間才能完成

2樓:

這種問題光說演算法不行的,效能問題這種東西,有很可能是乙個很小的問題就會引起效能下降。理論上如果請求都是讀請求而且讀請求之間沒有鎖的話,效能不會下降這麼多。感覺最大的可能就是請求之間有共享資源需要加鎖,如果是讀寫請求,很有可能false sharing,可以通過工具對比單執行緒與多CPU cache的命中率

如果是numa架構,可以嘗試執行緒跑在在固定的cpu上,盡量訪問local memory,減少remote memory的訪問

3樓:Metre

指紋庫是否提前讀取於記憶體當中否則在檢索的時候是否存在IO操作

如果是的話這塊將消耗大量的時間幾千個指紋 20個執行緒....

一道Nvidia校招多執行緒概念題,如何解釋三種伺服器處理請求方式的優劣?

陳碩 這個問題表意不明。1.thread per reqeuest 是 well defined。2.thread pool 大概也可以算是 well defined,通常的理解是每次request到達就從threadpool裡抓乙個空閒執行緒來處理它。問題是如果threadpool裡沒有空閒執行緒...

選科限制無法讀想要的專業如何解決?

優素福.買買提 來得及,高中又允許的話,改選科 來不及的話,只能看以後大學可以轉專業不了 如果轉不了,可以考慮修雙學位 我只想問的是,怎麼個坑呀,選科這麼重要的事情,你自己本來就有明確的目標專業方向,當時隨便找個小程式或者網頁查一下選考要求也不至於選成這樣呀。 Trean 很多大學開放轉專業。反正選...

如何解決企業記憶體不夠用的難題,實際效果如何?

技術上說ApachePass當然是好東西,DDR T用的是記憶體匯流排,比NVMe還是快很多。相比原本市場上的幾個NVDIMM產品,巨大的電容不見了,技術上也是秒殺,還無縫的整合進Intel X86的伺服器系統,Intel是很厲害的,這個賽道完全沒對手。然而,NVDIMM的賽道本來就那麼寬,市場就那...