Comments 9
Как это не имеет? Ядра имеют одинаковую скорость доступа к памяти, но могут иметь разную скорость доступа к данным в памяти, каналы которых принадлежат другой NUMA node.
Условно:
Дано:
Два процессора( или 2
Чиплета) по 8 ядер.
Сценарий 1:
Доступ к памяти, привязанной к каналам памяти у CPU0 — скорость доступа почти одинаковая
Сценарий 2:
Ядру с CPU0 потребовались данные в памяти, каналы которой привязаны к CPU1- и вот тут-то возникает дополнительный временной лаг на необходимость через интерконнет обратиться к памяти, которой владеет CPU1. И даже если речь о чиплетах внутри какого-нибудь Amd epyc, там неизбежно каналы памяти будут первично принадлежать разным чиплетам, что потребует чиплету 0 через infinity fabric обратиться к чиплету 1 для получения данных, лаг может и меньше чем между интерконнектом между сокетами, но все-равно он не нулевой
И ответьте себе на вопрос одинаковая ли скорость доступа к памяти у ядер?
На мой взгляд именно у ядер одинаковая. А далее возникает вопрос а в памяти какого процессора находятся данные.
NUMA делают не исходя из кол-ва ядер, а исходя из физической архитектуры процессора. И если она предполагает архитектуру как у условных threadripper,epyc, многопроцессорных систем — то начинают включать NUMA Блоки, чтобы планировщик не планировал по возможности потоки одного процесса на ядра из разных NUMA node, чтобы не оказалось что для приложения, обрабатывающего данные, находящиеся на планке в канале A, поток был запланирован на ядра CPU1, не имеющего прямого соединения с каналом A
Согласен, написал не совсем корректно, подправил.
Надеюсь, будет запись. Прошлый доклад был чудовищно интересным.
2. С каких пор lock() ассоциируется с Mutex и Semaphore? Это-ж сахар над Monitor.
Про пользу и рудиметарность блокировок ядра — вообще не понял вопроса.
Недостаточно знать, что такое Mutex, Semaphore и async/await. Надо знать всё, начиная с квантов