2012-08-30 22 views
8

當我們在NUMA系統上工作時,相對於當前的NUMA節點,內存可以是本地或遠程的。 爲了使存儲更多的地方有一個「第一接觸」政策(默認內存節點綁定策略): http://lse.sourceforge.net/numa/status/description.html在現代Linux中是否有NUMA下一步觸摸策略

默認內存綁定 用戶程序內存分配上是非常重要的一個靠近包含它們運行的​​CPU的節點。因此,默認情況下,來自包含頁面錯誤CPU的節點的內存滿足頁面錯誤。由於第一個觸摸頁面的CPU將是導致頁面進入的CPU,因此此默認策略稱爲「第一次觸摸」。

http://techpubs.sgi.com/library/dynaweb_docs/0640/SGI_Developer/books/OrOn2_PfTune/sgi_html/ch08.html

默認的策略被稱爲初次接觸。在此策略下,首先接觸(即寫入或讀取)一頁內存的進程會導致該頁面在進程正在運行的節點中分配。此政策適用於順序程序和許多並行程序。

還有一些其他的非本地政策。還有一個功能是要求將內存段顯式移動到某個NUMA節點。但有時(在單個應用程序的許多線程的上下文中),有「下一次觸摸」策略可能很有用:調用某些函數以將某些數據「解除綁定」某些內存區域(高達100 MB),然後重新應用這個區域上的「第一次觸摸」式處理器,它將在下一次觸摸(讀或寫)時將頁面遷移到訪問線程的numa節點。

這個策略對於有很多數據需要處理的線程很有用,並且有不同的數據訪問模式(例如第一階段 - 通過線程按列拆分二維數組;第二階段 - 拆分相同的數據按行)。

這種政策是在Solaris中,因爲9通過madvice與MADV_ACCESS_LWP標誌

https://cims.nyu.edu/cgi-systems/man.cgi?section=3C&topic=madvise

MADV_ACCESS_LWP支持告訴,未來LWP到 觸摸指定地址範圍 將最重的訪問內核,因此 內核應該嘗試爲此 範圍和LWP分配 內存和其他資源。

有(2009年5月)的補丁Linux內核命名爲「親和上下一觸式」,http://lwn.net/Articles/332754/thread),但據我所知這是不被接受成爲主線,是不是?

另外還有Lee Schermerhorn的「migrate_on_fault」補丁http://free.linux.hp.com/~lts/Patches/PageMigration/

所以,問題是:在當前的vanilla Linux內核中還是在一些主要的分支,如RedHat linux內核或Oracle Linux內核中,是否存在NUMA的下一個觸摸?

+0

查看本文 - https://hal.inria.fr/inria-00358172/file/article.pdf「在Linux上爲多線程應用程序啓用高性能內存遷移」,Brice Goglin,Nathalie Furmento,2009「實現用戶空間中的Next-touch策略通過mprotect和信號處理程序進行分段故障「。 next-touch的實施是他們的MaMI/Marcel的一部分https://runtime.bordeaux.inria.fr/MaMI//https://runtime.bordeaux.inria.fr/marcel/ – osgx

回答

1

根據我的理解,在香草核中沒有任何類似的東西。numactl具有手動遷移頁面的功能,但對您的情況可能沒有幫助。 (NUMA策略描述在Documentation/vm/numa_memory_policy中,如果你想檢查一下你自己)

我認爲這些補丁沒有合併,因爲我沒有看到當前內核中顯示的任何相關代碼片段。