NUMA

Memahami Arsitektur NUMA

Memahami Arsitektur NUMA
Merancang komputer selalu merupakan kompromi. Empat komponen dasar komputer - unit pemrosesan pusat (CPU) atau prosesor, memori, penyimpanan, dan papan untuk menghubungkan komponen (sistem bus I/O) - digabungkan secerdas mungkin untuk membuat mesin yang hemat biaya dan kuat. Proses desain sebagian besar melibatkan optimasi terhadap prosesor (co-prosesor, pengaturan multi-core), jenis dan jumlah memori, penyimpanan (disk, sistem file), serta harga.Gagasan di balik co-prosesor dan arsitektur multi-inti adalah untuk mendistribusikan operasi ke sebanyak mungkin unit komputasi tunggal dalam ruang sekecil mungkin dan membuat eksekusi paralel instruksi komputasi lebih tersedia dan terjangkau. Dalam hal memori, ini adalah pertanyaan tentang jumlah atau ukuran yang dapat ditangani oleh unit komputasi individu, dan jenis memori mana yang bekerja dengan latensi serendah mungkin. Penyimpanan milik memori eksternal, dan kinerjanya tergantung pada jenis disk, sistem file yang digunakan, threading, protokol transfer, kain komunikasi, dan jumlah perangkat memori yang terpasang.

Desain bus I/O mewakili arteri komputer dan secara signifikan menentukan seberapa banyak dan seberapa cepat data dapat dipertukarkan antara komponen tunggal yang tercantum di atas. Kategori teratas dipimpin oleh komponen yang digunakan di bidang High Performance Computing (HPC). Pada pertengahan 2020, di antara perwakilan kontemporer HPC adalah Nvidia Tesla dan DGX, Radeon Instinct, dan produk akselerator berbasis GPU Intel Xeon Phi (lihat [1,2] untuk perbandingan produk).

Memahami NUMA

Non-Uniform Memory Access (NUMA) menggambarkan arsitektur memori bersama yang digunakan dalam sistem multiprosesor kontemporer. NUMA adalah sistem komputasi yang terdiri dari beberapa node tunggal sedemikian rupa sehingga memori agregat dibagi antara semua node: “setiap CPU diberikan memori lokalnya sendiri dan dapat mengakses memori dari CPU lain dalam sistem” [12,7].

NUMA adalah sistem pintar yang digunakan untuk menghubungkan beberapa unit pemrosesan pusat (CPU) ke sejumlah memori komputer yang tersedia di komputer. Node NUMA tunggal terhubung melalui jaringan yang dapat diskalakan (bus I/O) sedemikian rupa sehingga CPU dapat secara sistematis mengakses memori yang terkait dengan node NUMA lainnya.

Memori lokal adalah memori yang digunakan CPU dalam node NUMA tertentu. Memori asing atau jarak jauh adalah memori yang diambil CPU dari node NUMA lain. Istilah rasio NUMA menggambarkan rasio biaya mengakses memori asing dengan biaya mengakses memori lokal. Semakin besar rasionya, semakin besar biayanya, dan dengan demikian semakin lama waktu yang dibutuhkan untuk mengakses memori.

Namun, dibutuhkan lebih lama daripada saat CPU itu mengakses memori lokalnya sendiri. Akses memori lokal adalah keuntungan utama, karena menggabungkan latensi rendah dengan bandwidth tinggi. Sebaliknya, mengakses memori milik CPU lain memiliki latensi yang lebih tinggi dan kinerja bandwidth yang lebih rendah.

Melihat ke Belakang: Evolusi Multiprosesor Memori Bersama

Frank Dennemann [8] menyatakan bahwa arsitektur sistem modern tidak mengizinkan Uniform Memory Access (UMA) yang sebenarnya, meskipun sistem ini dirancang khusus untuk tujuan itu. Secara sederhana, ide komputasi paralel adalah memiliki sekelompok prosesor yang bekerja sama untuk menghitung tugas yang diberikan, sehingga mempercepat komputasi sekuensial klasik.

