Intel Core i7 için NUMA'yı Etkinleştirme


22

Linux çekirdeğinde, belgeler CONFIG_NUMAşöyle diyor:

Enable NUMA (Non Uniform Memory Access) support. 

he kernel will try to allocate memory used by a CPU on the  
local memory controller of the CPU and add some more
NUMA awareness to the kernel.

For 64-bit this is recommended if the system is Intel Core i7
(or later), AMD Opteron, or EM64T NUMA.

Intel Core i7 işlemcim var, ancak AFAICT'de yalnızca bir NUMA düğümü var:

$ numactl --hardware
available: 1 nodes (0)
node 0 cpus: 0 1 2 3 4 5 6 7
node 0 size: 16063 MB
node 0 free: 15031 MB
node distances:
node   0 
  0:  10 

Öyleyse CONFIG_NUMA=y, i7'de yalnızca bir NUMA düğümü olduğunda , bunun amacı nedir?

Yanıtlar:


13

Bence bu resim yeterince açıklıyor:

                  görüntü tanımını buraya girin

  • soket veya numa düğümü , yerel olarak belleğe erişimi olan bir çekirdekler topluluğudur. Her sokette 1 veya daha fazla çekirdek bulunur. Bunun mutlaka fiziksel bir sokete değil, çip satıcınıza bağlı olarak makinenin bellek mimarisine atıfta bulunacağını unutmayın.

  • işlemci çekirdeği (işlemci çekirdeği, mantıksal işlemci) hesaplamaları yapabilen tek bir işlem birimi anlamına gelir.

Bu nedenle yukarıdakiler, NUMA mimarisinden yararlanmak için makinede birden fazla işlemciye ihtiyacınız olacağını gösterir.

Çekirdekte NUMA desteğini derlediniz ve tek işlemcili makinede çalıştırabilirsiniz. SMP desteği ile benzer. Aynı zamanda derlenmiştir ancak çekirdek sistemde tek bir işlemci olduğunu tespit ettiğinde onu kullanmaz (devre dışı bırakır). Aynı NUMA için de geçerlidir. İlgili mesajlar için dmesgçekirdek halkası tamponunu veya /var/log/dmesgdosyasını kontrol edebilirsiniz :

NUMA - tek işlemci (veya NUMA devre dışı) X çoklu işlemci:

No NUMA configuration found
NUMA: Allocated memnodemap from b000 - b440

SMP - tek işlemci X çoklu işlemci:

SMP: Allowing 1 CPUs, 0 hotplug CPUs
SMP: Allowing 32 CPUs, 0 hotplug CPUs

Referanslar


2
@slm - Ben imkan vermelidir ki sen markaları anlamda ne olduğunu söylemek, ama neden çekirdek belgeleri (Soruma alıntı) yok CONFIG_NUMAiçin core i7?
user1968963

1
Haswell'den beri, NUMA'nın 'tek işlemcili' (tek soketli) bir makine için kullanılmasının artık doğru olmadığı artık doğru değil. Bazı Haswell ürünleri, Intel’in Die Die on Cluster ’(Kabadayken Küme) modunu ne ifade ettiğini gösterir. Tek soketli işlemcinin tümleşik çoklu bellek denetleyicileri vardır ve bu nedenle hepsi bu tek soketi kapsayan farklı NUMA bölgeleri olarak değerlendirilebilecek belleğe giden çoklu yollara sahiptir.
Paul Caheny

16
For 64-bit this is recommended if the system is Intel Core i7
(or later), AMD Opteron, or EM64T NUMA.

İlk olarak, Intel Core i7'nin yalnızca bir pazarlama tanımı olduğunu ve Intel Core i7 (veya daha yenisi) ifadesinin çok belirsiz olduğunu unutmayın. Peki bu ne anlama geliyor?

Linux çekirdeği Kconfigyardım metni düzenlemeleri , daha sonra Intel Core i7 ile düzeltilmiş bir Intel Core 7i'den bahsetti , 2008 yılının Kasım ayında yapıldı.

x86: update CONFIG_NUMA description
Impact: clarify/update CONFIG_NUMA text

CONFIG_NUMA description talk about a bit old thing.
So, following changes are better.

 o CONFIG_NUMA is no longer EXPERIMENTAL

 o Opteron is not the only processor of NUMA topology on x86_64 no longer,
   but also Intel Core7i has it.

