国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

Linux 內核101:NUMA下的競爭管理

weizx / 3652人閱讀

摘要:有競爭,就會有性能損失。內核之間互相競爭共享資源,比如系統請求隊列和內存管理器等。至于原因,下文將會給出。原因在于還是在相互競爭。事實上在系統中這的確是起作用了雖然對于的競爭還是存在的。而且還引來了兩個問題,這兩個問題會嚴重影響的性能。。

本文參考了以下這篇論文:

A Case for NUMA-aware Contention Management on Multicore Systems 直接點擊鏈接就可以下載

回顧一下上篇文章

上一篇文章 簡單地介紹了一下多 CPU 下的 NUMA 架構。NUMA 架構中將內存劃分為多個不同的區域,將CPU 和臨近的內存組成一個 node 節點,OS 調度的時候會優先使用臨近的內存,從而解決了之前 UMA 架構下 BUS 帶來的性能問題(因為多個 CPU 會對這一條總線產生競爭)。同時也講到了在MySQL在 NUMA 架構下遇到的 “swap insanity”問題,也就是當MySQL 占用的內存超過 (100 / node 總數) % 時,由于『優先使用臨近內存』這個調度模式的存在,造成了內存分配不均,導致系統整體內存充足的情況下,依然出現大量『不正常』的的 swap 現象。如下圖所示:

本文內容概括

本文將從『資源競爭管理』的角度切入,將會看到UMA 時代的競爭管理算法將不再適用于 NUMA,并給出具體的原因分析和解決方案。看完之后相信你一定會對 NUMA有更加深刻的理解,并對多CPU 時代的編程有個感性的認識。

UMA 競爭管理算法對 NUMA 不適用

有共享資源的地方,就會有競爭。有競爭,就會有性能損失。

一直以來,多核系統的共享資源競爭都是一個大問題。內核之間互相競爭共享資源,比如 last-level cache(LLC)、系統請求隊列和內存管理器等。目前比較流行的解決方案叫做 contention-aware scheduler(競爭感知調度程序,下面簡稱為 CAS),也就是說它能夠區分在互相競爭共享資源的 threads,然后把他們分開到不同的 domain。有數據顯示,這種調度方法可以提高最壞情況下80%、平均10%的性能。

這種算法在 UMA 中是有效的。但是需要考慮到的是, NUMA 相比 UMA 有一點很大的不同,那就是 UMA 只有一個 memory node,配備一個 memory controller;而 NUMA中 每個 node 里面都有一個 memory node,各自配備了一個 memory controller,如下圖所示:16個核被分為了4個 node,每個 node 有一個獨立的 memory(當然每個核都可以訪問任意位置的內存)。

那么這種調度方式到底起不起作用呢?如果只是簡單的想一下的話,也許會覺得為什么不行呢?如果同一個 node 里面的 threads 競爭特別激烈,那我就把其中一個移到另一個 node 上,雖然說這會帶來一定的延遲,但是競爭就解決了啊。

然后,事情沒那么簡單,一切真理都來自于實踐,實踐發現,在 NUMA 上面實施這種調度算法的時候,非但沒能很好地解決競爭,反而性能下降了30%。至于原因,下文將會給出。

為什么不適用?

在 NUMA 架構下,CAS 會感知有哪些相互競爭的 threads,然后把其中一個移到不同的 domain 中。這會導致一種情況:thread的內存沒有分配在該thread 運行的那個 node 里面,比如說上圖中,一個 thread 本來運行在 c1上,之后由于競爭被移到 c5上了,但是它的 memory 還在 M1。我們把這種由于移動 thread,導致 thread 和它的內存分家的行為稱作『NUMA-agnostic migrations』(agnostic 中文意思是不可知,自已意會一下~)。

NUMA-agnostic migrations導致了一些問題,比較明顯一點的是thread 獲取內存的延遲提高了,不過這還不是關鍵。更重要的是,NUMA-agnostic migrations無法緩解一些關鍵資源(memory controller)的競爭問題,甚至還引起對更多資源(interconnect connection)的競爭。

下面這張圖很重要,請仔細看:

解釋一下:T 和 C 分別表示兩個程序(thread)

圖0:兩個程序相安無事,沒有競爭關系。

圖1:CT 的內存在一個 node,對 memory controller(MC) 產生了競爭關系。(應該還有訪問延遲,圖中可能忘記標注了)

圖2: 兩個程序都需要試用進行CPU 之間的快速通道,產生了interconnect connection(IC)競爭。同時還有訪問遠程 memory 帶來的訪問延遲(RL)。

圖3:memory controller (MC)競爭,加上遠程訪問延時(RL)。

圖4:TC 位于一個 CPU 里面,對 last-level cache(CA) 產生競爭關系。

圖5:CA + RL

圖6:CA + MC

圖7:最壞的情況,CA + MC + IC + MC

實驗發現,圖3的性能下降了110%。原因在于 threads 還是在相互競爭 memory controller。NUMA-agnostic migrations在遷移 thread 的時候,很有可能最后會導致這種情況出現。

假如現在有兩個threads,A 和 B,A 運行在圖一中的 c1上,B 運行在 c2上,他們之間存在競爭關系(競爭last-level cache)。現在有一個 contention-aware 調度器檢測到了 A 和 B 的競爭關系,于是把 B 移動到 c5上去了,現在A 和 B 不再競爭 last-level cache 了。事實上在 UMA 系統中這的確是起作用了(雖然對于 memory controller 的競爭還是存在的)。

但是對于 NUMA,A 和 B 的 memory 還在一個地方,對于 最關鍵資源memory controller 的競爭沒有得到解決。而且還引來了兩個問題,這兩個問題會嚴重影響 B 的性能。

interconnect connection。(這點影響會很嚴重)

remote access。

總結一下

NUMA-agnostic migrations無法提高 甚至還會降低NUMA競爭管理的性能,按照對性能的影響程度排序有:

沒能夠解決對 memory controller 的競爭關系(memory 還在原來那個地方)。

引起了額外的 interconnect connection。

引起了額外的 remote access。

原論文中還提到了作者自己研究出的一種解決方案,有興趣的同學可以去啃一下原文。

相信你看完了,應該對 NUAM 架構有了一個比較感性的認識了吧。覺得寫的不錯(看在gakki 的情面上)不點個贊鼓勵一下?

廣告時間,歡迎大家關注我的微信公眾號。同時本文同步于 github: https://github.com/liaochangjiang/TechDaily

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/25517.html

相關文章

發表評論

0條評論

weizx

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<