Сходство с процессором - Processor affinity

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

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

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

использование

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

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

Конкретные операционные системы

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

На SGI системы, место связывает процесс с набором процессоров.[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, процессор[8] Утилита используется для создания наборов ЦП и назначения процессов этим наборам. В DragonFly BSD 3.1 (2012) и более поздних версий, утилиту usched можно использовать для назначения процессов определенному набору ЦП.[9]

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

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

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