NUMA Mimarisini Anlamak

Understanding Numa Architecture



Bilgisayar tasarlamak her zaman bir uzlaşmadır. Bir bilgisayarın dört temel bileşeni - merkezi işlem birimi (CPU) veya işlemci, bellek, depolama ve bileşenleri bağlamak için kart (G/Ç veri yolu sistemi) - mümkün olduğunca akıllı bir şekilde bir araya getirilerek bir makine oluşturulur. hem uygun maliyetli hem de güçlüdür. Tasarım süreci çoğunlukla işlemcilere (yardımcı işlemciler, çok çekirdekli kurulum), bellek türü ve miktarına, depolamaya (diskler, dosya sistemi) ve ayrıca fiyata yönelik bir optimizasyon içerir. Ortak işlemcilerin ve çok çekirdekli mimarinin arkasındaki fikir, işlemleri mümkün olan en küçük alanda mümkün olan en fazla sayıda tek hesaplama birimine dağıtmak ve hesaplama talimatlarının paralel yürütülmesini daha kullanılabilir ve uygun maliyetli hale getirmek. Bellek açısından, bireysel bilgi işlem birimi tarafından ele alınabilecek miktar veya boyut ve hangi bellek türünün mümkün olan en düşük gecikmeyle çalıştığı sorusudur. Depolama harici belleğe aittir ve performansı disk türüne, kullanılan dosya sistemine, iş parçacığına, aktarım protokolüne, iletişim yapısına ve bağlı bellek aygıtlarının sayısına bağlıdır.

G/Ç veri yollarının tasarımı, bilgisayar arterlerini temsil eder ve yukarıda listelenen tek bileşenler arasında ne kadar ve ne kadar hızlı veri alışverişi yapılabileceğini önemli ölçüde belirler. En üst kategori, Yüksek Performanslı Bilgi İşlem (HPC) alanında kullanılan bileşenler tarafından yönetilmektedir. 2020 yılının ortalarından itibaren, HPC'nin çağdaş temsilcileri arasında Nvidia Tesla ve DGX, Radeon Instinct ve Intel Xeon Phi GPU tabanlı hızlandırıcı ürünleri bulunmaktadır (ürün karşılaştırmaları için bkz. [1,2]).







NUMA'yı Anlamak

Tekdüze Olmayan Bellek Erişimi (NUMA), çağdaş çoklu işlem sistemlerinde kullanılan paylaşılan bir bellek mimarisini tanımlar. NUMA, toplam belleğin tüm düğümler arasında paylaşılacağı şekilde birkaç tek düğümden oluşan bir bilgi işlem sistemidir: her CPU'ya kendi yerel belleği atanır ve sistemdeki diğer CPU'lardan belleğe erişebilir [12,7].



NUMA, birden fazla merkezi işlem birimini (CPU) bilgisayarda bulunan herhangi bir miktarda bilgisayar belleğine bağlamak için kullanılan akıllı bir sistemdir. Tek NUMA düğümleri, bir CPU'nun diğer NUMA düğümleriyle ilişkili belleğe sistematik olarak erişebilmesi için ölçeklenebilir bir ağ (G/Ç veri yolu) üzerinden bağlanır.



Yerel bellek, CPU'nun belirli bir NUMA düğümünde kullandığı bellektir. Yabancı veya uzak bellek, bir CPU'nun başka bir NUMA düğümünden aldığı bellektir. NUMA oranı terimi, yabancı belleğe erişim maliyetinin yerel belleğe erişim maliyetine oranını tanımlar. Oran ne kadar büyük olursa, maliyet de o kadar yüksek olur ve dolayısıyla belleğe erişim o kadar uzun sürer.





Ancak, bu CPU'nun kendi yerel belleğine erişmesinden daha uzun sürer. Düşük gecikmeyi yüksek bant genişliği ile birleştirdiği için yerel bellek erişimi büyük bir avantajdır. Buna karşılık, başka herhangi bir CPU'ya ait belleğe erişim, daha yüksek gecikme süresine ve daha düşük bant genişliği performansına sahiptir.

Geriye Bakmak: Paylaşılan Bellekli Çok İşlemcilerin Evrimi

Frank Dennemann [8], modern sistem mimarilerinin, bu sistemler özel olarak bu amaç için tasarlanmış olmasına rağmen, gerçekten Tekdüzen Bellek Erişimine (UMA) izin vermediğini belirtmektedir. Basitçe söylemek gerekirse, paralel hesaplama fikri, belirli bir görevi hesaplamak için işbirliği yapan bir grup işlemciye sahip olmaktı, böylece aksi takdirde klasik sıralı bir hesaplamayı hızlandırdı.



