Mengaktifkan NUMA untuk Intel Core i7

22

Di kernel Linux, dokumentasi untuk CONFIG_NUMAmengatakan:

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.

Saya memiliki prosesor Intel Core i7, tetapi AFAICT hanya memiliki satu NUMA node:

$ 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 

Jadi apa tujuan memiliki CONFIG_NUMA=y, ketika i7 hanya memiliki satu simpul NUMA?

pengguna1968963
sumber

Jawaban:

13

Saya pikir gambar ini cukup menjelaskan:

                  masukkan deskripsi gambar di sini

  • socket atau numa node adalah kumpulan core dengan akses lokal ke memori. Setiap soket berisi 1 atau lebih inti. Perhatikan bahwa ini tidak harus merujuk ke soket fisik, tetapi lebih ke arsitektur memori mesin, yang akan tergantung pada vendor chip Anda.

  • inti prosesor ( inti cpu, prosesor logis) mengacu pada satu unit pemrosesan tunggal yang mampu melakukan komputasi.

Jadi di atas menunjukkan bahwa Anda akan memerlukan banyak prosesor di mesin untuk memanfaatkan arsitektur NUMA.

Anda dapat mengkompilasi dukungan NUMA di kernel dan menjalankannya pada mesin prosesor tunggal. Ini mirip dengan dukungan SMP. Itu dikompilasi juga tetapi ketika kernel mendeteksi bahwa ada prosesor tunggal dalam sistem itu tidak akan menggunakannya (menonaktifkannya). Hal yang sama berlaku untuk NUMA. Anda dapat memeriksa dmesgbuffer cincin kernel atau /var/log/dmesgfile untuk pesan terkait:

NUMA - prosesor tunggal (atau NUMA dinonaktifkan) prosesor multi X:

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

SMP - prosesor tunggal X multi prosesor:

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

Referensi

dsmsk80
sumber
2
@slm - apa yang Anda katakan masuk akal, tapi mengapa dokumentasi kernel (dikutip dalam pertanyaan saya) mengatakan saya harus memungkinkan CONFIG_NUMAuntuk core i7?
user1968963
1
Karena Haswell tidak lagi benar bahwa NUMA tidak ada gunanya untuk mesin 'prosesor tunggal' (artinya soket tunggal). Produk-produk Haswell tertentu menonjolkan apa yang oleh Intel disebut sebagai mode 'Cluster on Die'. Prosesor soket tunggal memiliki beberapa pengontrol memori terintegrasi dan karenanya banyak jalur ke memori, yang dengan fitur ini dapat diperlakukan sebagai wilayah NUMA yang berbeda, yang semuanya mencakup satu soket.
Paul Caheny
16
For 64-bit this is recommended if the system is Intel Core i7
(or later), AMD Opteron, or EM64T NUMA.

Pertama, perhatikan bahwa Intel Core i7 hanyalah sebutan pemasaran, dan frasa Intel Core i7 (atau lebih baru) sangat kabur. Jadi apa artinya?

KconfigPengeditan teks bantuan kernel Linux menyebutkan Intel Core 7i , kemudian diperbaiki ke Intel Core i7 , dilakukan pada November 2008. Log komit berbunyi:

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.

Itu hanya bisa merujuk ke Intel Core i7 CPU yang dirilis atau diumumkan per spec pada saat itu. Itu akan menjadi prosesor Bloomfield , berdasarkan pada mikroarsitektur Nehalem , yang memindahkan pengontrol memori dari Northbridge ke CPU (yang telah dilakukan AMD pada tahun 2003 dengan Opteron / AMD64) dan memperkenalkan QuickPath Interconnect / QPI (sebagai pengikat HyperTransport AMD) untuk interkoneksi CPU / CPU dan CPU / IOH (IO hub, ex-Northbridge).

CPU Bloomdale i7 adalah entri pertama dalam skema penamaan Core i {3,5,7} baru . Jadi ketika teks doc Linux itu ditulis, i7 tidak secara spesifik merujuk ke Core i7 yang bertentangan dengan i5 (pertama pada 09/2009) atau i3 (pertama pada 01/2010), tetapi dalam semua kemungkinan mikroarsitektur Nehalem baru dengan pengontrol memori terintegrasi dan QPI.

Ada siaran pers Intel dari 11/2008 tentang i7 ( Intel Meluncurkan Prosesor Tercepat di Planet ) yang menyatakan bahwa prosesor Core i7 lebih dari dua kali lipat bandwidth memori platform Intel "Extreme" sebelumnya , tetapi tidak menyebutkan NUMA sama sekali .

Alasannya, saya pikir, bahwa NUMA tidak masalah untuk PC desktop, bahkan untuk yang "ekstrim".

NUMA penting untuk server mahal yang memiliki beberapa soket CPU (bukan hanya beberapa inti pada satu soket) dengan jalur akses memori fisik khusus (bukan hanya satu pengontrol memori), sehingga setiap CPU memiliki memori lokal khusus, yang "lebih dekat" dengannya dari memori CPU lainnya. (Pikirkan 8 soket, 64 core, RAM 256 GB.) NUMA berarti CPU juga dapat mengakses memori jarak jauh (memori lokal CPU lain) selain memori lokalnya sendiri, walaupun dengan biaya yang lebih tinggi. NUMA adalah sintesis dari arsitektur memori bersama seperti SMP, di mana semua memori tersedia secara merata untuk semua core, dan arsitektur memori terdistribusi seperti MPP (Massively Parallel Processing), yang memberikan setiap node blok memori khusus. Ini adalah MPP, tetapi sepertinya SMP untuk aplikasi.

Motherboard desktop tidak memiliki soket ganda dan CPU desktop Intel termasuk edisi i7 ekstrim tidak memiliki tautan QPI tambahan untuk konfigurasi soket ganda.

