Симетрична мультипроцесорність

Матеріал з Вікіпедії — вільної енциклопедії.
Перейти до навігації Перейти до пошуку

Симетричне мультипроцесування (англ. Symmetric Multiprocessing, або SMP) — це архітектура багатопроцесорних комп'ютерів, в якій два або більше однакових процесорів підключаються до загальної пам'яті. Більшість багатопроцесорних систем сьогодні використовують архітектуру SMP.

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

Симетрична мультипроцесорність (англ. Symmetric Multiprocessing, SMP) — архітектура багатопроцесорних комп'ютерів, в якій два або більше однакових процесора порівнянної продуктивності підключаються одноманітно до загальної пам'яті (і периферійних пристроїв) і виконують одні і ті ж функції (чому, власне, система і називається симетричною). В англійській мові SMP-системи носять також назва tightly coupled multiprocessors, так як в цьому класі систем процесори тісно пов'язані один з одним через загальну шину і мають рівний доступ до всіх ресурсів обчислювальної системи (пам'яті і пристроїв введення-виведення) і управляються всі однією копією операційної системи.

В таксономії Флінна SMP-машини належать до класу SM-MIMD-машин. Більшість багатопроцесорних систем сьогодні використовують архітектуру SMP.

Опис[ред. | ред. код]

SMP-системи дозволяють будь-якому процесору працювати над будь-яким завданням незалежно від того, де в пам'яті зберігаються дані для цього завдання, — за належної підтримки операційною системою SMP-системи можуть легко переміщати завдання між процесорами, ефективно розподіляючи навантаження.

Різні SMP-системи з'єднують процесори із загальною пам'яттю по-різному. Найпростіший і дешевий підхід — це з'єднання по спільній шині (system bus)[1][2]. У цьому випадку тільки один процесор може звертатися до пам'яті в кожен даний момент, що накладає істотне обмеження на кількість процесорів, підтримуваних в таких системах. Чим більше процесорів, тим більше навантаження на загальну шину, тим довше повинен чекати кожен процесор, поки звільниться шина, щоб звернутися до пам'яті. Зниження загальної продуктивності такої системи з ростом кількості процесорів відбувається дуже швидко, тому зазвичай в таких системах кількість процесорів не перевищує 2-4. Прикладом SMP-машин з таким способом з'єднання процесорів є будь-які багатопроцесорні сервери початкового рівня.

Діаграма пристрою системи з симетричною мультироцесорністью. Процесори звертаються до спільної пам'яті по спільній шині

Другий спосіб з'єднання процесорів — через комутоване з'єднання (crossbar switch)[1][2]. При такому з'єднанні вся загальна пам'ять ділиться на банки пам'яті, кожен банк пам'яті має свою власну шину, і процесори з'єднані з усіма шинами, маючи доступ по ним до будь-якого з банків пам'яті. Таке з'єднання більш складне, але воно дозволяє процесорам звертатися до загальної пам'яті одночасно. Це дозволяє збільшити кількість процесорів в системі до 8-16 без помітного зниження загальної продуктивності. Прикладом таких SMP-машин є багатопроцесорні робочі станції RS / 6000.

SMP-машина з комутованим з'єднанням процесорів

Альтернативи SMP (NUMA, ASMP)[ред. | ред. код]

SMP — це лише один підхід до побудови багатопроцесорної машини; іншим підходом є NUMA, яка надає процесорам окремі банки пам'яті. Це дозволяє працювати з пам'яттю паралельно, та може значно підвищити її пропускну здатність, у разі коли дані прив'язані до конкретного процесу (а отже і процесору). З другого боку, NUMA підвищує вартість переміщення даних між процесорами, значить і балансування завантаження обходиться дорожче. Переваги NUMA обмежені специфічним колом завдань, в основному серверами, де дані часто тісно прив'язані до конкретних задач або користувачів.

Іншими підходами є асиметрична мультипроцесування (ASMP), в якому окремі спеціалізовані процесори використовуються для конкретних завдань, та кластерна мультипроцесорність (Beowulf), в якому не вся пам'ять доступна всім процесорам. Такі підходи не часто застосовуються (хоча високопродуктивні 3D чипсети в сучасних відеокартах можуть розглядатися як форма асиметричної мультипроцесорності), у той час як кластерні системи широко застосовуються при побудові дуже великих суперкомп'ютерів.

SMP — лише один варіант побудови багатопроцесорної машини. Інша концепція — NUMA, яка надає процесорам окремі банки пам'яті. Це дозволяє процесорам працювати з пам'яттю паралельно, і це може значно підвищити пропускну здатність пам'яті в разі коли дані прив'язані до конкретного процесу (а, отже, і процесору). З іншого боку, NUMA підвищує вартість переміщення даних між процесорами, значить, і балансування завантаження обходиться дорожче. Переваги NUMA обмежені специфічним колом завдань, в основному серверами, де дані часто жорстко прив'язані до конкретних завдань або користувачів.

Інша концепція — асиметричне мультипроцесорування (ASMP), в якому окремі спеціалізовані процесори використовуються для конкретних завдань, і кластерна мультипроцесорність (Beowulf), в якій не вся пам'ять доступна всім процесорам. Такі підходи нечасто використовуються (хоча високопродуктивні 3D-чипсети в сучасних відеокартах можуть розглядатися як форма асиметричної мультипроцесорності), в той час як кластерні системи широко застосовуються при побудові дуже великих суперкомп'ютерів.