Frank Dennemann [8] tarafından açıklandığı gibi, 1970'lerin başında, birden fazla eşzamanlı kullanıcı işlemine ve aşırı veri üretimine hizmet edebilecek sistemlere duyulan ihtiyaç, ilişkisel veritabanı sistemlerinin tanıtılmasıyla ana akım haline geldi. Etkileyici tek işlemcili performans oranına rağmen, çok işlemcili sistemler bu iş yükünün üstesinden gelmek için daha donanımlıydı. Uygun maliyetli bir sistem sağlamak için, paylaşılan bellek adres alanı araştırmanın odak noktası haline geldi. Önceleri, bir çapraz çubuk anahtarı kullanan sistemler savunuldu, ancak bu tasarım karmaşıklığı, işlemcilerin artmasıyla birlikte ölçeklendi ve bu da veri yolu tabanlı sistemi daha çekici hale getirdi. Bir veri yolu sistemindeki işlemciler, veri yolunda istekler göndererek tüm bellek alanına erişebilir; bu, mevcut belleği mümkün olduğunca optimum şekilde kullanmanın çok uygun maliyetli bir yoludur.

Bununla birlikte, veri yolu tabanlı bilgisayar sistemleri, ölçeklenebilirlik sorunlarına yol açan sınırlı bant genişliği miktarı olan bir darboğazla birlikte gelir. Sisteme ne kadar fazla CPU eklenirse, kullanılabilir düğüm başına bant genişliği o kadar az olur. Ayrıca, ne kadar çok CPU eklenirse, veri yolu o kadar uzun olur ve sonuç olarak gecikme süresi de o kadar yüksek olur.

Çoğu CPU iki boyutlu bir düzlemde inşa edilmiştir. CPU'lara ayrıca entegre bellek denetleyicilerinin eklenmesi gerekiyordu. Her CPU çekirdeğine dört bellek veriyoluna (üst, alt, sol, sağ) sahip olmanın basit çözümü, tam kullanılabilir bant genişliğine izin verdi, ancak bu yalnızca şu ana kadar gider. CPU'lar önemli bir süre dört çekirdekle durdu. Çipler 3B hale geldikçe, yukarı ve aşağı izlerin eklenmesi, çapraz olarak zıt CPU'lara doğrudan veri yollarına izin verdi. Bir sonraki mantıklı adım, dört çekirdekli bir CPU'yu bir karta yerleştirip daha sonra bir veriyoluna bağlamaktı.

Bugün, her işlemci, paylaşılan bir çip üstü önbelleğe ve bir çip dışı belleğe sahip birçok çekirdek içerir ve bir sunucudaki belleğin farklı bölümlerinde değişken bellek erişim maliyetlerine sahiptir.

Veri erişiminin verimliliğini artırmak, çağdaş CPU tasarımının ana hedeflerinden biridir. Her CPU çekirdeğine küçük bir seviye bir önbellek (32 KB) ve daha büyük bir (256 KB) seviye 2 önbellek verildi. Çeşitli çekirdekler daha sonra boyutu zamanla önemli ölçüde büyüyen birkaç MB'lik bir seviye 3 önbelleğini paylaşacaktı.

Önbellek kayıplarını önlemek için - önbellekte olmayan verileri istemek - doğru sayıda CPU önbelleği, önbellek yapıları ve ilgili algoritmaları bulmak için çok fazla araştırma zamanı harcanır. Önbelleğe alma gözetleme [4] ve önbellek tutarlılığı [3,5] protokolünün daha ayrıntılı açıklaması ve NUMA'nın arkasındaki tasarım fikirleri için [8]'e bakın.

NUMA için Yazılım Desteği

NUMA mimarisini destekleyen bir sistemin performansını artırabilecek iki yazılım optimizasyon önlemi vardır: işlemci yakınlığı ve veri yerleştirme. [19]'da açıklandığı gibi, işlemci benzeşimi […], bir işlemin veya iş parçacığının tek bir CPU'ya veya bir dizi CPU'ya bağlanmasını ve çözülmesini sağlar, böylece işlem veya iş parçacığı, işlem veya iş parçacığı yerine yalnızca belirlenmiş CPU veya CPU'larda yürütülür. herhangi bir CPU. Veri yerleştirme terimi, kod ve verilerin bellekte mümkün olduğunca yakın tutulduğu yazılım değişikliklerini ifade eder.

