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ımmevcut: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
- NVIDIA Tesla ile Radeon Instinct'i karşılaştırın, https://www.itcentralstation.com/products/comparisons/nvidia-tesla_vs_radeon-instinct
- NVIDIA DGX-1 ile Radeon Instinct'i karşılaştırın, https://www.itcentralstation.com/products/comparisons/nvidia-dgx-1_vs_radeon-instinct
- Önbellek tutarlılığı, Wikipedia, https://en.wikipedia.org/wiki/Cache_coherence
- Otobüs gözetleme, Wikipedia, https://en.wikipedia.org/wiki/Bus_snooping
- Çok işlemcili sistemlerde önbellek tutarlılık protokolleri, Geeks for Geeks, https://www.geeksforgeeks.org/cache-coherence-protocols-in-multiprocessor-system /
- Bilgisayar bilimi ve teknolojisi – Uluslararası Konferans Bildirileri (CST2016), Ning Cai (Ed.), World Scientific Publishing Co Pte Ltd, ISBN: 9789813146419
- 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/
- 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/
- Colin Ian King: NumaTop: Bir NUMA sistem izleme aracı, http://smackerelofopinion.blogspot.com/2015/09/numatop-numa-system-monitoring-tool.html
- Numatop, https://github.com/intel/numatop
- Debian GNU / Linux için paket numatop, https://packages.debian.org/buster/numatop
- Jonathan Kehayias: Tekdüzen Olmayan Bellek Erişimini/Mimarilerini Anlamak (NUMA), https://www.sqlskills.com/blogs/jonathan/understanding-non-uniform-memory-accessarchitectures-numa/
- Çekirdek 3.8 için Linux Çekirdeği Haberleri, https://kernelnewbies.org/Linux_3.8
- Tek tip olmayan bellek erişimi (NUMA), Wikipedia, https://en.wikipedia.org/wiki/Non-uniform_memory_access
- Linux Bellek Yönetimi Belgeleri, NUMA, https://www.kernel.org/doc/html/latest/vm/numa.html
- Debian GNU/Linux için paket numarası, https://packages.debian.org/sid/admin/numactl
- Debian GNU/Linux için paket numarası, https://packages.debian.org/buster/numad
- 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/
- İş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 ).