Переваги та недоліки[ред. | ред. код]

Системи SMP часто застосовується в науці, промисловості, бізнесі, де програмне забезпечення спеціально розробляється для багатопотокового виконання. У той же час, більшість користувацьких продуктів, таких як текстові редактори та комп'ютерні ігри написані так, що вони не можуть отримати високий приріст продуктивності від SMP-систем. У випадку ігор це найчастіше пов'язане з тим, що оптимізація програми під SMP-системи призведе до втрати продуктивності при роботі на однопроцесорних системах, які займають велику частину ринку. У силу природи різних методів програмування, для максимальної продуктивності будуть потрібні окремі проекти для підтримки одного процесора та SMP-систем. І все ж програми, запущені на SMP-системах, одержують певний приріст продуктивності, навіть якщо вони були написані для однопроцесорних систем. Це пов'язано з тим, що апаратні переривання, зазвичай припиняють виконання програми для їх обробки ядром, можуть оброблятися на вільному процесорі. Ефект у більшості програм виявляється не стільки в прирості продуктивності, скільки у відчутті, що програма виконується більш плавно. У деяких додатках, зокрема програмних компіляторах і деяких проектах розподілених обчислень, підвищення продуктивності буде майже прямо пропорційним числу додаткових процесорів.

Підтримка SMP повинна бути вбудована в операційну систему. Інакше додаткові процесори будуть залишатися не завантаженими і система буде працювати як однопроцесорна.

SMP — найпростіший і економічно вигідний спосіб масштабування обчислювальної системи: шляхом нарощування числа процесорів. Також просте і програмування: за допомогою потоків і супутніх механізмів обміну даними між ними (семафори тощо) через загальні змінні в пам'яті.

Вихід з ладу одного процесора призводить до некоректної роботи всієї системи і вимагає перезавантаження всієї системи для відключення несправного процесора.

Обмеження кількості процесорів[ред. | ред. код]

При збільшенні кількості процесорів помітно збільшується вимога до смуги пропускання шини пам'яті. Це накладає обмеження на кількість процесорів в SMP-архітектурі. Сучасні конструкції дозволяють розмістити до чотирьох процесорів на одній системній платі.

Проблема когерентності кеш-пам'яті[ред. | ред. код]

Проблема, про яку йде мова, виникає через те, що значення елементу даних у пам'яті, що зберігається в двох різних процесорах, доступне цим процесорам тільки через їх власні Кеші. Якщо процесор змінить значення елементу даних у своєму кеші, то при спробі виведення даних з пам'яті, буде отримано старе значення. Навпаки, якщо підсистема вводу/виводу вводить в комірку основної пам'яті нове значення, в кеш-пам'яті процесора, як і раніше залишається старе.

Обмеження на кількість процесорів[ред. | ред. код]

При збільшенні числа процесорів помітно збільшується вимога до смуги пропускання шини пам'яті. Це накладає обмеження на кількість процесорів в SMP архітектурі. Сучасні SMP-системи дозволяють ефективно працювати при 16 процесорах.

Проблема когерентності кеш-пам'яті[ред. | ред. код]

Кожен сучасний процесор обладнаний багаторівневою кеш-пам'яттю для більш швидкої вибірки даних і інструкцій з основної пам'яті, яка працює повільніше, ніж процесор. У багатопроцесорній системі наявність кеш-пам'яті у процесорів знижує навантаження на загальну шину або на комутоване з'єднання, що дуже сприятливо позначається на загальній продуктивності системи. Але, так як кожен процесор обладнаний своєю індивідуальною кеш-пам'яттю, виникає небезпека, що в кеш-пам'ять одного процесора потрапить значення змінної відмінне від того, що зберігається в основній пам'яті і в кеш-пам'яті другого процесора. Уявімо, що процесор змінює значення змінної в своєму кеші, а інший процесор запрошує цю змінну з основної пам'яті. І він отримає старе значення змінної. Або, наприклад, підсистема вводу-виводу записує в основну пам'ять нове значення змінної, а в кеш-пам'яті процесора і раніше залишається старе. Вирішення цієї проблеми покладено на протокол узгодження кешів (cache coherence protocol), який покликаний забезпечити узгодженість («когерентність») кешів всіх процесорів і основної пам'яті без втрати загальної продуктивності.[1].

Підтримка операційної системи[ред. | ред. код]

Підтримка SMP повинна бути вбудована в операційну систему, інакше додаткові процесори не будуть діяти, і система буде працювати як однопроцесорна. Більшість сучасних операційних систем підтримує симетричну мультипроцесорність, але в різному ступені.

Підтримка багатопроцесорності в ОС Linux була додана в версії ядра 2.0 і вдосконалена в версії 2.6. ОС Windows NT спочатку створювалася з підтримкою багатопроцесорності. Але ось Windows 9x не підтримували SMP до виходу Windows XP, що стало розвитком Windows 2000, тобто гілки Windows NT.

Див. також[ред. | ред. код]

Примітки[ред. | ред. код]

Література[ред. | ред. код]

  • Charles Severance, Kevin Dowd. High Performance Computing (RISC Architectures, Optimization & Benchmarks), 2nd Edition. — O'Reilly Media, 1998. — 466 p. — ISBN 156592312X.

Посилання[ред. | ред. код]