日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

oracle 老白,老白学编程 - Netdata学习 - numa

發布時間:2023/12/1 编程问答 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 oracle 老白,老白学编程 - Netdata学习 - numa 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Numa 介紹

NUMA,即Non-Uniform Memory Access Architecture,非統一內存訪問架構。

背景

傳統的SMP中, 所有處理器共享系統總線,當cpu數目增大時, 系統總現競爭就相應增加,會成為系統的瓶頸,所以SMP系統的CPU數目一般只有數十個。

Numa物理內存管理

有兩種類型計算機,分別以不同方式管理內存。

UMA(一致內存訪問,unifurm memory access)將內存以連續方式組織起來(可能會有小缺口)。SMP系統中的每個cpu訪問的內存區都有一樣的。

NUMA(非一致內存訪問,non-uniform memory access)是多處理器計算機,各個cpu都有本地的內存,支持快速的訪問;各個處理器通過總線連接,用以支持其他cpu本地內存的訪問,相比本地內存訪問較慢。

節點

pg_data_t 用于表示節點的基本元素。

zone

每個節點的內存被分為多個塊,稱做zone。

ZONE_DMA, DMA內存域

ZONE_NORMAL , 可以直接映射到內核的普通內存域。

ZONE_HIGDMEM , 超出內核段的物理地址。

調度

在每個任務創建時都會賦予一個HOME結點(所謂HOME結點,就是該任務獲得最初內存分配的結點),它是當時創建該任務時全系統負載最輕的結點,由于目前Linux中不支持任務的內存從一個結點遷移到另一個結點,因此在該任務的生命期內HOME結點保持不變。

一個任務最初的負載平衡工作(也就是選該任務的HOME結點)缺省情況下是由exec()系統調用完成的,也可以由fork()系統調用完成。在任務結構中的node_policy域決定了最初的負載平衡選擇方式。

linux kernel 3.8支持page在numa node上遷移。3.8前,調度器對進程page 分配是無感知的,遷移進程是基于對進程cache hotness來預估的,因此在3.8前,若想獲得盡可能好的性能,應使用taskset, cpuset等工具將進程pin到特定的核上(c++框架seastar正是這種策略避免遷移的同時也實現了share-nothing);

policy

memory policy指的是在NUMA系統下的內存分配到哪個node上的問題。一種memory policy由一個mode, 可選的mode flags,和可選的nodes組成。分配針對的對象可以是整個系統,可以是某個進程,可以是進程的某段內存區域

系統默認級別

將使用local allocations

任務/進程級別

如果沒有被設置,回退到默認;如果被設置,可由fork, exec, clone繼承。對于進程設定memory policy之前分配的任何pages在設定之后保持原樣

VMA級別 未設定時,默認取基于進程的policy; 主要作用于annoymous mapping(stack,heap) 可在共享虛擬頁面的任務上共享,比如線程 exec調用時不繼承它,因為exec會丟棄父進程頁面,重新創建 如果任務試圖在此VMA的子塊內再次安裝VMA policy,內核會將它分裂成多個VMA 默認情況下,在安裝此policy之前的page保持原樣,除非mbind調用導致遷移

shared策略

作用于memory objects,與VMA策略類似,也有不同之處

分配模式

NODE LOCAL (系統默認)

在當前代碼執行的地方分配內存

Interleave

第一頁分配在node 0,下一頁在node 1,再下一頁node 0,如此輪換。適合被多個線程訪問的數據

進程的Numa分配可通過/proc//numa_maps查看,單個node分配查看/sys/devices/system/node/node/meminfo。

進程會從父進程那繼承分配策略,即默認的node local,且Linux 調度器會盡可能地在負載均衡的同時保持進程的cache不失效,也即盡可能讓進程在靠近分配內存的node的CPU上運行。但,萬一負載非常不均,調度器是會將進程遷移到其它numa node上的,這時的內存訪問就變成了remote acess,性能會下降。kernel 3.8+支持將數據遷移到running node上。

參考

總結

以上是生活随笔為你收集整理的oracle 老白,老白学编程 - Netdata学习 - numa的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。