2013-04-24 3 views
0

Например, в системе с двумя гнездами с двумя четырёхъядерными процессорами планировщик потоков пытается сохранить потоки от одних и тех же процессов в одном процессоре? Поскольку чередование потоков различных процессов в разных процессорах замедляло бы производительность в случае, когда потоки в процессе имеют много доступа к общей памяти.Как Linux OS расписывает потоки при наличии нескольких сокетов

+1

Это может быть связано с 'NUMA' –

ответ

3

Это зависит.

На современных платформах Intel по умолчанию BIOS по-прежнему чередуется с памятью между сокетами в системе, страница за страницей. Выделить 1 Мбайт и половину будет на один сокет, наполовину на другом. Это означает, что везде, где ваши потоки имеют равный доступ к данным.

Это делает его очень простым для ОС - в любом месте.

Это может работать против вас. Аппаратная среда SMP, представленная ОС, синтезируется процессорами, взаимодействующими с QPI. Если есть много потоков, которые обращаются к тем же данным, эти ссылки могут стать действительно занятыми. Если они слишком заняты, это ограничивает производительность, и вы связаны с I/O. Вот где я; Ядро Z80 с дизайном подсистемы памяти Intel будет таким же быстрым, как и ядра ячеек, которые я на самом деле получил (хорошо, что я мог бы ускорить ...).

В конце дня настоящая проблема заключается в том, что память просто не достаточно быстра. В последнее время Intel и AMD сделали несколько впечатляющих вещей с памятью, но нам все еще мешает его медлительность. Идеальная память была бы достаточно быстрой, чтобы все ядра имели время доступа к тактовой частоте. Сотовый процессор сорта сделал это - каждый SPE имеет немного SRAM вместо кеша, и как только вы получите свою голову вокруг них, вы можете заставить их по-настоящему петь.

=== РЕДАКТИРОВАТЬ ===

Существует больше к нему. Как намекает Базиль Старинкевич, альтернативный подход заключается в том, чтобы охватить NUMA.

NUMA - это то, что на самом деле воплощают современные процессоры, причем доступ к памяти является неоднородным, поскольку память на других гнездах процессора недоступна напрямую, обращаясь к шине. Процессоры вместо этого запрашивают данные по каналу QPI (или Hypertransport в случае AMD), чтобы попросить другой CPU извлечь данные из своей памяти и отправить их обратно. Поскольку процессор делает все это для вас на аппаратных средствах, он выглядит как обычная среда SMP. И QPI/Hypertransport очень быстрые, поэтому большую часть времени достаточно много.

Если вы напишете свой код, чтобы зеркально отразить архитектуру оборудования, вы можете в теории сделать улучшения. Таким образом, это может включать (например) наличие двух копий ваших данных в системе, по одному на каждый сокет. В Linux предусмотрены функции привязки к памяти, которые специально выделяют память таким образом, а не чередуются во всех сокетах. Существуют также процедуры слияния процессоров, которые позволяют вам контролировать, на каком ядре процессора работает поток, идея заключается в том, что вы запускаете его на ядре, которое близко к буферу данных, который он будет обрабатывать.

Хорошо, так что это может означать значительную часть инвестиций в исходный код, чтобы это работало для вас (особенно если это дублирование данных не очень хорошо соответствует потоку программы), но если QPI стал проблематичной бутылкой шея - это единственное, что вы можете сделать.

Я в какой-то мере искал это. В некотором смысле это правильный фокус. Все мышление Intel и AMD (и, следовательно, ОС и библиотек тоже) - это дать вам среду SMP, которая в большинстве случаев довольно хороша. Однако они позволяют играть с NUMA, загружая библиотечные функции, которые вы должны вызвать, чтобы получить развертывание потоков и памяти, которые вы хотите.

Однако для краевых случаев, где вам нужна эта небольшая дополнительная скорость, было бы проще, если бы архитектура и ОС были жестко NUMA, без SMP. Точно так же, как процессор Cell. Легче, не потому, что было бы просто писать (на самом деле это было бы сложнее), но если вы все-таки запустили его, вы бы точно знали, что это было так быстро, как это могло когда-либо достичь. С фальшивым SMP, который у нас есть сейчас, вы экспериментируете с NUMA, но в основном вы недоумеваете, насколько это возможно. Это не похоже на то, что библиотеки говорят вам, что вы обращаетесь к памяти, которая на самом деле находится в другом сокете, они просто позволяют вам делать это без намека на то, что есть возможности для улучшения.

+0

* Идеальная память будет достаточно быстрой ... * Запрет революции в фундаментальной физике, оперативная память никогда не будет намного быстрее, чем сейчас: шина памяти находится в пределах порядка от величины, ограниченной скоростью света. Шутки в сторону. (Технически скорость электромагнитной волны в меди, которая составляет примерно 2/3 * c * = 20 см/нс. Когда вы складываете все провода, процессор оказывается примерно на 20 см от ОЗУ.) – zwol

+0

@Zack , да расстояние - это проблема (такие вещи, как память XDR в PS3, имеют более одного бита в полете по трассам шины данных на материнской плате ...), но сами ячейки DRAM являются собаками медленными. Даже DDR3-2133 работает только с тактовой частотой 266 МГц, но более чем в десять раз медленнее ядра; хорошая пропускная способность, задержка мусора. Мемристор HP намного лучше - по-видимому, часы с частотой> 1 ГГц, в 4 раза быстрее самой быстрой DRAM. Кто-нибудь для энергонезависимой основной памяти? – bazza

+0

Ну, есть последний порядок величины ... Сколько циклов для доступа, знаете ли вы? – zwol

Смежные вопросы