Pag-unawa sa NUMA Arkitektura

Understanding Numa Architecture



Ang pagdidisenyo ng mga computer ay palaging isang kompromiso. Ang apat na pangunahing mga bahagi ng isang computer - ang sentral na yunit ng pagproseso (CPU) o processor, ang memorya, ang imbakan, at ang board para sa pagkonekta ng mga bahagi (I / O bus system) - ay pinagsama bilang matalino hangga't maaari upang lumikha ng isang makina na ay parehong cost-effective at malakas. Ang proseso ng disenyo ay kadalasang nagsasangkot ng isang pag-optimize patungo sa mga processor (co-processors, multi-core setup), uri ng memorya at halaga, imbakan (mga disk, file system), pati na rin ang presyo. Ang ideya sa likod ng mga co-processor at multi-core na arkitektura ay upang ipamahagi ang mga pagpapatakbo sa maraming solong mga yunit ng computing sa pinakamaliit na puwang posible at upang gawing mas magagamit at abot-kayang ang parallel na pagpapatupad ng mga tagubilin sa computing. Sa mga tuntunin ng memorya, ito ay isang katanungan ng halaga o laki na maaaring matugunan ng indibidwal na unit ng computing, at kung aling uri ng memorya ang gumagana na may pinakamababang latency na posible. Ang pag-iimbak ay kabilang sa panlabas na memorya, at ang pagganap nito ay nakasalalay sa uri ng disk, ang file system na ginagamit, pag-thread, transfer protocol, tela ng komunikasyon, at ang bilang ng mga nakakabit na memory device.

Ang disenyo ng mga bus na I / O ay kumakatawan sa mga ugat ng computer at makabuluhang tumutukoy kung magkano at kung gaano kabilis maaaring mapalitan ang data sa pagitan ng mga solong sangkap na nakalista sa itaas. Ang nangungunang kategorya ay pinangunahan ng mga sangkap na ginamit sa larangan ng High Performance Computing (HPC). Hanggang kalagitnaan ng 2020, kabilang sa mga napapanahong kinatawan ng HPC ay ang Nvidia Tesla at DGX, Radeon Instinct, at mga produkto ng akselerong nakabase sa Intel Xeon Phi GPU (tingnan ang [1,2] para sa mga paghahambing ng produkto).







Pag-unawa sa NUMA

Inilalarawan ng Non-Uniform Memory Access (NUMA) ang isang nakabahaging arkitektura ng memorya na ginamit sa mga napapanahong multiprocessing system. Ang NUMA ay isang sistema ng computing na binubuo ng maraming solong mga node sa paraang ibinabahagi ang pinagsamang memorya sa pagitan ng lahat ng mga node: bawat CPU ay nakatalaga sa sarili nitong lokal na memorya at maaaring ma-access ang memorya mula sa iba pang mga CPU sa system [12,7].



Ang NUMA ay isang matalinong sistema na ginagamit para sa pagkonekta ng maraming mga unit ng pagpoproseso ng sentral (CPU) sa anumang halaga ng memorya ng computer na magagamit sa computer. Ang solong mga NUMA node ay konektado sa isang nasusukat na network (I / O bus) na tulad ng isang CPU na maaaring sistematikong ma-access ang memorya na nauugnay sa iba pang mga NUMA node.



Ang lokal na memorya ay ang memorya na ginagamit ng CPU sa isang partikular na NUMA node. Ang dayuhan o remote na memorya ay ang memorya na kinukuha ng isang CPU mula sa isa pang node na NUMA. Inilalarawan ng katagang NUMA na ratio ang ratio ng gastos ng pag-access sa banyagang memorya sa gastos ng pag-access sa lokal na memorya. Ang mas malaki ang ratio, mas malaki ang gastos, at sa gayon mas matagal ang pag-access sa memorya.





