NUMA

NUMA Mimarisini Anlamak

NUMA Mimarisini Anlamak
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 kullanılan 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ü. Tasarım süreci çoğunlukla işlemcilere (ortak 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 bilgi işlem birimine dağıtmak ve hesaplama talimatlarının paralel yürütülmesini daha kullanılabilir ve uygun maliyetli hale getirmektir. 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 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üzen 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şmek 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 özellikle bu amaç için tasarlanmış olsalar bile, gerçekten Tekdüzen Bellek Erişimine (UMA) izin vermediğini belirtir. 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 bir sıralı hesaplamayı hızlandırdı.

Frank Dennemann [8] tarafından açıklandığı gibi, 1970'lerin başında, ilişkisel veritabanı sistemlerinin tanıtılmasıyla birlikte, "birden fazla eşzamanlı kullanıcı işlemine ve aşırı veri üretimine hizmet edebilecek sistemlere duyulan ihtiyaç ana akım haline geldi". “Tek işlemcili performansın etkileyici hızı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ırmaları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 istek 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 bir darboğazla gelir - ölçeklenebilirlik sorunlarına yol açan sınırlı bant genişliği miktarı. Sisteme ne kadar fazla CPU eklenirse, kullanılabilir düğüm başına bant genişliği o kadar az olur. Ayrıca, ne kadar fazla CPU eklenirse, veri yolu o kadar uzun olur ve sonuç olarak gecikme süresi o kadar yüksek olur.

Çoğu CPU iki boyutlu bir düzlemde inşa edildi. 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 gidiyor. CPU'lar önemli bir süre dört çekirdekle durdu. Çipler 3D hale geldikçe, çapraz olarak zıt CPU'lar arasında doğrudan veri yollarına izin veren yukarı ve aşağı izler eklemek. Dört çekirdekli bir CPU'yu bir karta yerleştirmek ve daha sonra bir veri yoluna bağlanmak bir sonraki mantıklı adımdı.

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 sunucu içindeki 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 1 önbellek (32 KB) ve daha büyük (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ığı yalnızca belirlenmiş CPU veya CPU'larda yürütülür herhangi bir CPU'dan daha."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):

“Bilgisayar Bilimi ve Teknolojisi, Uluslararası Konferansın Bildirileri (CST2016)” kitabında Ning Cai, NUMA mimarisinin çalışmasının temel olarak üst düzey bilgi işlem ortamına odaklandığını ve optimize eden NUMA uyumlu Radix Bölümleme (NaRP) önerdiğini öne sürüyor. iş zekası uygulamalarını hızlandırmak için NUMA düğümlerinde paylaşılan önbelleklerin performansı. 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 sürüm 2'den beri NUMA'yı desteklemektedir.5. 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: 2 düğüm (0-1)
düğüm 0 işlemci: 0 1 2 3 4 5 6 7 16 17 18 19 20 21 22 23
düğüm 0 boyutu: 8157 MB
düğüm 0 ücretsiz: 88 MB
düğüm 1 işlemci: 8 9 10 11 12 13 14 15 24 25 26 27 28 29 30 31
düğüm 1 boyutu: 8191 MB
düğüm 1 ücretsiz: 5176 MB
düğüm mesafeleri:
düğüm 0 1
0: 10 20
1: 20 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 böylece 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ılmasına, verilerin daha hızlı taşınmasına, verilerin daha az kopyalanmasına ve daha kolay programlamaya yol açar.

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

Sonuç

Sonuç olarak, NUMA mimarisi, ana faydalarından biri olan ölçeklenebilirliği ele alıyor. Bir NUMA CPU'da, bir düğüm, aynı düğümdeki belleğe erişmek için daha yüksek bir bant genişliğine veya daha düşük gecikmeye sahip olacaktır (e.g., yerel CPU, uzaktan erişimle aynı anda bellek erişimi talep eder; ö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 mimariye sahip sistemlerden daha iyi performans gösterecektir.

Bağlantılar ve Referanslar

  1. NVIDIA Tesla ile karşılaştırın. Radeon İçgüdüsü, https://www.itcentralstation.com/products/comparisons/nvidia-tesla_vs_radeon-instinct
  2. NVIDIA DGX-1 ile NVIDIA DGX-1'i karşılaştırın. Radeon İçgüdüsü, 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.kötü.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-dalış-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.sqlskill'ler.com/blogs/jonathan/anlama-üniform olmayan-memory-accessarchitectures-numa/
  13. Çekirdek 3 için Linux Çekirdeği Haberleri.8, https://kernelnewbies.kuruluş/Linux_3.8
  14. Tek tip olmayan bellek erişimi (NUMA), Wikipedia, https://en.wikipedia.org/wiki/Uniform_memory_access
  15. Linux Bellek Yönetimi Belgeleri, NUMA, https://www.çekirdek.org/doc/html/en son/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ğu nasıl bulunur??, https://www.geek günlüğü.com/centos-rhel-nasıl-bulmak-if-numa-configuration-is-etkin-veya-devre dışı/
  19. İşlemci yakınlığı, Wikipedia, https://en.wikipedia.org/wiki/İşlemci_affinity

Teşekkür ederim

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.

Prens 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) - geliştirici, eğitmen ve Linux-User ve Linux Magazine gibi dergiler için yazar olarak çalışıyor. Aynı zamanda Debian paket yönetimi kitabının ortak yazarıdır (http://www.dpmb.kuruluş).

Open Source Ports of Commercial Game Engines
Free, open source and cross-platform game engine recreations can be used to play old as well as some of the fairly recent game titles. This article wi...
Linux için En İyi Komut Satırı Oyunları
Komut satırı, Linux kullanırken yalnızca en büyük müttefikiniz değil, aynı zamanda eğlence kaynağı da olabilir, çünkü onu özel bir grafik kartı gerekt...
Linux için En İyi Gamepad Eşleme Uygulamaları
Tipik bir klavye ve fare giriş sistemi yerine bir gamepad ile Linux'ta oyun oynamayı seviyorsanız, sizin için bazı faydalı uygulamalar var. Çoğu PC oy...