Seperti yang dijelaskan oleh Frank Dennemann [8], pada awal 1970-an, "kebutuhan akan sistem yang dapat melayani beberapa operasi pengguna secara bersamaan dan pembuatan data yang berlebihan menjadi arus utama" dengan diperkenalkannya sistem basis data relasional. “Meskipun tingkat kinerja uniprosesor yang mengesankan, sistem multiprosesor lebih siap untuk menangani beban kerja ini. Untuk menyediakan sistem yang hemat biaya, ruang alamat memori bersama menjadi fokus penelitian. Awalnya, sistem yang menggunakan sakelar palang dianjurkan, namun dengan kompleksitas desain ini ditingkatkan seiring dengan peningkatan prosesor, yang membuat sistem berbasis bus lebih menarik. Prosesor dalam sistem bus [dapat] mengakses seluruh ruang memori dengan mengirimkan permintaan pada bus, cara yang sangat hemat biaya untuk menggunakan memori yang tersedia seoptimal mungkin.”

Namun, sistem komputer berbasis bus datang dengan hambatan - terbatasnya jumlah bandwidth yang menyebabkan masalah skalabilitas. Semakin banyak CPU yang ditambahkan ke sistem, semakin sedikit bandwidth per node yang tersedia. Selanjutnya, semakin banyak CPU yang ditambahkan, semakin lama bus, dan semakin tinggi latensi sebagai hasilnya.

Sebagian besar CPU dibangun dalam bidang dua dimensi. CPU juga harus memiliki pengontrol memori terintegrasi yang ditambahkan. Solusi sederhana memiliki empat bus memori (atas, bawah, kiri, kanan) ke setiap inti CPU memungkinkan bandwidth yang tersedia penuh, tetapi itu hanya sejauh ini. CPU mengalami stagnasi dengan empat inti untuk waktu yang cukup lama. Menambahkan jejak di atas dan di bawah memungkinkan bus langsung menyeberang ke CPU yang berlawanan secara diagonal saat chip menjadi 3D. Menempatkan CPU empat inti pada kartu, yang kemudian dihubungkan ke bus, adalah langkah logis berikutnya.

Saat ini, setiap prosesor berisi banyak inti dengan cache on-chip bersama dan memori off-chip dan memiliki biaya akses memori variabel di berbagai bagian memori dalam server.

Meningkatkan efisiensi akses data adalah salah satu tujuan utama desain CPU kontemporer. Setiap inti CPU diberkahi dengan cache level satu kecil (32 KB) dan cache level 2 yang lebih besar (256 KB). Berbagai inti nantinya akan berbagi cache level 3 beberapa MB, yang ukurannya telah berkembang pesat seiring waktu.

Untuk menghindari kesalahan cache - meminta data yang tidak ada dalam cache - banyak waktu penelitian dihabiskan untuk menemukan jumlah cache CPU yang tepat, struktur caching, dan algoritme terkait. Lihat [8] untuk penjelasan lebih rinci tentang protokol untuk caching snoop [4] dan koherensi cache [3,5], serta ide desain di balik NUMA.

Dukungan Perangkat Lunak untuk NUMA

Ada dua langkah pengoptimalan perangkat lunak yang dapat meningkatkan kinerja sistem yang mendukung arsitektur NUMA - afinitas prosesor dan penempatan data. Seperti yang dijelaskan dalam [19], “afinitas prosesor [… ] memungkinkan pengikatan dan pelepasan proses atau utas ke CPU tunggal, atau rentang CPU sehingga proses atau utas hanya akan dijalankan pada CPU atau CPU yang ditunjuk. daripada CPU mana pun.Istilah "penempatan data" mengacu pada modifikasi perangkat lunak di mana kode dan data disimpan sedekat mungkin dalam memori.

Sistem operasi terkait UNIX dan UNIX yang berbeda mendukung NUMA dengan cara berikut (daftar di bawah ini diambil dari [14]):