Gayunpaman, mas tumatagal ito kaysa sa pag-access ng CPU na iyon ng sarili nitong lokal na memorya. Ang isang lokal na pag-access sa memorya ay isang pangunahing bentahe, dahil pinagsasama nito ang mababang latency na may mataas na bandwidth. Sa kaibahan, ang pag-access sa memorya na kabilang sa anumang iba pang CPU ay may mas mataas na latency at mas mababang pagganap ng bandwidth.

Pagtingin sa Likod: Ebolusyon ng Mga Nakabahaging-Memorya na Multiprocessor

Frank Dennemann [8] ay nagsasaad na ang mga modernong arkitektura ng system ay hindi pinapayagan ang tunay na Uniform Memory Access (UMA), kahit na ang mga sistemang ito ay partikular na idinisenyo para sa hangaring iyon. Sa simpleng pagsasalita, ang ideya ng parallel computing ay magkaroon ng isang pangkat ng mga processor na nakikipagtulungan upang makalkula ang isang naibigay na gawain, sa gayo'y pagpapabilis ng isang kung hindi man ay klasikal na sunud-sunod na pagkalkula.



Tulad ng ipinaliwanag ni Frank Dennemann [8], noong unang bahagi ng 1970s, ang pangangailangan para sa mga system na maaaring maghatid ng maraming kasabay na pagpapatakbo ng gumagamit at labis na pagbuo ng data ay naging pangunahing gamit ang pagpapakilala ng mga sistemang pangkaugnay na database. Sa kabila ng kahanga-hangang rate ng pagganap ng uniprocessor, ang mga multiprocessor system ay mas mahusay na kagamitan upang hawakan ang trabahong ito. Upang makapagbigay ng isang mahusay na sistema, ang nakabahaging memorya ng puwang ng address ay naging pokus ng pagsasaliksik. Maaga pa, ang mga system na gumagamit ng isang crossbar switch ay na-adbokasiya, subalit sa pagiging kumplikado ng disenyo na ito ay na-scale kasama ang pagdaragdag ng mga processor, na naging mas kaakit-akit sa sistemang nakabatay sa bus. Maaaring i-access ng mga processor ang isang system ng bus ang buong puwang ng memorya sa pamamagitan ng pagpapadala ng mga kahilingan sa bus, isang napaka-epektibong paraan upang magamit ang magagamit na memorya hangga't maaari.

Gayunpaman, ang mga system ng computer na nakabatay sa bus ay may isang bottleneck - ang limitadong halaga ng bandwidth na humahantong sa mga problema sa kakayahang sumukat. Ang mas maraming mga CPU na idinagdag sa system, mas mababa ang bandwidth sa bawat node na magagamit. Bukod dito, mas maraming mga CPU na idinagdag, mas mahaba ang bus, at mas mataas ang latency bilang isang resulta.

Karamihan sa mga CPU ay itinayo sa isang dalawang-dimensional na eroplano. Ang mga CPU ay kinailangan ding magkaroon ng isinamang integrated memory Controller. Ang simpleng solusyon ng pagkakaroon ng apat na mga memory bus (itaas, ibaba, kaliwa, kanan) sa bawat core ng CPU ay pinapayagan ang buong magagamit na bandwidth, ngunit napupunta lamang ito sa ngayon. Ang mga CPU ay natigil na may apat na mga core para sa isang medyo oras. Ang pagdaragdag ng mga bakas sa itaas at ibaba ay pinapayagan ang mga direktang bus sa kabuuan ng diagonal na salungat na mga CPU dahil ang mga chips ay naging 3D. Ang paglalagay ng isang apat na cored CPU sa isang card, na pagkatapos ay konektado sa isang bus, ay ang susunod na lohikal na hakbang.

Ngayon, ang bawat processor ay naglalaman ng maraming mga core na may isang nakabahaging on-chip cache at isang off-chip memory at may variable na mga gastos sa pag-access ng memorya sa iba't ibang bahagi ng memorya sa loob ng isang server.