Makul bir şekilde yalnızca, o zamana kadar spesifikasyon başına piyasaya sürülen ya da ilan edilen Intel Core i7 CPU'lara atıfta bulunabilir. Bu , bellek denetleyicisini Northbridge'den CPU'ya (AMD'nin 2003'te Opteron / AMD64 ile yaptığı) ve QuickPath Interconnect / QPI'yi (AMD'nin HyperTransport'una takılan) takdim ettiği) götüren Nehalem mikro mimarisine dayanan Bloomfield işlemcileri olacaktı. CPU / CPU ve CPU / IOH (IO hub, Kuzey Köprüsü) bağlantı için.

Bloomdale i7 CPU'ları yeni Core i {3,5,7} adlandırma programına ilk girişlerdi . Bu yüzden, bu Linux doküman metni yazıldığı zaman, i7 , i5'e, i5'e (ilk olarak 09/2009'da ilk) ya da i3'e (01/2010'da ilk olarak) karşı özel olarak, ancak yeni Nehalem mikro mimarisine benzememiştir. tümleşik bellek denetleyicisi ve QPI.

Intel basın i7 11/2008 den sürümü (Orada Intel Başlattı Gezegendeki en hızlı işlemci ) devletler o Core i7 işlemci iki katından fazlası önceki Intel "Extreme" platformların bellek bant genişliği , ama hiç NUMA söz etmez .

Sebebi, bence, NUMA'nın masaüstü bilgisayarlar için bir önemi yok, "aşırı" olanlar için bile değil.