UNIX ve UNIX ile ilgili farklı işletim sistemleri, NUMA'yı aşağıdaki şekillerde destekler (aşağıdaki liste [14]'ten alınmıştır):

  • Origin sunucu serisi ile 1240 CPU üzerinden ccNUMA mimarisi için Silicon Graphics IRIX desteği.
  • Microsoft Windows 7 ve Windows Server 2008 R2, 64 mantıksal çekirdek üzerinden NUMA mimarisi için destek ekledi.
  • Linux çekirdeğinin 2.5 sürümü, daha sonraki çekirdek sürümlerinde daha da geliştirilmiş olan temel NUMA desteğini içeriyordu. Linux çekirdeğinin 3.8 sürümü, sonraki çekirdek sürümlerinde daha verimli NUMA politikalarının geliştirilmesine olanak tanıyan yeni bir NUMA temeli getirdi [13]. Linux çekirdeğinin 3.13 sürümü, süreçler arasında paylaşılan bellek sayfalarına sahip olmak veya şeffaf büyük sayfaların kullanımı gibi durumların ele alınmasıyla birlikte, bir işlemi belleğine yakınlaştırmayı amaçlayan çok sayıda ilke getirdi; yeni sistem kontrol ayarları, NUMA dengelemenin etkinleştirilmesine veya devre dışı bırakılmasına ve ayrıca çeşitli NUMA bellek dengeleme parametrelerinin yapılandırılmasına izin verir [15].
  • Mantıksal grupların tanıtımıyla hem Oracle hem de OpenSolaris modeli NUMA mimarisi.
  • FreeBSD, 11.0 sürümünde İlk NUMA benzeşimi ve ilke yapılandırmasını ekledi.

Computer Science and Technology, Proceedings of the International Conference (CST2016) kitabında Ning Cai, NUMA mimarisi çalışmasının temel olarak üst düzey bilgi işlem ortamına ve performansı optimize eden önerilen NUMA uyumlu Radix Partitioning'e (NaRP) odaklandığını öne sürüyor. iş zekası uygulamalarını hızlandırmak için NUMA düğümlerinde paylaşılan önbellek sayısı. Bu nedenle NUMA, birkaç işlemcili paylaşılan bellek (SMP) sistemleri arasında bir orta yolu temsil eder [6].

NUMA ve Linux

Yukarıda belirtildiği gibi, Linux çekirdeği 2.5 sürümünden beri NUMA'yı desteklemektedir. Hem Debian GNU/Linux hem de Ubuntu, iki yazılım paketi numactl [16] ve numad [17] ile süreç optimizasyonu için NUMA desteği sunar. Numactl komutu yardımıyla sisteminizde bulunan mevcut NUMA düğümlerinin envanterini listeleyebilirsiniz [18]:

# numactl --donanım
mevcut:2düğümler(0-1)
düğüm0işlemci:0 1 2 3 4 5 6 7 16 17 18 19 yirmi yirmi bir 22 2. 3
düğüm0boy:8157MB
düğüm0Bedava:88MB
düğüm1işlemci:8 9 10 on bir 12 13 14 on beş 24 25 26 27 28 29 30 31
düğüm1boy:8191MB
düğüm1Bedava:5176MB
düğüm mesafeleri:
düğüm0 1
0:10 yirmi
1:yirmi 10

NumaTop, Intel tarafından çalışma zamanı bellek konumunu izlemek ve NUMA sistemlerindeki süreçleri analiz etmek için geliştirilmiş kullanışlı bir araçtır [10,11]. Araç, NUMA ile ilgili potansiyel performans darboğazlarını belirleyebilir ve dolayısıyla bir NUMA sisteminin potansiyelini en üst düzeye çıkarmak için bellek/CPU tahsislerini yeniden dengelemeye yardımcı olabilir. Daha ayrıntılı bir açıklama için [9]'a bakın.

Kullanım Senaryoları

NUMA teknolojisini destekleyen bilgisayarlar, tüm CPU'ların tüm belleğe doğrudan erişmesine izin verir - CPU'lar bunu tek, doğrusal bir adres alanı olarak görür. Bu, 64-bit adresleme şemasının daha verimli kullanımına yol açarak verilerin daha hızlı hareket etmesine, verilerin daha az kopyalanmasına ve daha kolay programlamaya neden olur.

NUMA sistemleri, veri madenciliği ve karar destek sistemleri gibi sunucu taraflı uygulamalar için oldukça çekicidir. Ayrıca oyun ve yüksek performanslı yazılımlar için uygulama yazmak bu mimari ile çok daha kolay hale geliyor.

Çözüm