Ang pagpapabuti ng kahusayan ng pag-access ng data ay isa sa mga pangunahing layunin ng napapanahong disenyo ng CPU. Ang bawat core ng CPU ay pinagkalooban ng isang maliit na antas ng isang cache (32 KB) at isang mas malaki (256 KB) na antas ng 2 cache. Ang iba't ibang mga core ay magbabahagi sa ibang pagkakataon ng isang antas ng 3 cache ng maraming MB, na ang laki nito ay lumago nang malaki sa paglipas ng panahon.

Upang maiwasan ang mga miss miss ng cache - humihiling ng data na wala sa cache - maraming oras ng pagsasaliksik ang ginugol sa paghahanap ng tamang bilang ng mga cache ng CPU, mga istraktura ng pag-cache, at mga kaukulang algorithm. Tingnan ang [8] para sa isang mas detalyadong paliwanag ng protocol para sa cache ng snoop [4] at cache coherency [3,5], pati na rin ang mga ideya sa disenyo sa likod ng NUMA.

Suporta ng Software para sa NUMA

Mayroong dalawang mga hakbang sa pag-optimize ng software na maaaring mapabuti ang pagganap ng isang system na sumusuporta sa arkitektura ng NUMA - kadahilanan ng processor at paglalagay ng data. Tulad ng ipinaliwanag sa [19], ang affinity ng processor […] ay nagbibigay-daan sa pagbubuklod at pagbuklod ng isang proseso o isang thread sa isang solong CPU, o isang hanay ng mga CPU upang ang proseso o thread ay isagawa lamang sa itinalagang CPU o CPU kaysa sa anumang CPU. Ang terminong paglalagay ng data ay tumutukoy sa mga pagbabago sa software kung saan ang code at data ay itinatago hangga't maaari sa memorya.

Ang iba't ibang mga operating system na nauugnay sa UNIX at UNIX ay sumusuporta sa NUMA sa mga sumusunod na paraan (ang listahan sa ibaba ay kinuha mula sa [14]):

  • Ang suporta ng Silicon Graphics IRIX para sa arkitektura ng ccNUMA higit sa 1240 CPU na may serye ng Origin server.
  • Ang Microsoft Windows 7 at Windows Server 2008 R2 ay nagdagdag ng suporta para sa arkitektura ng NUMA higit sa 64 mga lohikal na core.
  • Naglalaman na ang bersyon 2.5 ng Linux kernel ng pangunahing suporta ng NUMA, na higit na napabuti sa kasunod na paglabas ng kernel. Ang bersyon 3.8 ng Linux kernel ay nagdala ng isang bagong pundasyon ng NUMA na pinapayagan para sa pagpapaunlad ng mas mahusay na mga patakaran ng NUMA sa paglaon ay naglalabas ng kernel [13]. Ang bersyon 3.13 ng Linux kernel ay nagdala ng maraming mga patakaran na naglalayon sa paglalagay ng isang proseso malapit sa memorya nito, kasama ang paghawak ng mga kaso, tulad ng pagbabahagi ng mga pahina ng memorya sa pagitan ng mga proseso, o paggamit ng mga transparent na malaking pahina; pinapayagan ng mga bagong setting ng kontrol ng system na paganahin o hindi paganahin ang pagbabalanse ng NUMA, pati na rin ang pagsasaayos ng iba't ibang mga parameter ng pagbabalanse ng memorya ng NUMA [15].
  • Parehong Oracle at OpenSolaris modelo modelo ng arkitektura na may pagpapakilala ng mga lohikal na grupo.
  • Idinagdag ng FreeBSD ang Paunang bilang ng pagiging affinity at pagsasaayos ng patakaran sa bersyon 11.0.

Sa librong Agham at Teknolohiya ng Computer, Mga Pamamaraan ng Internasyonal na Komperensiya (CST2016) Ning Cai ay nagpapahiwatig na ang pag-aaral ng arkitektura ng NUMA ay higit na nakatuon sa kapaligiran na may mataas na pagtatapos ng kompyuter at iminungkahing na may nalalaman na NUMA na Radix Partitioning (NaRP), na na-optimize ang pagganap ng mga nakabahaging cache sa NUMA node upang mapabilis ang mga aplikasyon ng intelligence ng negosyo. Tulad ng naturan, ang NUMA ay kumakatawan sa isang gitnang lupa sa pagitan ng mga nakabahaging memorya (SMP) na mga system na may ilang mga processor [6].

