天天看點

NUMA與英特爾下一代Xeon處理器學習心得(9)

libnuma  -- NUMA政策的應用程式程式設計接口

盡管numactl能夠用作程序級别的記憶體控制,但其缺點也很明顯:配置設定政策作用于整個程序,無法指定到線程或者特定記憶體區域。Libnuma為更加精細的控制提供了API接口。

應用程式隻需在代碼中引用numa.h頭檔案, 并在連接配接時如下連接配接libnuma的共享庫即可友善使用libnuma:

#include <numa.h>

….

cc ... -lnuma

在開始使用NUMA API更改政策或配置設定記憶體之前, 首先需要調用numa_available()函數。 之後, 則可以使用libnuma的接口對程序政策進行更改,或配置設定記憶體。Libnuma庫的函數包括以下幾組:

1.    環境資訊 – 包括一組用于擷取系統記憶體和CPU拓撲資訊的函數,如系統節點數目,特定節點的記憶體大小等等。

2.    程序政策 – 包括一組用于擷取,設定和更改程序級政策的函數;

3.    記憶體區域政策 – 包括一組用于設定特定記憶體區域政策的函數;

4.    節點綁定 -  将線程綁定到指定節點或節點組的函數;

5.    配置設定函數 -  忽略目前程序政策,直接使用特定的政策進行配置設定的一組函數;

6.    其他輔助函數

通過使用這些接口,程式員可以非常靈活的配置程式記憶體配置設定的方式和政策, 以達到優化性能的目的。通常的基于NUMA的記憶體配置設定流程為:

1.    使用numa_available()判定系統是否支援NUMA

2.    使用程序政策函數定義程序的整體政策

3.    使用節點綁定函數合理綁定線程

4.    使用普通的配置設定函數(如malloc)進行普通配置設定

5.    對于特定性能需求的代碼, 使用NUMA配置設定函數做指定配置設定

6.    對于記憶體區域,使用記憶體區域政策函數設定其配置設定政策

本文轉自Intel_ISN 51CTO部落格,原文連結:http://blog.51cto.com/intelisn/130453,如需轉載請自行聯系原作者

繼續閱讀