Dalam buku "Ilmu Komputer dan Teknologi, Prosiding Konferensi Internasional (CST2016)" Ning Cai menyarankan bahwa studi arsitektur NUMA terutama difokuskan pada lingkungan komputasi kelas atas dan mengusulkan NUMA-aware Radix Partitioning (NaRP), yang mengoptimalkan kinerja cache bersama di NUMA node untuk mempercepat aplikasi intelijen bisnis. Dengan demikian, NUMA mewakili jalan tengah antara sistem shared memory (SMP) dengan beberapa prosesor [6].

NUMA dan Linux

Seperti yang dinyatakan di atas, kernel Linux telah mendukung NUMA sejak versi 2.5. Baik Debian GNU/Linux dan Ubuntu menawarkan dukungan NUMA untuk optimasi proses dengan dua paket perangkat lunak numactl [16] dan numad [17]. Dengan bantuan perintah numactl, Anda dapat membuat daftar inventaris node NUMA yang tersedia di sistem Anda [18]:

# numactl --perangkat keras
tersedia: 2 node (0-1)
simpul 0 cpus: 0 1 2 3 4 5 6 7 16 17 18 19 20 21 22 23
simpul 0 ukuran: 8157 MB
simpul 0 gratis: 88 MB
node 1 cpus: 8 9 10 11 12 13 14 15 24 25 26 27 28 29 30 31
ukuran simpul 1: 8191 MB
simpul 1 gratis: 5176 MB
jarak simpul:
simpul 0 1
0: 10 20
1: 20 10

NumaTop adalah alat yang berguna yang dikembangkan oleh Intel untuk memantau lokalitas memori runtime dan menganalisis proses dalam sistem NUMA [10,11]. Alat ini dapat mengidentifikasi potensi kemacetan kinerja terkait NUMA dan karenanya membantu menyeimbangkan kembali alokasi memori/CPU untuk memaksimalkan potensi sistem NUMA. Lihat [9] untuk deskripsi yang lebih detail.

Skenario Penggunaan

Komputer yang mendukung teknologi NUMA memungkinkan semua CPU mengakses seluruh memori secara langsung - CPU melihat ini sebagai satu ruang alamat linier. Ini mengarah pada penggunaan skema pengalamatan 64-bit yang lebih efisien, menghasilkan pergerakan data yang lebih cepat, replikasi data yang lebih sedikit, dan pemrograman yang lebih mudah.

Sistem NUMA cukup menarik untuk aplikasi sisi server, seperti penambangan data dan sistem pendukung keputusan. Selain itu, menulis aplikasi untuk game dan perangkat lunak berperforma tinggi menjadi lebih mudah dengan arsitektur ini.

Kesimpulan

Kesimpulannya, arsitektur NUMA membahas skalabilitas, yang merupakan salah satu manfaat utamanya. Dalam CPU NUMA, satu node akan memiliki bandwidth yang lebih tinggi atau latency yang lebih rendah untuk mengakses memori pada node yang sama (mis.g., CPU lokal meminta akses memori pada saat yang sama dengan akses jarak jauh; prioritas ada pada CPU lokal). Ini akan secara dramatis meningkatkan throughput memori jika data dilokalkan ke proses tertentu (dan dengan demikian prosesor). Kerugiannya adalah biaya yang lebih tinggi untuk memindahkan data dari satu prosesor ke prosesor lainnya. Selama kasus ini tidak terlalu sering terjadi, sistem NUMA akan mengungguli sistem dengan arsitektur yang lebih tradisional.