NUMA at Linux

Tulad ng nakasaad sa itaas, sinusuportahan ng Linux kernel ang NUMA mula noong bersyon 2.5. Parehong nag-aalok ang Debian GNU / Linux at Ubuntu ng suporta sa NUMA para sa pag-optimize ng proseso gamit ang dalawang mga software packages numactl [16] at numad [17]. Sa tulong ng utos ng numactl, maaari mong ilista ang imbentaryo ng mga magagamit na mga NUMA node sa iyong system [18]:

# numactl --hardware
magagamit:2mga node(0-1)
node0cpus:0 1 2 3 4 5 6 7 16 17 18 19 dalawampu dalawampu't isa 22 2. 3
node0laki:8157MB
node0libre:88MB
node1cpus:8 9 10 labing-isang 12 13 14 labinlimang 24 25 26 27 28 29 30 31
node1laki:8191MB
node1libre:5176MB
distansya ng node:
node0 1
0:10 dalawampu
1:dalawampu 10

Ang NumaTop ay isang kapaki-pakinabang na tool na binuo ng Intel para sa pagsubaybay sa lokalidad ng runtime memory at pag-aaral ng mga proseso sa mga system na NUMA [10,11]. Ang tool ay maaaring makilala ang mga potensyal na bilang ng mga bottleneck ng pagganap na nauugnay sa NUMA at samakatuwid ay makakatulong upang balansehin muli ang memorya / paglalaan ng CPU upang ma-maximize ang potensyal ng isang sistemang NUMA. Tingnan ang [9] para sa isang mas detalyadong paglalarawan.

Mga Pangyayari sa Paggamit

Pinapayagan ng mga computer na sumusuporta sa teknolohiya ng NUMA ang lahat ng mga CPU na direktang ma-access ang buong memorya - nakikita ito ng mga CPU bilang isang solong, linear na puwang ng address. Ito ay humahantong sa mas mahusay na paggamit ng 64-bit addressing scheme, na nagreresulta sa mas mabilis na paggalaw ng data, mas kaunting pagtitiklop ng data, at mas madaling pagprogram.

Ang mga system ng NUMA ay lubos na kaakit-akit para sa mga aplikasyon sa panig ng server, tulad ng pagmimina ng data at mga sistema ng suporta sa desisyon. Bukod dito, ang pagsusulat ng mga application para sa gaming at software na may mahusay na pagganap ay nagiging mas madali sa arkitekturang ito.

Konklusyon

Bilang konklusyon, tinutukoy ng arkitektura ng NUMA ang kakayahang sumukat, na isa sa mga pangunahing pakinabang. Sa isang NUMA CPU, ang isang node ay magkakaroon ng isang mas mataas na bandwidth o mas mababang latency upang ma-access ang memorya sa parehong node (hal., Ang lokal na CPU ay humihiling ng pag-access ng memorya nang sabay-sabay sa remote access; ang priyoridad ay ang lokal na CPU). Mapapabuti nito ang throughput ng memorya kung naisalokal ang data sa mga tukoy na proseso (at sa gayon ay mga nagpoproseso). Ang mga kawalan ay ang mas mataas na gastos ng paglipat ng data mula sa isang processor patungo sa isa pa. Hangga't ang kasong ito ay hindi madalas mangyari, isang sistemang NUMA ang lalampas sa mga system na may mas tradisyunal na arkitektura.