Sonuç olarak, NUMA mimarisi, ana faydalarından biri olan ölçeklenebilirliği ele alıyor. Bir NUMA CPU'sunda, bir düğüm, aynı düğümdeki belleğe erişmek için daha yüksek bir bant genişliğine veya daha düşük gecikme süresine sahip olacaktır (örneğin, yerel CPU, uzaktan erişimle aynı anda bellek erişimi ister; öncelik yerel CPU'dadır). Bu, veriler belirli işlemlere (ve dolayısıyla işlemcilere) yerelleştirilirse, bellek verimini önemli ölçüde artıracaktır. Dezavantajları, verileri bir işlemciden diğerine taşımanın daha yüksek maliyetleridir. Bu durum çok sık olmadığı sürece, bir NUMA sistemi daha geleneksel bir mimariye sahip sistemlerden daha iyi performans gösterecektir.

Bağlantılar ve Referanslar

  1. NVIDIA Tesla ile Radeon Instinct'i karşılaştırın, https://www.itcentralstation.com/products/comparisons/nvidia-tesla_vs_radeon-instinct
  2. NVIDIA DGX-1 ile Radeon Instinct'i karşılaştırın, https://www.itcentralstation.com/products/comparisons/nvidia-dgx-1_vs_radeon-instinct
  3. Önbellek tutarlılığı, Wikipedia, https://en.wikipedia.org/wiki/Cache_coherence
  4. Otobüs gözetleme, Wikipedia, https://en.wikipedia.org/wiki/Bus_snooping
  5. Çok işlemcili sistemlerde önbellek tutarlılık protokolleri, Geeks for Geeks, https://www.geeksforgeeks.org/cache-coherence-protocols-in-multiprocessor-system /
  6. Bilgisayar bilimi ve teknolojisi – Uluslararası Konferans Bildirileri (CST2016), Ning Cai (Ed.), World Scientific Publishing Co Pte Ltd, ISBN: 9789813146419
  7. Daniel P. Bovet ve Marco Cesati: Anlama NUMA mimarisini anlama in the Linux Kernel, 3. baskı, O'Reilly, https://www.oreilly.com/library/view/understanding-the-linux/0596005652/
  8. Frank Dennemann: NUMA Derin Dalış Bölüm 1: UMA'dan NUMA'ya, https://frankdenneman.nl/2016/07/07/numa-deep-dive-part-1-uma-numa/
  9. Colin Ian King: NumaTop: Bir NUMA sistem izleme aracı, http://smackerelofopinion.blogspot.com/2015/09/numatop-numa-system-monitoring-tool.html
  10. Numatop, https://github.com/intel/numatop
  11. Debian GNU / Linux için paket numatop, https://packages.debian.org/buster/numatop
  12. Jonathan Kehayias: Tekdüzen Olmayan Bellek Erişimini/Mimarilerini Anlamak (NUMA), https://www.sqlskills.com/blogs/jonathan/understanding-non-uniform-memory-accessarchitectures-numa/
  13. Çekirdek 3.8 için Linux Çekirdeği Haberleri, https://kernelnewbies.org/Linux_3.8
  14. Tek tip olmayan bellek erişimi (NUMA), Wikipedia, https://en.wikipedia.org/wiki/Non-uniform_memory_access
  15. Linux Bellek Yönetimi Belgeleri, NUMA, https://www.kernel.org/doc/html/latest/vm/numa.html
  16. Debian GNU/Linux için paket numarası, https://packages.debian.org/sid/admin/numactl
  17. Debian GNU/Linux için paket numarası, https://packages.debian.org/buster/numad
  18. NUMA yapılandırmasının etkin mi yoksa devre dışı mı olduğunu nasıl bulabilirim?, https://www.thegeekdiary.com/centos-rhel-how-to-find-if-numa-configuration-is-enabled-or-disabled/
  19. İşlemci yakınlığı, Wikipedia, https://en.wikipedia.org/wiki/Processor_affinity

Teşekkürler

Yazarlar, bu makaleyi hazırlarken verdiği destek için Gerold Rupprecht'e teşekkür eder.

Yazarlar Hakkında

Plaxedes Nehanda, Johannesburg, Güney Afrika'da yaşayan, aralarında etkinlik planlayıcısı, sanal asistan, transkripsiyoncu ve hevesli bir araştırmacının da bulunduğu pek çok şapka takan, çok yetenekli, kendi kendini yöneten çok yönlü bir kişidir.

Prince K. Nehanda, Zimbabwe, Harare'deki Paeflow Metering'de Enstrümantasyon ve Kontrol (Metroloji) Mühendisidir.

Frank Hofmann yolda – tercihen Berlin (Almanya), Cenevre (İsviçre) ve Cape Town'dan (Güney Afrika) – Linux-User ve Linux Magazine gibi dergiler için geliştirici, eğitmen ve yazar olarak çalışıyor. Aynı zamanda Debian paket yönetimi kitabının ortak yazarıdır ( http://www.dpmb.org ).