Tautan dan Referensi

  1. Bandingkan NVIDIA Tesla vs. Radeon Instinct, https://www.itcentralstation.com/products/comparisons/nvidia-tesla_vs_radeon-instinct
  2. Bandingkan NVIDIA DGX-1 vs. Radeon Instinct, https://www.itcentralstation.com/products/comparisons/nvidia-dgx-1_vs_radeon-instinct
  3. Koherensi cache, Wikipedia, https://en.wikipedia.org/wiki/Cache_coherence
  4. Pengintaian bus, Wikipedia, https://en.wikipedia.org/wiki/Bus_snooping
  5. Protokol koherensi cache dalam sistem multiprosesor, Geeks untuk Geeks, https://www.geeksforgeeks.org/cache-coherence-protocols-in-multiprocessor-system/
  6. Ilmu dan teknologi komputer - Prosiding Konferensi Internasional (CST2016), Ning Cai (Ed.), World Scientific Publishing Co Pte Ltd, ISBN: 9789813146419
  7. Daniel P. Bovet dan Marco Cesati: Memahami arsitektur NUMA dalam Memahami Kernel Linux, edisi ke-3, O'Reilly, https://www.oreilly.com/library/view/understanding-the-linux/0596005652/
  8. Frank Dennemann: NUMA Deep Dive Bagian 1: Dari UMA ke NUMA, https://frankdenneman.nl/2016/07/07/numa-deep-dive-part-1-uma-numa/
  9. Colin Ian King: NumaTop: Alat pemantauan sistem NUMA, http://smackerelofpinion.blogspot.com/2015/09/numatop-numa-system-monitoring-tool.html
  10. Numatop, https://github.com/intel/numatop
  11. Paket numatop untuk Debian GNU/Linux, https://packages.debian.org/buster/numatop
  12. Jonathan Kehayias: Memahami Akses/Arsitektur Memori Non-Seragam (NUMA), https://www.sqlskills.com/blogs/jonathan/understanding-non-uniform-memory-accessarchitectures-numa/
  13. Berita Kernel Linux untuk Kernel 3.8, https://kernelnewbies.org/Linux_3.8
  14. Akses memori tidak seragam (NUMA), Wikipedia, https://en.wikipedia.org/wiki/Non-uniform_memory_access
  15. Dokumentasi Manajemen Memori Linux, NUMA, https://www.inti.org/doc/html/latest/vm/numa.html
  16. Paket numactl untuk Debian GNU/Linux, https://packages.debian.org/sid/admin/numactl
  17. Paket numad untuk Debian GNU/Linux, https://packages.debian.org/buster/numad
  18. Cara mengetahui apakah konfigurasi NUMA diaktifkan atau dinonaktifkan?, https://www.buku harian.com/centos-rhel-how-to-find-if-numa-configuration-is-enabled-or-disabled/
  19. Afinitas prosesor, Wikipedia, https://en.wikipedia.org/wiki/Processor_affinity

Terima kasih

Penulis ingin mengucapkan terima kasih kepada Gerold Rupprecht atas dukungannya saat menyiapkan artikel ini.

Tentang Penulis

Plaxedes Nehanda adalah orang multiskilled, self-driven serbaguna yang memakai banyak topi, di antaranya, perencana acara, asisten virtual, transcriber, serta peneliti avid, yang berbasis di Johannesburg, Afrika Selatan.

Pangeran K. Nehanda adalah Insinyur Instrumentasi dan Kontrol (Metrologi) di Paeflow Metering di Harare, Zimbabwe.

Frank Hofmann bekerja di jalan - lebih disukai dari Berlin (Jerman), Jenewa (Swiss), dan Cape Town (Afrika Selatan) - sebagai pengembang, pelatih, dan penulis untuk majalah seperti Pengguna Linux dan Majalah Linux. Dia juga co-penulis buku manajemen paket Debian (http://www.dpmb.organisasi).

Instal Dolphin Emulator terbaru untuk Gamecube & Wii di Linux
Dolphin Emulator memungkinkan Anda memainkan game Gamecube & Wii pilihan Anda di Komputer Pribadi (PC) Linux. Menjadi emulator game sumber terbuka da...
Cara Menggunakan Cheat Engine GameConqueror di Linux
Artikel ini mencakup panduan tentang menggunakan mesin cheat GameConqueror di Linux. Banyak pengguna yang bermain game di Windows sering menggunakan a...
Emulator Konsol Game Terbaik untuk Linux
Artikel ini akan mencantumkan perangkat lunak emulasi konsol game populer yang tersedia untuk Linux. Emulasi adalah lapisan kompatibilitas perangkat l...