Mga Link at Sanggunian

  1. Ihambing ang NVIDIA Tesla kumpara sa Radeon Instinct, https://www.itcentralstation.com/products/comparisons/nvidia-tesla_vs_radeon-instinct
  2. Ihambing ang NVIDIA DGX-1 kumpara sa Radeon Instinct, https://www.itcentralstation.com/products/comparisons/nvidia-dgx-1_vs_radeon-instinct
  3. Pakikipag-ugnay sa cache, Wikipedia, https://en.wikipedia.org/wiki/Cache_coherence
  4. Pag-snoop ng bus, Wikipedia, https://en.wikipedia.org/wiki/Bus_snooping
  5. Mga proteksyon ng cache ng cache sa mga multiprocessor system, Geeks para sa geeks, https://www.geeksforgeeks.org/cache-coherence-protocols-in-multiprocessor-system /
  6. Computer science and technology - Mga pamamaraan ng International Conference (CST2016), Ning Cai (Ed.), World Scientific Publishing Co Pte Ltd, ISBN: 9789813146419
  7. Daniel P. Bovet at Marco Cesati: Pag-unawa sa arkitektura ng NUMA sa Pag-unawa sa Linux Kernel, ika-3 edisyon, O'Reilly, https://www.oreilly.com/library/view/ Understanding-the-linux/0596005652/
  8. Frank Dennemann: NUMA Deep Dive Bahagi 1: Mula sa UMA hanggang sa NUMA, https://frankdenneman.nl/2016/07/07/numa-deep-dive-part-1-uma-numa/
  9. Colin Ian King: NumaTop: Isang tool sa pagsubaybay sa system ng NUMA, http://smackerelofopinion.blogspot.com/2015/09/numatop-numa-system-monitoring-tool.html
  10. Numatop, https://github.com/intel/numatop
  11. Package numatop para sa Debian GNU / Linux, https://packages.debian.org/buster/numatop
  12. Jonathan Kehayias: Pag-unawa sa Non-Uniporme na Pag-access / Mga Arkitektura ng Memorya (NUMA), https://www.sqlskills.com/blogs/jonathan/ Understanding-non-uniform-memory-accessarchitectures-numa/
  13. Balita sa Linux Kernel para sa Kernel 3.8, https://kernelnewbies.org/Linux_3.8
  14. Non-pare-parehong pag-access sa memorya (NUMA), Wikipedia, https://en.wikipedia.org/wiki/Non-uniform_memory_access
  15. Dokumentasyon sa Pamamahala sa Memory ng Linux, NUMA, https://www.kernel.org/doc/html/latest/vm/numa.html
  16. Package numactl para sa Debian GNU / Linux, https://packages.debian.org/sid/admin/numactl
  17. Package numad para sa Debian GNU / Linux, https://packages.debian.org/buster/numad
  18. Paano makahanap kung ang pagsasaayos ng NUMA ay pinagana o hindi pinagana? https://www.thegeekdiary.com/centos-rhel-how-to-find-if-numa-configuration-is-enabled-or-disabled/
  19. Kaakibat ng processor, Wikipedia, https://en.wikipedia.org/wiki/Processor_affinity

Salamat

Nais ng mga may-akda na pasalamatan si Gerold Rupprecht para sa kanyang suporta habang inihahanda ang artikulong ito.

Tungkol sa Mga May-akda

Ang Plaxedes Nehanda ay isang multiskilled, self-driven na maraming nalalaman na tao na nagsusuot ng maraming mga sumbrero, kasama ng mga ito, isang tagaplano ng mga kaganapan, isang virtual na katulong, isang transcriber, pati na rin isang masugid na mananaliksik, na nakabase sa Johannesburg, South Africa.

Si Prince K. Nehanda ay isang Instrumentation and Control (Metrology) Engineer sa Paeflow Metering sa Harare, Zimbabwe.

Gumagana si Frank Hofmann sa kalsada - mas mabuti mula sa Berlin (Germany), Geneva (Switzerland), at Cape Town (South Africa) - bilang isang developer, trainer, at may-akda para sa mga magazine tulad ng Linux-User at Linux Magazine. Siya rin ang kapwa may-akda ng Debian package management book ( http://www.dpmb.org ).