Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ОС_Шеховцов_1.docx
Скачиваний:
75
Добавлен:
09.11.2019
Размер:
14.73 Mб
Скачать

20.1.5. Спорідненість процесора

Під спорідненістю процесора (CPU affinity) розуміють імовірність того, що потік буде запланований для виконання на процесорі, що виконував код цього потоку минулого разу [31, 79]. Висока спорідненість означає малу ймовірність міграції потоку між процесорами під час його виконання.

Типи спорідненості процесора

Є два типи спорідненості процесора — м'яка (soft affinity) і жорстка (hard affinity).

М'яка або натуральна спорідненість — властивість планувальника підтриму­вати виконання потоку на одному й тому самому процесорі упродовж максималь­ного проміжку часу. М'яка спорідненість не є вимогою, обов'язковою для вико­нання, у разі необхідності потік може мігрувати на інший процесор, але це має траплятися якомога рідше.

Відсутність реалізації м'якої спорідненості у планувальнику ОС може спри­чинити появу ефекту пінг-понгу (ping-pong effect), коли кожне перемикання кон­тексту спричиняє міграцію потоку на інший процесор.

Жорстку спорідненість задають для окремого потоку, це — явне обмеження на­бору процесорів, на яких йому дозволено виконуватися. У такому випадку кажуть, що потік прив'язаний до одного або кількох процесорів. Вимога жорсткої спорід­неності є обов'язковою (наприклад, якщо визначено, що потік може бути викона­ний тільки на процесорі 0, процесор 1 для нього буде недоступний). Для задання жорсткої спорідненості звичайно реалізують спеціальний системний виклик.

Переваги задання спорідненості процесора

Опишемо деякі переваги, які надає задання спорідненості процесора для потоків.

Найважливішою є підвищення ефективності використання апаратного кеша. Що рідше мігрують потоки між процесами, то нижча ймовірність очищення кеша. Це пов'язано з тим, що будь-яка спроба змінити дані в коді потоку, який почав ви­конання на новому процесорі, спричиняє перехресне очищення кеша для процесо­рів, де він виконувався раніше. Крім того, після міграції на новий процесор потік ніколи не знаходить у його кеші «свої» дані, внаслідок чого відсоток влучень кеша зменшується. Особливо продуктивність знижується внаслідок ефекту пінг-понгу.

Друга перевага полягає в тому, що, задавши жорстку спорідненість, можна виділяти потоки, яким для виконання потрібні гарантовані процесорні ресурси (наприклад, потоки реального часу). У цьому разі можна прив'язати до деякої підмножини процесорів усі потоки, крім одного, а виділений потік - до інших процесорів. Наприклад, якщо прив'язати конкретний потік до одного із процесо­рів системи, а інші потоки виконувати на всіх інших процесорах, весь процесор опиниться в розпорядженні виділеного потоку, що дасть змогу контролювати йо­го виконання в реальному масштабі часу.

Крім того, жорстка спорідненість дає можливість ефективніше розподіляти системне навантаження процесорами. Наприклад, коли відомо, що у системі з чо­тирма процесорами постійно виконуються процеси А і В, при цьому виконання А вимагає 75 % процесорного часу, а В - 25 %, доцільно прив'язати процес В до од­ного із процесорів, а процес А — до решти трьох.

Маска спорідненості

Задання жорсткої спорідненості для потоку відбувається із використанням маски спорідненості (affinity mask) - бітової маски, кожний біт якої відповідає процесо­ру, присутньому у системі. Коли такий біт увімкнуто, то це означає, що потоку дозволено виконуватися на відповідному процесорі; коли ні, то це може означати, що потік не може бути виконаний на відповідному процесорі або процесор відсут­ній у системі. Цю маску передають як параметр у системний виклик задання жорст­кої спорідненості, після встановлення її звичайно зберігають у керуючому блоці потоку. Далі буде наведено приклади прив'язання потоків до процесорів у Linux і Windows ХР за допомогою задання маски спорідненості.