Прежде всего, «Замок» - неправильный термин для его описания. «Сродство» является более подходящим термином.
В большинстве случаев вам не нужно заботиться об этом. Однако в некоторых случаях ручная настройка соответствия CPU / Process / Thread может быть полезной .
Операционные системы обычно не обращают внимания на детали современной многоядерной архитектуры. Например, скажем, у нас есть 2-сокетные четырехъядерные процессоры, и процессор поддерживает SMT (= HyperThreading). В этом случае у нас есть 2 процессора, 8 ядер и 16 аппаратных потоков. Итак, ОС увидит 16 логических процессоров. Если ОС не распознает такую иерархию, она, скорее всего, потеряет некоторое повышение производительности. Причины:
Кэши : в нашем примере два разных процессора (установленных на двух разных сокетах) не совместно используют кэш-память на кристалле. Скажем, в приложении есть 4 занятых потока и потоки разделяют много данных. Если ОС планирует потоки между процессорами, мы можем потерять некоторую локальность кэша, что приведет к снижению производительности. Тем не менее, потоки не разделяют много данных (имея различный рабочий набор), тогда разделение на разные физические процессоры будет лучше за счет увеличения эффективной емкости кеша. Кроме того, может возникнуть более сложный сценарий, о котором очень сложно знать ОС.
Конфликт ресурсов : давайте рассмотрим случай SMT (= HyperThreading). SMT разделяет много важных ресурсов ЦП, таких как кэши, TLB и исполнительные блоки. Скажем, есть только две занятые темы. Однако ОС может тупо планировать эти два потока на двух логических процессорах из одного физического ядра. В таком случае значительные ресурсы конкурируют два логических потока.
Один хороший пример - Windows 7. Теперь Windows 7 поддерживает политику интеллектуального планирования, учитывающую SMT ( статья по теме ). Windows 7 фактически предотвращает вышеупомянутый 2. случай. Вот снимок менеджера задач в Windows 7 с 20% нагрузкой на Core i7 (четырехъядерный с HyperThreading = 8 логических процессоров):
(источник: egloos.com )
История использования процессора очень интересная, не так ли? :) Вы можете видеть, что используется только один центральный процессор в парах , что означает, что Windows 7 по возможности избегает планирования двух потоков на одном и том же ядре. Эта политика определенно уменьшит негативные последствия SMT, такие как конфликт ресурсов.
Я бы хотел сказать, что ОС не очень умны, чтобы понимать современную многоядерную архитектуру, в которой много кэшей, общий кэш последнего уровня, SMT и даже NUMA. Поэтому могут быть веские причины, по которым вам может потребоваться вручную установить привязку к процессору / процессу / потоку.
Однако я не скажу, что это действительно необходимо. Только после того, как вы полностью поймете шаблоны своей рабочей нагрузки и архитектуру своей системы, примерьте ее. И посмотрите, насколько эффективна ваша попытка.