現在的機器上都是有多個cpu和多個記憶體塊的。以前我們都是将記憶體塊看成是一大塊記憶體,所有cpu到這個共享記憶體的通路消息是一樣的。這就是之前普遍使用的smp模型。但是随着處理器的增加,共享記憶體可能會導緻記憶體通路沖突越來越厲害,且如果記憶體通路達到瓶頸的時候,性能就不能随之增加。numa(non-uniform memory access)就是這樣的環境下引入的一個模型。比如一台機器是有2個處理器,有4個記憶體塊。我們将1個處理器和兩個記憶體塊合起來,稱為一個numa node,這樣這個機器就會有兩個numa node。在實體分布上,numa node的處理器和記憶體塊的實體距離更小,是以通路也更快。比如這台機器會分左右兩個處理器(cpu1, cpu2),在每個處理器兩邊放兩個記憶體塊(memory1.1, memory1.2, memory2.1,memory2.2),這樣numa node1的cpu1通路memory1.1和memory1.2就比通路memory2.1和memory2.2更快。是以使用numa的模式如果能盡量保證本node内的cpu隻通路本node内的記憶體塊,那這樣的效率就是最高的。
綜上所述得出的結論就是,根據具體業務決定numa的使用。
如果你的程式是會占用大規模記憶體的,你大多應該選擇關閉numa node的限制。因為這個時候你的程式很有幾率會碰到numa陷阱。
另外,如果你的程式并不占用大記憶體,而是要求更快的程式運作時間。你大多應該選擇限制隻通路本numa node的方法來進行處理。