NUMA özel fiziksel bellek erişim şeritlerine (sadece bir bellek denetleyicisine değil) sahip birkaç CPU soketi olan (bir sokette yalnızca birkaç çekirdek değil) pahalı sunucular için önemlidir; diğer işlemcilerin hafızasından daha. (8 soketi, 64 çekirdeği, 256 GB RAM'i düşünün.) NUMA, bir CPU'nun, kendi yerel belleğine ek olarak, daha yüksek bir maliyetle de olsa, uzak belleğe (başka bir CPU'nun yerel belleği) erişebileceği anlamına gelir. NUMA, tüm belleğin tüm çekirdeğe eşit olarak bulunduğu SMP gibi paylaşılan bir bellek mimarisinin ve her düğüme ayrı bir bellek bloğu veren MPP (Massively Parallel Processing) gibi dağıtılmış bir bellek mimarisinin sentezidir. MPP'dir, ancak uygulamaya göre SMP'ye benziyor.

Masaüstü anakartlarında çift soket yoktur ve aşırı i7 sürümleri de dahil olmak üzere Intel masaüstü işlemcileri, çift soket yapılandırması için ek QPI bağlantısına sahip değildir.

QPI'nin NUMA ile ne kadar alakalı olduğunu görmek için Wikipedia QPI makalesine bakın:

Tek işlemcili bir anakart üzerindeki en basit haliyle, işlemciyi IO Hub'ına bağlamak için tek bir QPI kullanılır (örneğin, Intel Core i7'yi bir X58'e bağlamak için). Mimarinin daha karmaşık örneklerinde, ayrı QPI bağlantı çiftleri, anakart üzerindeki bir ağdaki bir veya daha fazla işlemci ve bir veya daha fazla IO hub'ı veya yönlendirme hub'ı bağlayarak tüm bileşenlerin ağ üzerinden diğer bileşenlere erişmesine izin verir. HyperTransport'ta olduğu gibi, QuickPath Mimarisi, işlemcilerin tümleşik bellek denetleyicileri olacağını ve düzensiz bir bellek erişimi (NUMA) mimarisine olanak sağlayacağını varsayar.

[...]

Her ne kadar bazı high-end Core i7 işlemciler QPI'yi ifşa etseler de, tek yuvalı anakartlar için tasarlanan diğer "mainstream" Nehalem masaüstü ve mobil işlemcileri (örneğin, LGA 1156 Core i3, Core i5 ve Lynnfield / Clarksfield ve halef ailelerinin diğer Core i7 işlemcileri) QPI'yi dışarıya maruz bırakmayın, çünkü bu işlemciler çoklu soketli sistemlere katılmaya yönelik değildir. Ancak, QPI bu çiplerde dahili olarak kullanılmaktadır […]

Çok soketli bir sunucu kartındaki Intel Nehalem CPU'nun yerel olmayan bellek erişimini sağlaması QPI üzerindendir. Ayrıca NUMA hakkındaki makalede :

Intel, Nehalem ve Tukwila işlemcileri ile 2007'nin sonlarında x86 ve Itanium sunucuları için NUMA uyumluluğu olduğunu açıkladı. Her iki CPU ailesi ortak bir yonga setini paylaşıyor; arabağlantıya Intel Hızlı Yol Bağlantısı (QPI) adı verilir. AMD, Opperron işlemcisiyle (2003) HyperTransport kullanarak NUMA'yı uygulamaya koydu.

Intel'in i7'deki iki QPI bağlantısından birini devre dışı bıraktığını ve böylece NUMA'nın uygulandığı çift soketli yapılandırmayı devre dışı bıraktığını görmek için 11 / 2008'den bu raporu tekrar kontrol edin :

Nehalem'in bu birinci sınıf masaüstü uygulaması, Bloomfield adlı kod adında ve nihayetinde iki soketli sunuculara girmesi gereken aynı silikon. Sonuç olarak, Bloomfield çipleri, yukarıdaki kalıpta gösterildiği gibi, gemide iki QPI bağlantısıyla geliyor. Ancak, ikinci QPI bağlantısı kullanılmamaktadır. Bu mimariyi temel alan 2P sunucularında, bu ikinci ara bağlantı iki soketi birbirine bağlayacak ve bunun üzerinden CPU'lar önbellek tutarlılık mesajlarını (yeni bir protokol kullanarak) ve verileri (bellek alt sistemi NUMA olacağından) benzer şekilde paylaşacak Opteron'a.

Bu yüzden Google araştırma sonuçlarımla ilgili sorunuzdan uzak duruyorum… Linux belgelerinin neden 2008 yılının sonlarında bunu açmayı önermeye başladığını mı soruyorsunuz? Bu sorunun kesin olarak doğru bir cevabı olduğundan emin değilim… Doktora yazıcısına sormamız gerekiyor. NUMA'yı açmak, masaüstü CPU kullanıcılarına fayda sağlamaz, ancak çok soketli kullanıcılara yardımcı olurken de onlara zarar vermez, neden olmasın? Bu gerekçe olabilirdi. Bunu Arch Linux izleyicide NUMA'yı devre dışı bırakma hakkında bir tartışmada yansıdığını buldum ( FS # 31187 - [linux] - NUMA'yı config dosyalarından devre dışı bırak ).

Doküman yazarı, Nehalem mimarisinin NUMA potansiyelini, dokümanın yazıldığı tarihte 11/2008 Core i7 işlemcilerinin (920, 940, 965) tek temsilciler olduğunu düşünmüş olabilir; NUMA'nın gerçekten anlam ifade ettiği ilk Nehalem yongaları, muhtemelen Xeon E5520 gibi çift QPI bağlantısı olan Q1 / 2009 Xeon işlemcileridir .


2

Bence --showanahtarı kullanırsan daha mantıklı gelebilir:

$ numactl --show
policy: default
preferred node: current
physcpubind: 0 1 2 3 
cpubind: 0 
nodebind: 0 
membind: 0 

Böylece physcpubind'in kullanımını şöyle kontrol edebilirsiniz:

$ numactl --physcpubind=+0-2 myapp

Bu, uygulamayı myappilk 2 CPU çekirdeği ile sınırlar. Sistemim 4 çekirdekli bir i5.

Referanslar


2

Çekirdeğimi kendi başıma inşa ederken aynı şeyi masaüstü bilgisayarım için de araştırıyorum. Çok fazla araştırmadan sonra NUMA'yı devre dışı bırakmaya karar verdim. İşlemcim, HT ile 8 işlemciye sahip olan Core i7 3820'dir. Bu sayfa kararıma gelmeme yardımcı oldu.

NUMA'yı config dosyalarından devre dışı bırak

Özetle, NUMA yalnızca 1'den fazla CPU soketine sahipseniz (çekirdekten bağımsız olarak) faydalı olacaktır. Birden fazla çekirdeğe sahip bile olsa 1 CPU Soket makinelerinde işlem gücü çok azdır, ancak pek fazla fark edilmez, bu nedenle çoğu dağıtım, 1 soketten daha fazla sunucuya ve makinelere büyük bir fayda sağlayacağı için etkin olmasını sağlar.


1

En fazla bir işlemcili bir bilgisayarda NUMA tamamen işe yaramaz. Kendi çekirdeğinizde devre dışı bırakın.

İşlemci bağını her zaman görev kümesi (1) ile kontrol edebilirsiniz .

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.