Из Википедии, бесплатной энциклопедии
Перейти к навигации Перейти к поиску

Процессор сродство или пиннинг ЦП или «сродство кэша», обеспечивает связывание и отменяя из процесса или нити к центральному блоку обработки (ЦП) или диапазону процессоров, так что процесс или поток будет выполняться только на указанном процессоре или ЦП, а не ЦП. Это можно рассматривать как модификацию собственного алгоритма планирования центральной очереди в симметричной многопроцессорной операционной системе. Каждый элемент в очереди имеет метку, указывающую его родственный процессор . Во время распределения ресурсов каждая задача выделяется своему родственному процессору, а не другим.

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

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

Использование [ править ]

Сходство процессора может эффективно уменьшить проблемы с кешем, но не устраняет постоянную проблему балансировки нагрузки . [1] Также обратите внимание, что привязка процессоров становится более сложной в системах с неоднородной архитектурой. Например, система с двумя двухъядерными гиперпоточными ЦП представляет проблему для алгоритма планирования.

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

Конкретные операционные системы [ править ]

В Linux привязку процесса к процессору можно изменить с помощью программы taskset (1) [2] и системного вызова sched_setaffinity (2). Родство потока можно изменить с помощью одной из библиотечных функций: pthread_setaffinity_np (3) или pthread_attr_setaffinity_np (3).

В системах SGI dplace связывает процесс с набором процессоров. [3]

В DragonFly BSD 1.9 (2007) и более поздних версиях системный вызов usched_set можно использовать для управления привязкой процесса. [4] [5] В NetBSD 5.0, FreeBSD 7.2, DragonFly BSD 4.7 и более поздних версиях могут использовать pthread_setaffinity_np и pthread_getaffinity_np. [6] В NetBSD - утилита psrset [7] для установки привязки потока к определенному набору ЦП. Во FreeBSD утилита cpuset [8] используется для создания наборов ЦП и назначения процессов этим наборам. В DragonFly BSD 3.1 (2012) и более поздних версиях утилита usched может использоваться для назначения процессов определенному набору ЦП.[9]

В Windows NT и ее преемниках сродство потоков и процессов к ЦП можно установить отдельно с помощью вызовов API SetThreadAffinityMask [10] и SetProcessAffinityMask [11] или через интерфейс диспетчера задач (только для сродства процессов).

macOS предоставляет API привязки [12], который подсказывает ядру, как планировать потоки в соответствии с наборами привязки.

В Solaris можно управлять привязкой процессов и LWP к процессору с помощью программы pbind (1) [13] . Для программного управления сродством можно использовать processor_bind (2) [14] . Доступны более общие интерфейсы, такие как pset_bind (2) [15] или lgrp_affinity_get (3LGRP) [16], использующие концепции набора процессоров и групп местности.

В AIX можно управлять связыванием процессов с помощью команды bindprocessor [17] [18] и API bindprocessor. [17] [19]

См. Также [ править ]

  • Маска сродства

Ссылки [ править ]

  1. ^ «Белая книга - Соответствие процессоров» - С сайта tmurgent.com . Проверено 6 июля 2007 г.
  2. ^ taskset(1)  -  Linux пользователя Руководство Команды пользователя -
  3. ^ dplace.1 Архивировано 1 июля 2007 г. на Wayback Machine - с sgi.com . Проверено 6 июля 2007 г.
  4. ^ " usched_set(2)- настройка прока ушед" . Руководство по системным вызовам DragonFly . DragonFly BSD . Проверено 28 июля 2019 .
  5. ^ " " . Перекрестная ссылка BSD . DragonFly BSD . Проверено 28 июля 2019 .kern/kern_usched.c § sys_usched_set
  6. ^ pthread_setaffinity_np(3) -Руководство по функциям библиотек NetBSD , FreeBSD и DragonFly BSD
  7. ^ psrset(8)  -  Руководство администратора системы NetBSD
  8. ^ cpuset(1)  -  Руководство по основным командам FreeBSD
  9. ^ " - запустить программу с указанным пользовательским планировщиком и cpumask" . Руководство администратора системы DragonFly . DragonFly BSD . Проверено 28 июля 2019 .usched(8)
  10. ^ SetThreadAffinityMask - Библиотека MSDN
  11. ^ SetProcessAffinityMask - Библиотека MSDN
  12. ^ «Примечания к выпуску Thread Affinity API» . Developer.apple.com .
  13. ^ pbind (1M) - Справочная страница Solaris
  14. ^ processor_bind (2) - Справочная страница Solaris
  15. ^ pset_bind (2) - Информационная библиотека Oracle Solaris 11.1 - man-страницы, раздел 2
  16. ^ lgrp_affinity_get (3LGRP) - Руководство разработчика по оптимизации размещения памяти и потоков
  17. ^ а б Умеш Прабхакар Гайквад; Кайлас С. Задбуке (16 ноября 2006 г.). «Сходство с процессором в AIX» .
  18. ^ "Команда bindprocessor" . IBM .
  19. ^ "Подпрограмма bindprocessor" . IBM .