Дизайнът на I / O шините представлява компютърните артерии и значително определя колко и колко бързо могат да се обменят данни между отделните компоненти, изброени по-горе. Най-добрата категория се води от компоненти, използвани в областта на високопроизводителните изчисления (HPC). Към средата на 2020 г. сред съвременните представители на HPC са Nvidia Tesla и DGX, Radeon Instinct и Intel Xeon Phi GPU-базирани ускорителни продукти (вж. [1,2] за сравнение на продукти).
Разбиране на NUMA
Неравномерният достъп до паметта (NUMA) описва архитектура на споделена памет, използвана в съвременните многопроцесорни системи. NUMA е изчислителна система, съставена от няколко единични възла по такъв начин, че съвкупната памет да се споделя между всички възли: „на всеки процесор е присвоена собствена локална памет и може да има достъп до паметта от други процесори в системата“ [12,7].
NUMA е интелигентна система, използвана за свързване на множество централни процесори (CPU) към всяко количество компютърна памет, налична на компютъра. Единичните NUMA възли са свързани през мащабируема мрежа (I / O шина), така че процесорът може систематично да осъществява достъп до паметта, свързана с други NUMA възли.
Локалната памет е паметта, която процесорът използва в определен NUMA възел. Чужда или отдалечена памет е паметта, която процесорът взема от друг NUMA възел. Терминът NUMA съотношение описва съотношението на разходите за достъп до чужда памет към разходите за достъп до локална памет. Колкото по-голямо е съотношението, толкова по-голяма е цената и следователно толкова по-дълго е необходимо за достъп до паметта.
Въпреки това отнема повече време, отколкото когато този процесор има достъп до собствената си локална памет. Достъпът до локална памет е основно предимство, тъй като съчетава ниска латентност и висока честотна лента. За разлика от това, достъпът до памет, принадлежаща на който и да е друг процесор, има по-висока латентност и по-ниска производителност на честотната лента.
Поглед назад: Еволюция на мултипроцесорите със споделена памет
Франк Денеман [8] заявява, че съвременните системни архитектури не позволяват наистина унифициран достъп до паметта (UMA), въпреки че тези системи са специално разработени за тази цел. Просто казано, идеята на паралелните изчисления беше да има група процесори, които си сътрудничат за изчисляване на дадена задача, като по този начин ускоряват иначе класическото последователно изчисление.
Както беше обяснено от Франк Денеман [8], в началото на 70-те години на миналия век „необходимостта от системи, които могат да обслужват множество едновременни потребителски операции и прекомерно генериране на данни, стана основна“ с въвеждането на релационни системи от бази данни. „Въпреки впечатляващата скорост на еднопроцесорната производителност, многопроцесорните системи бяха по-добре оборудвани за справяне с това натоварване. За да се осигури рентабилна система, общото адресно пространство на паметта стана фокус на изследванията. В началото се застъпваха системи, използващи напречен превключвател, но с тази сложност на дизайна, мащабирана заедно с увеличаването на процесорите, което направи системата, базирана на шина, по-привлекателна. Процесорите в шинна система [могат] да получат достъп до цялото пространство на паметта, като изпращат заявки по шината, много рентабилен начин за максимално оптимално използване на наличната памет.”
Компютърните системи, базирани на шина, обаче идват със затруднение - ограниченото количество честотна лента, което води до проблеми с мащабируемостта. Колкото повече процесори се добавят към системата, толкова по-малка е честотната лента на възел. Освен това, колкото повече процесори се добавят, толкова по-дълга е шината и в резултат на това е по-висока латентността.
Повечето процесори са конструирани в двумерна равнина. Процесорите също трябваше да имат вградени контролери за памет. Лесното решение да имате четири шини памет (отгоре, отдолу, отляво, отдясно) към всяко ядро на процесора позволи пълната налична честотна лента, но това отива само досега. Процесорите застояха с четири ядра за значително време. Добавянето на следи отгоре и отдолу позволява директни шини към диагонално противоположните процесори, тъй като чиповете стават 3D. Поставянето на четириядрен процесор на карта, която след това се свърза към шина, беше следващата логична стъпка.
Днес всеки процесор съдържа много ядра с общ кеш в чипа и памет извън чипа и има променливи разходи за достъп до паметта в различни части на паметта в сървъра.
Подобряването на ефективността на достъпа до данни е една от основните цели на съвременния дизайн на процесора. Всяко ядро на процесора беше снабдено с малък кеш от първо ниво (32 KB) и по-голям (256 KB) кеш от ниво 2. По-късно различните ядра ще споделят кеш от ниво от няколко MB, чийто размер значително нараства с времето.
За да се избегнат пропуски в кеша - искане на данни, които не са в кеша - много време за изследване се отделя за намиране на точния брой кешове на процесора, структури за кеширане и съответни алгоритми. Вижте [8] за по-подробно обяснение на протокола за кеширане snoop [4] и кохерентност на кеша [3,5], както и идеите за дизайн зад NUMA.
Софтуерна поддръжка за NUMA
Има две мерки за оптимизация на софтуера, които могат да подобрят производителността на система, поддържаща архитектура NUMA - афинитет на процесора и разположение на данни. Както е обяснено в [19], „афинитет на процесора [...] позволява свързването и развързването на процес или нишка с един процесор или диапазон от процесори, така че процесът или нишката ще се изпълняват само на определения процесор или процесори, а отколкото всеки процесор.„Терминът„ разположение на данни “се отнася до софтуерни модификации, при които кодът и данните се съхраняват възможно най-близо в паметта.
Различните операционни системи UNIX и UNIX поддържат NUMA по следните начини (списъкът по-долу е взет от [14]):
- Поддръжка на Silicon Graphics IRIX за архитектура ccNUMA над 1240 процесора със серия сървъри Origin.
- Microsoft Windows 7 и Windows Server 2008 R2 добавиха поддръжка за архитектура NUMA над 64 логически ядра.
- Версия 2.5 от ядрото на Linux вече съдържа основна поддръжка на NUMA, която беше допълнително подобрена в следващите версии на ядрото. Версия 3.8 от ядрото на Linux донесе нова NUMA основа, която позволи разработването на по-ефективни NUMA политики в по-късните версии на ядрото [13]. Версия 3.13 от ядрото на Linux донесе множество политики, които имат за цел да поставят процес в близост до паметта му, заедно с обработката на случаи, като например споделяне на страници с памет между процесите или използване на прозрачни огромни страници; новите настройки на системния контрол позволяват включването или деактивирането на балансирането на NUMA, както и конфигурирането на различни параметри за балансиране на паметта NUMA [15].
- Както Oracle, така и OpenSolaris моделират архитектура NUMA с въвеждането на логически групи.
- FreeBSD добави първоначален афинитет на NUMA и конфигурация на политика във версия 11.0.
В книгата „Компютърни науки и технологии, Сборник от международната конференция (CST2016)“ Нинг Цай предполага, че изследването на архитектурата NUMA е било фокусирано главно върху изчислителната среда от висок клас и е предложило NUMA-наясно Radix Partitioning (NaRP), което оптимизира производителността на споделени кешове в NUMA възли за ускоряване на приложенията за бизнес разузнаване. Като такъв, NUMA представлява посредник между системите със споделена памет (SMP) с няколко процесора [6].
NUMA и Linux
Както беше посочено по-горе, ядрото на Linux поддържа NUMA от версия 2.5. Както Debian GNU / Linux, така и Ubuntu предлагат поддръжка на NUMA за оптимизация на процеса с двата софтуерни пакета numactl [16] и numad [17]. С помощта на командата numactl можете да изброите списъка на наличните NUMA възли във вашата система [18]:
# numactl - хардуерна разположение: 2 възли (0-1)
възел 0 cpus: 0 1 2 3 4 5 6 7 16 17 18 19 20 21 22 23
размер на възел 0: 8157 MB
възел 0 безплатно: 88 MB
възел 1 cpus: 8 9 10 11 12 13 14 15 24 25 26 27 28 29 30 31
размер на възел 1: 8191 MB
възел 1 безплатно: 5176 MB
разстояния от възли:
възел 0 1
0: 10 20
1: 20 10
NumaTop е полезен инструмент, разработен от Intel за наблюдение на местоположението на паметта по време на работа и анализиране на процеси в NUMA системи [10,11]. Инструментът може да идентифицира потенциални недостатъци на производителността, свързани с NUMA, и по този начин да помогне за балансиране на разпределението на паметта / процесора, за да увеличи максимално потенциала на NUMA система. Вижте [9] за по-подробно описание.
Сценарии за използване
Компютрите, които поддържат технологията NUMA, позволяват на всички процесори да имат директен достъп до цялата памет - процесорите виждат това като едно линейно адресно пространство. Това води до по-ефективно използване на 64-битовата схема за адресиране, което води до по-бързо движение на данни, по-малко репликация на данни и по-лесно програмиране.
NUMA системите са доста привлекателни за сървърни приложения, като например извличане на данни и системи за подкрепа на решения. Освен това писането на приложения за игри и софтуер с висока производителност става много по-лесно с тази архитектура.
Заключение
В заключение, архитектурата NUMA адресира мащабируемостта, което е едно от основните й предимства. В NUMA CPU един възел ще има по-висока честотна лента или по-ниска латентност за достъп до паметта на същия този възел (e.ж., локалният процесор иска достъп до паметта едновременно с отдалечения достъп; приоритетът е на локалния процесор). Това драстично ще подобри пропускателната способност на паметта, ако данните са локализирани в определени процеси (и по този начин процесори). Недостатъците са по-високите разходи за преместване на данни от един процесор в друг. Докато този случай не се случва твърде често, система NUMA ще надминава системите с по-традиционна архитектура.
Връзки и справки
- Сравнете NVIDIA Tesla vs. Radeon Instinct, https: // www.itcentralstation.com / products / сравнения / nvidia-tesla_vs_radeon-instinct
- Сравнете NVIDIA DGX-1 срещу. Radeon Instinct, https: // www.itcentralstation.com / products / сравнения / nvidia-dgx-1_vs_radeon-instinct
- Кохерентност на кеша, Уикипедия, https: // en.wikipedia.org / wiki / Cache_coherence
- Шумване на автобус, Уикипедия, https: // en.wikipedia.org / wiki / Bus_snooping
- Протоколи за съгласуваност на кеша в многопроцесорни системи, Geeks за отрепки, https: // www.geeksforgeeks.org / cache-coherence-protocols-in-multiprocessor-system /
- Компютърни науки и технологии - Сборник с доклади от Международната конференция (CST2016), Ning Cai (Ed.), World Scientific Publishing Co Pte Ltd, ISBN: 9789813146419
- Даниел П. Бовет и Марко Чезати: Разбиране на архитектурата на NUMA в Разбиране на ядрото на Linux, 3-то издание, O'Reilly, https: // www.oreilly.com / библиотека / преглед / разбиране-на-linux / 0596005652 /
- Франк Денеман: NUMA Deep Dive Част 1: От UMA до NUMA, https: // frankdenneman.nl / 2016/07/07 / numa-deep-dive-part-1-uma-numa /
- Колин Иън Кинг: NumaTop: Инструмент за наблюдение на системата NUMA, http: // smackerelofopinion.blogspot.com / 2015/09 / numatop-numa-system-monitoring-tool-tool.html
- Numatop, https: // github.com / intel / numatop
- Numatop на пакета за Debian GNU / Linux, https: // пакети.debian.org / buster / numatop
- Джонатан Кехаяс: Разбиране на неравномерния достъп / архитектура на паметта (NUMA), https: // www.sqlskills.com / блогове / Джонатан / разбиране-не-еднакво-памет-достъпархитектури-нума /
- Новини за ядрото на Linux за ядро 3.8, https: // kernelnewbies.org / Linux_3.8
- Неравномерен достъп до паметта (NUMA), Wikipedia, https: // en.wikipedia.org / wiki / Uniform_memory_access
- Документация за управление на паметта на Linux, NUMA, https: // www.ядро.org / doc / html / latest / vm / numa.html
- Пакет numactl за Debian GNU / Linux, https: // пакети.debian.org / sid / admin / numactl
- Пакет номер за Debian GNU / Linux, https: // пакети.debian.org / buster / numad
- Как да разбера дали конфигурацията на NUMA е активирана или деактивирана?, https: // www.thegeekdiary.com / centos-rhel-how-to-find-if-numa-configuration-is-enabled-or-disabled /
- Афинитет на процесора, Wikipedia, https: // en.wikipedia.org / wiki / Processor_affinity
Благодаря ти
Авторите биха искали да благодарят на Геролд Руппрехт за подкрепата при подготовката на тази статия.
Относно авторите
Plaxedes Nehanda е мултиквалифициран, самоуправляващ се универсален човек, който носи много шапки, сред които е организатор на събития, виртуален асистент, транскриптор, както и запален изследовател, базиран в Йоханесбург, Южна Африка.
Принц К. Неханда е инженер по измерване и контрол (метрология) в Paeflow Metering в Хараре, Зимбабве.
Франк Хофман работи по пътя - за предпочитане от Берлин (Германия), Женева (Швейцария) и Кейптаун (Южна Африка) - като разработчик, обучител и автор на списания като Linux-User и Linux Magazine. Той е и съавтор на книгата за управление на пакети Debian (http: // www.dpmb.организация).