Например, в системе с двумя гнездами с двумя четырёхъядерными процессорами планировщик потоков пытается сохранить потоки от одних и тех же процессов в одном процессоре? Поскольку чередование потоков различных процессов в разных процессорах замедляло бы производительность в случае, когда потоки в процессе имеют много доступа к общей памяти.Как Linux OS расписывает потоки при наличии нескольких сокетов
ответ
Это зависит.
На современных платформах 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, но в основном вы недоумеваете, насколько это возможно. Это не похоже на то, что библиотеки говорят вам, что вы обращаетесь к памяти, которая на самом деле находится в другом сокете, они просто позволяют вам делать это без намека на то, что есть возможности для улучшения.
* Идеальная память будет достаточно быстрой ... * Запрет революции в фундаментальной физике, оперативная память никогда не будет намного быстрее, чем сейчас: шина памяти находится в пределах порядка от величины, ограниченной скоростью света. Шутки в сторону. (Технически скорость электромагнитной волны в меди, которая составляет примерно 2/3 * c * = 20 см/нс. Когда вы складываете все провода, процессор оказывается примерно на 20 см от ОЗУ.) – zwol
@Zack , да расстояние - это проблема (такие вещи, как память XDR в PS3, имеют более одного бита в полете по трассам шины данных на материнской плате ...), но сами ячейки DRAM являются собаками медленными. Даже DDR3-2133 работает только с тактовой частотой 266 МГц, но более чем в десять раз медленнее ядра; хорошая пропускная способность, задержка мусора. Мемристор HP намного лучше - по-видимому, часы с частотой> 1 ГГц, в 4 раза быстрее самой быстрой DRAM. Кто-нибудь для энергонезависимой основной памяти? – bazza
Ну, есть последний порядок величины ... Сколько циклов для доступа, знаете ли вы? – zwol
- 1. регистрация при наличии нескольких серверов
- 2. Linux select() и FIFO упорядочение нескольких сокетов?
- 3. Многопоточный проект программирования сокетов Linux
- 4. Служба Linux для прослушивания нескольких сокетов
- 5. WP7 - архитектура сокетов - Как управляется соединение сокетов? Потоки?
- 6. javafx, программирование сокетов и потоки
- 7. Программирование и потоки Java-сокетов
- 8. Явные потоки сокетов заканчиваются неожиданно
- 9. Как планировщик ОС расписывает потоки, относящиеся к двум различным процессам (задачам)?
- 10. Фиксированные потоки потоков потоков, блокирующие при наличии достаточного количества заданий
- 11. Работа с $ (это) при наличии нескольких Селектор
- 12. Относительные пути при наличии нескольких проектов Trac
- 13. Получить .class при наличии нескольких параметров
- 14. Проверка использования порта при наличии нескольких интерфейсов
- 15. Задача копирования градиента при наличии нескольких ароматов
- 16. Отладка программирования сокетов Linux?
- 17. Обработка формы Django при наличии нескольких возможностей?
- 18. C++ потоки, не выполняющиеся параллельно на linux/mac os
- 19. Создание поля, требуемого при наличии нескольких форм
- 20. «SO_REUSEPORT» (OS X) или «SO_REUSEADDR» (Linux) действительно позволяет пользователю использовать recvfrom для нескольких сокетов?
- 21. отслеживать вызовы сокетов Linux?
- 22. Обнаружение изменений для нескольких экземпляров приложения при наличии нескольких логинов
- 23. Размер буферизованных сокетов Linux
- 24. Могу ли я полагаться на то, что ОС расписывает потоки «оптимальными» (Параллелизация)
- 25. C потоки в linux?
- 26. Типы сокетов TIPC в Linux
- 27. Сокеты, потоки и файловые дескрипторы в Linux
- 28. C# обработка полученных данных сокетов через потоки
- 29. как использовать функцию суммы при наличии нескольких строк
- 30. Как продлить время сеанса при наличии нескольких форм
Это может быть связано с 'NUMA' –