Periksa artikel Wikipedia QPI untuk melihat bagaimana QPI relevan dengan NUMA:

Dalam bentuknya yang paling sederhana pada motherboard prosesor tunggal, QPI tunggal digunakan untuk menghubungkan prosesor ke IO Hub (misalnya, untuk menghubungkan Intel Core i7 ke X58). Dalam contoh arsitektur yang lebih kompleks, pasangan tautan QPI yang terpisah menghubungkan satu atau lebih prosesor dan satu atau lebih hub IO atau hub perutean dalam jaringan pada motherboard, memungkinkan semua komponen untuk mengakses komponen lain melalui jaringan. Seperti HyperTransport, Arsitektur QuickPath mengasumsikan bahwa prosesor akan memiliki pengontrol memori terintegrasi, dan memungkinkan arsitektur akses memori yang tidak seragam (NUMA).

[...]

Meskipun beberapa prosesor Core i7 high-end mengekspos QPI, prosesor desktop dan mobile Nehalem "mainstream" lainnya ditujukan untuk papan soket tunggal (mis. LGA 1156 Core i3, Core i5, dan prosesor Core i7 lainnya dari Lynnfield / Clarksfield dan keluarga penerus) jangan memaparkan QPI secara eksternal, karena prosesor ini tidak dimaksudkan untuk berpartisipasi dalam sistem multi-soket. Namun, QPI digunakan secara internal pada chip ini [...]

Cara CPU Intel Nehalem pada papan server multi-socket membuat akses memori non-lokal adalah melalui QPI. Juga dalam artikel tentang NUMA :

Intel mengumumkan kompatibilitas NUMA untuk server x86 dan Itanium pada akhir 2007 dengan CPU Nehalem dan Tukwila. Kedua keluarga CPU berbagi chipset yang sama; interkoneksi disebut Intel Quick Path Interconnect (QPI). AMD mengimplementasikan NUMA dengan prosesor Opteron (2003), menggunakan HyperTransport.

Periksa kembali laporan ini dari 11/2008 untuk melihat bahwa Intel menonaktifkan salah satu dari dua tautan QPI di i7, sehingga menonaktifkan konfigurasi soket ganda, di mana NUMA berlaku:

Implementasi desktop Nehalem high-end pertama ini bernama Bloomfield, dan pada dasarnya silikon yang sama yang pada akhirnya harus masuk ke server dua-socket. Akibatnya, chip Bloomfield hadir dengan dua tautan QPI, seperti yang ditunjukkan oleh bidikan di atas. Namun, tautan QPI kedua tidak digunakan. Di server 2P yang didasarkan pada arsitektur ini, interkoneksi kedua akan menghubungkan kedua soket, dan di atasnya, CPU akan berbagi pesan koherensi cache (menggunakan protokol baru) dan data (karena subsistem memori akan menjadi NUMA) —juga, sangat mirip ke Opteron.

Jadi saya telah menyimpang dari pertanyaan Anda yang berhubungan dengan hasil penelitian Google saya ... Anda bertanya mengapa dokumen Linux mulai merekomendasikan untuk menyalakannya pada akhir 2008? Tidak yakin pertanyaan ini memiliki jawaban yang terbukti benar ... Kami harus bertanya kepada penulis dokumen. Mengaktifkan NUMA tidak menguntungkan pengguna CPU desktop, tetapi juga tidak merugikan mereka secara signifikan, sambil membantu pengguna multi-socket, jadi mengapa tidak? Ini bisa jadi alasannya. Ditemukan yang tercermin dalam diskusi tentang menonaktifkan NUMA pada pelacak Arch Linux ( FS # 31187 - [linux] - menonaktifkan NUMA dari file konfigurasi ).

Penulis dokumen mungkin juga memikirkan potensi NUMA dari arsitektur Nehalem yang, ketika dokumen itu ditulis, prosesor Core i7 11/2008 (920, 940, 965) adalah satu-satunya perwakilan; chip Nehalem pertama yang benar-benar masuk akal oleh NUMA mungkin adalah prosesor Xeon Q1 / 2009 dengan tautan QPI ganda seperti Xeon E5520 .

Lumi
sumber
2

Saya pikir jika Anda menggunakan --showsakelar itu mungkin lebih masuk akal:

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

Jadi, Anda dapat mengontrol penggunaan physcpubind seperti ini:

$ numactl --physcpubind=+0-2 myapp

Ini akan membatasi aplikasi myappke 2 core CPU pertama. Sistem saya adalah i5 dengan 4 core.

Referensi

slm
sumber
2

Saya telah meneliti hal yang sama untuk PC desktop saya sambil membangun kernel saya sendiri. Saya telah memutuskan untuk menonaktifkan NUMA setelah banyak penelitian. CPU saya adalah Core i7 3820 yang memiliki 8 prosesor dengan HT. Halaman ini membantu saya mengambil keputusan.

nonaktifkan NUMA dari file konfigurasi

Singkatnya, NUMA hanya bermanfaat jika Anda memiliki lebih dari 1 soket CPU (terlepas dari inti). Ada hit yang sangat kecil untuk memproses daya pada 1 mesin CPU Socket bahkan dengan beberapa core, tetapi hampir tidak terlihat sehingga sebagian besar distribusi membiarkannya diaktifkan karena akan memberikan manfaat besar bagi server dan mesin dengan lebih dari 1 soket.

Anthony S.
sumber
1

Dalam PC dengan paling banyak satu CPU, NUMA sama sekali tidak berguna. Silakan menonaktifkannya di kernel Anda sendiri.

Anda selalu dapat mengontrol ikatan CPU dengan tasket (1) .

b166er
sumber