Совместимость процессоров
Эта статья нуждается в дополнительных цитатах для проверки . ( июнь 2021 г. ) |
Привязка процессора , или привязка ЦП , или «привязка к кэшу», позволяет привязывать и отвязывать процесс или поток к центральному процессору (ЦП) или диапазону ЦП, так что процесс или поток будут выполняться только на назначенном ЦП. или процессоры, а не любой процессор. Это можно рассматривать как модификацию собственного алгоритма центрального планирования очереди в симметричной многопроцессорной операционной системе. Каждый элемент в очереди имеет тег, указывающий его родственный процессор . Во время выделения ресурсов каждая задача выделяется своему родственному процессору, а не другим.
Привязка к процессору использует тот факт, что остатки процесса, запущенного на данном процессоре, могут оставаться в состоянии этого процессора (например, данные в кэш-памяти ) после того, как на этом процессоре был запущен другой процесс. Планирование процесса с интенсивным использованием ЦП, который имеет мало прерываний для выполнения на одном и том же процессоре, может повысить его производительность за счет уменьшения количества событий, ухудшающих качество, таких как промахи в кэше , но может замедлить работу обычных программ, поскольку им придется ждать, пока этот ЦП снова станет доступным. [1] Практическим примером привязки процессора является выполнение нескольких экземпляров беспоточного приложения, например некоторого программного обеспечения для рендеринга графики. [ нужна ссылка ]
Реализации алгоритмов планирования различаются по степени соответствия процессору. При определенных обстоятельствах некоторые реализации позволяют переключить задачу на другой процессор, если это приведет к повышению эффективности. Например, когда две ресурсоемкие задачи (A и B) связаны с одним процессором, а другой процессор остается неиспользуемым, многие планировщики переносят задачу B на второй процессор, чтобы максимально эффективно использовать процессор. Тогда задача B приобретет сходство со вторым процессором, в то время как задача A продолжит иметь сходство с исходным процессором. [ нужна ссылка ]
Использование
[ редактировать ]Привязка процессоров может эффективно уменьшить проблемы с кэшем, но не устраняет постоянную проблему балансировки нагрузки . [2] Также обратите внимание, что привязка процессоров усложняется в системах с неоднородной архитектурой. Например, система с двумя двухъядерными гиперпоточными процессорами представляет собой проблему для алгоритма планирования.
Между двумя виртуальными процессорами, реализованными на одном ядре посредством гиперпоточности, существует полная близость, частичная близость между двумя ядрами одного и того же физического процессора (поскольку ядра совместно используют часть, но не весь кэш), а между отдельными физическими процессорами близость отсутствует. Поскольку другие ресурсы также являются общими, сходство процессоров само по себе не может использоваться в качестве основы для диспетчеризации ЦП. Если процесс недавно запускался на одном виртуальном гиперпоточном процессоре в данном ядре и этот виртуальный процессор в настоящее время занят, а его партнерский процессор — нет, привязка кэша предполагает, что процесс следует отправить на простаивающий партнерский процессор. Однако два виртуальных процессора конкурируют практически за все ресурсы вычислений, кэша и памяти. В этой ситуации обычно было бы более эффективно направить процесс на другое ядро или процессор, если таковой доступен. Это может повлечь за собой штраф, когда процесс повторно заполняет кэш, но общая производительность может быть выше, поскольку процессу не придется конкурировать за ресурсы внутри ЦП. [ нужна ссылка ]
Конкретные операционные системы
[ редактировать ]В Linux привязку процесса к процессору можно изменить с помощью программы Taskset(1). [3] и системный вызов sched_setaffinity(2). Привязку потока можно изменить с помощью одной из библиотечных функций: pthread_setaffinity_np(3) или pthread_attr_setaffinity_np(3).
В SGI системах dplace привязывает процесс к набору процессоров. [4]
В DragonFly BSD 1.9 (2007) и более поздних версиях для управления привязкой процесса можно использовать системный вызов usched_set. [5] [6] В NetBSD 5.0, FreeBSD 7.2, DragonFly BSD 4.7 и более поздних версиях можно использовать pthread_setaffinity_np и pthread_getaffinity_np. [7] В NetBSD утилита psrset [8] чтобы установить привязку потока к определенному набору процессоров. Во FreeBSD процессорный набор [9] Утилита используется для создания наборов ЦП и назначения процессов этим наборам. В DragonFly BSD 3.1 (2012) и более поздних версиях утилиту usched можно использовать для назначения процессов определенному набору ЦП. [10]
В Windows NT и ее преемниках привязку потоков и процессов к ЦП можно устанавливать отдельно с помощью SetThreadAffinityMask. [11] и SetProcessAffinityMask [12] Вызовы API или через интерфейс диспетчера задач (только для привязки процессов).
macOS предоставляет API сходства [13] который подсказывает ядру, как планировать потоки в соответствии с наборами сходства.
В Solaris можно управлять привязкой процессов и LWP к процессору с помощью pbind(1). [14] программа. Чтобы программно управлять сходством,process_bind(2) [15] можно использовать. Доступны более общие интерфейсы, такие как pset_bind(2). [16] или lgrp_affinity_get(3LGRP) [17] использование концепций набора процессоров и групп локальности.
В AIX можно управлять привязками процессов с помощью командыbindprocessor. [18] [19] и API-интерфейс процессора привязки. [18] [20]
См. также
[ редактировать ]Ссылки
[ редактировать ]- ^ «Привязка и привязка процессора» . ИБМ . Проверено 8 июня 2021 г.
- ^ «Информационный документ — Сходство процессора» — с сайта tmurgent.com . По состоянию на 6 июля 2007 г.
- ^ Linux пользователя Руководство – Пользовательские команды –
- ^ dplace.1. Архивировано 1 июля 2007 г. на Wayback Machine — с сайта sgi.com . По состоянию на 6 июля 2007 г.
- ^ "
usched_set(2)
— настройка активации процесса» . Руководство по системным вызовам DragonFly . DragonFly BSD . Проверено 28 июля 2019 г. - ^ "
kern/kern_usched.c § sys_usched_set
" . Перекрестная ссылка BSD . DragonFly BSD . Получено 28 июля 2019 г. - ^
pthread_setaffinity_np(3)
– NetBSD , FreeBSD и DragonFly BSD. Руководство по функциям библиотеки - ^ NetBSD . системного администратора Руководство –
- ^ FreeBSD по основным командам Руководство –
- ^ "
usched(8)
— запустить программу с указанным планировщиком пользовательского пространства и cpumask» . Руководство системного администратора DragonFly . DragonFly BSD . Проверено 28 июля 2019 г. - ^ SetThreadAffinityMask — библиотека MSDN
- ^ SetProcessAffinityMask — библиотека MSDN
- ^ «Примечания к выпуску API Thread Affinity» . Разработчик.apple.com .
- ^ pbind(1M) - справочная страница Solaris
- ^ процессор_bind(2) - справочная страница Solaris
- ^ pset_bind(2) - Информационная библиотека Oracle Solaris 11.1 - раздел 2 страниц руководства
- ^ lgrp_affinity_get(3LGRP) - Руководство разработчика по оптимизации размещения потоков и памяти
- ^ Jump up to: а б Умеш Прабхакар Гайквад; Кайлас С. Задбуке (16 ноября 2006 г.). «Привязка процессора к AIX» . ИБМ .
- ^ «Команда связывающего процессора» . ИБМ .
- ^ «Подпрограммаbindprocessor» . ИБМ .