Теорія операційної системи

:: Меню ::

Головна
Представлення даних в обчислювальних системах
Машинні мови
Завантаження програм
Управління оперативною пам'яттю
Сегментна і сторінкова віртуальна пам'ять
Комп'ютер і зовнішні події
Паралелізм з точки зору програміста
Реалізація багатозадачності на однопроцесорних комп'ютерах  
Зовнішні пристрої
Драйвери зовнішніх пристроїв
Файлові системи
Безпека
Огляд архітектури сучасних ОС

:: Друзі ::

Карта сайту
 

:: Статистика ::

 

 

 

 

 

На tomsk.ru проверка автомобиля по вин коду.

Багатопроцесорна архітектура

Як вже говорилося, відносно великі накладні витрати, пов'язані з обробкою переривань, нерідко роблять доцільним включення в систему додаткових процесорів. Є і інші аргументи на користь створення багатопроцесорних обчислювальних систем.
Одним з аргументів є підвищення надійності обчислювальної системи за допомогою багатократного резервування. Якщо один з процесорів багатопроцесорної системи відмовляє, система може перерозподілити завантаження між тими, що залишилися. Для комп'ютерів перших поколінь, в яких напрацювання апаратури процесора на відмову було відносно невелике, підвищення надійності в такий спосіб часто виявлялося доцільним, особливо в додатках, що вимагали цілодобової доступності.

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

Іншим аргументом на користь включення в систему додаткових процесорів є той факт, що алгоритми, використовувані для вирішення багатьох прикладних завдань, нерідко піддаються розпаралелюванню : розділенню роботи між декількома більш менш незалежно працюючими процесорами. Залежно від алгоритму (і, побічно, від природи вирішуваного завдання) рівень досяжного паралелізму може сильно розрізнятися. Відношення продуктивності системи до кількості процесорів і продуктивності однопроцесорної машини називають коефіцієнтом масштабування. Для різних завдань, алгоритмів, ОС і апаратної архітектури цей коефіцієнт різний, але завжди менше одиниці і завжди убуває у міру збільшення кількості процесорів.
Деякі завдання, наприклад, побудова фотореалістичних зображень методом трасування променів, злом шифрів повним перебором простору ключів [www.distributed.net] або пошук позаземних цивілізацій [www.seti.org] піддаються масштабуванню дуже добре: можна включити в роботу десятки і сотні тисяч процесорів, передаючи при цьому між ними відносно малі об'єми даних. У цих випадках часто виявляється Доцільно навіть не встановлювати процесори в одну машину, а використовувати безліч окремих комп'ютерів, сполучених відносно низькошвидкісними каналами передачі даних. Це дозволяє задіювати процесори, підключені до мережі (наприклад, до Інтернет) і не зайняті в даний момент іншою корисною роботою.
Інші завдання, наприклад, робота з базами даних, піддаються розпаралелюванню в набагато меншій мірі, проте і в цьому випадку обробка запитів може бути розподілена між декількома паралельно працюючими процесорами. Кількість процесорів в серверах СУБД зазвичай вимірюється декількома штуками, вони підключені до обший шині, спільно використовують одну і ту ж оперативну пам'ять і зовнішні пристрої.
Многопроцессорность в таких системах зазвичай застосовується лише для ц0. вишенія продуктивності, але очевидно, що її ж можна використовувати і для підвищення надійності: коли функціонують всі процесори, система працює швидко, а з частиною процесорів працює хоч щось, хай і повільніше.
Деякі багатопроцесорні системи підтримують виконання на них процесорах різних ОС — так, на IBM z90 частину процесорів M виконувати Linux, а останні — z/os. У такій конфігурації, що працює під управлінням Linux Web-сервер може взаємодіяти з тим, що працює під z/os сервером транзакцій через спільну фізичну пам'ять. Багатопроцесорні сервери Sun Fire можуть виконувати декілька копій Solaris.
Проміжне положення між цими крайнощами займають спеціалізовані масивно-паралельні комп'ютери використовувані для таких завдань, як чисельне вирішення еліптичних диференціальних рівнянь і чисельне ж моделювання методом кінцевих елементів в геофизичних, метеорологічних і деяких інших застосуваннях.
Сучасні суперкомп'ютери цього типа (IBM „Sp6000, Cray Origin) складаються з десятків, сотень, а інколи і тисяч окремих процесорних модулів (кожен модуль є відносно самостійною обчислювальною системою, зазвичай багатопроцесорною, з власною пам'яттю і, нерідко, з власною дисковою підсистемою), сполучених між собою високошвидкісними каналами. Саме до цього типа відносився шаховий суперкомп'ютер Deep Blue, що виграв в 1997 році матч у чемпіона світу по шахах Гарі Каспарова [www.research.ibm.com].
Багатопроцесорні системи різного роду набувають все більш і більш широкого поширення. Якщо продуктивність окремого процесора подвоюється в середньому кожні півтора роки ("закон Мура" [www.intel.com Moore]), то продуктивність багатопроцесорних систем подвоюється десять кожного місяця [www.sun.com 2001-05].
На практиці, навіть добре алгоритми, що розпаралелюють, практично ніколи не забезпечують лінійного зростання продуктивності із зростанням числа процесорів. Це обумовлено, перш за все, витратами обчислювальних ресурсів на обмін інформацією між паралельно виконуваними потоками. На перший погляд, найпростіше здійснюється такий обмін в системах з процесорами, що мають спільну пам'ять, тобто власне багатопроцесорних комп'ютерах.
Насправді, оперативна пам'ять має кінцеву, і невелику в порівнянні з циклом центрального процесора, швидкість доступу. Навіть один сучасний процесор легко може зайняти всі цикли доступу ОЗУ, а декілька процесорів непродуктивно витрачатимуть час, чекаючи доступу до пам'яті. Багатопортове ОЗУ могло б вирішити цю проблему, але така пам'ять набагато дорожче звичайною, однопортовою, і застосовується лише в особливих випадках і в невеликих об'ємах.
Одне з основних рішень, що дозволяють погоджувати швидкості ЦПУ і ОЗУ, — це постачання процесорів високошвидкісними кешами команд і даних. Такі кеші нерідко роблять не лише для центральних процесорів, але і для адаптерів шин зовнішніх пристроїв. Це значно зменшує кількість звернень до ОЗУ, проте заважає рішенню задачі, ради якої ми і об'єднували процесори в єдину систему: обміну даними між потоками, що виконуються на різних процесорах (мал. 6.2).



Мал. 6.2. Некогерентний кеш

Більшість контроллерів кешів сучасних процесорів надають засоби забезпечення когерентності кеша — синхронізацію вмісту кеш-пам'ятей декількох процесорів без обов'язкового запису даних в основне ОЗУ.
Суперскалярні процесори, в яких порядок реального виконання операцій може не збігатися з порядком, в якому відповідні команди слідують в програмі, додатково посилюють проблему.

Порядок доступу до пам'яті в SPARC
Сучасні процесори надають можливість управляти порядком доступу команд до пам'яті. Наприклад, в мікропроцесорів Sparcvq [www.sparc.com v9] визначено три режими роботи з пам'яттю (моделі пам'яті), перемикані бітами в статусному регістрі процесора.
Вільний доступ до пам'яті (RMO, Relaxed Memory Order), коли процесор використовує всі засоби кешування і динамічного переупорядковування команд, і не намагається забезпечити жодних вимог до впорядкованості вибор-ки і збереженню операндів в основній пам'яті.
Частково впорядкований доступ (PSO, Partial Store Order), коли процесор як і раніше використовує і кешування, і переупорядковування, але в потоці команд можуть зустрічатися команди MEMBAR. Зустрівши таку команду, сміття зобов'язане гарантувати, що всі операції читання і запису з пам'яті, зако дірованниє до цієї команди, будуть виконані (в даному випадку під виконання мається на увазі перенесення результатів всіх операцій з кеша в ОЗУ), д0 того, як процесор спробує провести будь-яку з операцій доступу до пам'яті, наступних за MEMBAR.
Повністю впорядкований доступ (TSO, Total Store Order), коли процесор гарантує, що операції доступу до пам'яті звертатимуться до основного ОЗА в точності в тому порядку, в якому закодовані.
Кожен наступний режим підвищує упевненість програміста в тому, що його програма прочитає з пам'яті саме те, що туди записав інший процесор, але одночасно приводить і до падіння продуктивності. Найбільший програш забезпечує наївна реалізація режиму TSO, коли ми просто вимикаємо і динамічне переупорядковування команд, і кешування даних (кешування коди можна залишити, якщо лише ми не намагаємося виконати код, який піддається паралельній модифікації іншим задатчиком шини).

Іншим вузьким местомом багатопроцесорних систем є системна шина. Сучасні комп'ютери спільного призначення, як правило, мають шинну архітектуру тобто і процесори, і ОЗУ, і адаптери шин зовнішніх пристроїв (PCI і т. д.) сполучені спільною магістраллю даних, системною шиною або системною магістраллю. У кожен момент магістраль може займати лише пара пристроїв задатчик і ведений (мал. 6.3). Зазвичай, задатчиком служить процесор — як центральний, так і канальний — або контроллер ПДП, а веденим може бути пам'ять або периферійний пристрій. При синхронізації вмісту кешів процесорний модуль також може опинитися в ролі веденого.

Мал. 6.3. Шинна архітектура

Доступ до шини регулюється арбітром шини. Практично застосовуються дві основні стратегії арбітражу — пріоритетнаколи пристрій, що має високий пріоритет, завжди дістає доступ, у тому числі і за наявності запитів від низькопріоритетних пристроїв, і справедлива (fair) коли арбітр гарантує всім пристроям доступ до шини протягом деякої кількості циклів.
Системи шинної архітектури прості в проектуванні і реалізації, до них легко підключати нові пристрої і типів пристроїв, тому така архітектура набула широкого поширення. Проте, особливо в багатопроцесорних системах, шина часто є одним з основних обмежувачів продуктивності. Підвищення пропускної спроможності шини частенько можливо, але приводить до підвищення обший вартості системи.
Втім, при великій кількості вузлів проблеми виникають і в систем з настільки високошвидкісною шиною, як Firepane. Крім того, у міру зростання фізичних розмірів системи, стає необхідно брати до уваги фізичну швидкість передачі сигналів — як сигналів самої магістралі, так і запитів до арбітра шини і його відповідей. Тому шинна топологія з'єднань при багатьох десятках і сотнях вузлів виявляється .непріємлема, і застосовуються складніші топології.

Системи NUMA-Q
Багатопроцесорні сервери IBM NUMA-Q складаються з окремих процесорних модулів. Кожен модуль має власну оперативну пам'ять і чотири процесори х86. Модулі називаються quad (четвірки) (мал. 6.4).
Четвірки сполучені високошвидкісними каналами Iq-link з центральним комутатором. Заміна спільної шини на зіркоподібну топологію з центральним комутатором дозволяє вирішити проблеми арбітражу доступу до шини, зокрема, усунути затримки при запиті до арбітра шини і чеканні його відповіді запрошуючому пристрою. NUMA-системы фірми IBM можуть містити до 16 четвірок, тобто до 64 процесорів.

Архітектура дозволяє також включати в ці системи процесори з архітектурою, відмінною від х86, наприклад Rs/6000 і System/390, дозволяючи, таким чином, створити в межах однієї машини гетерогенну мережу з надвисокошвидкісними каналами зв'язку.
При більшому числі модулів застосовуються ще складніші топології, наприклад гіперкубічна. У таких системах кожен вузол зазвичай також містить декілька процесорів і власну оперативну пам'ять (мал. 6.5).
При гіперкубічному з'єднанні, кількість вузлів N пропорційно міри двійки, а кожен вузол має log2N з'єднань з іншими вузлами. Кожен вузол здатний не лише обмінюватися повідомленнями з безпосередніми сусідами по топології, але і маршрутизувати повідомлення між вузлами, що не мають прямого з'єднання. Щонайдовша дорога між вузлами, що знаходяться в протилежних вершинах куба, має довжину log2N і не є єдиним (мал. 6.6). Завдяки множинності доріг, маршрутизатори можуть вибирати для кожного повідомлення найменш завантажену в даний момент дорогу або обходити вузли, що відмовили.

Мал. 6.4. NUMA-Q з трьома чотирипроцесорними модулями

Масивно паралельні системи Cray/sgi Origin
Вузли суперкомп'ютерів сімейства Cray/sgi Origin сполучені в гіперкуб каналами з пропускною спроможністю 1 Гбайт/с. Адаптери з'єднань забезпечують не просто обмін даними, а прозорий (хоча і з падінням продуктивності) доступ процесорів кожного з вузлів до оперативної пам'яті інших вузлів і забезпечення когерентності процесорних кешів.

Мал. 6.5. Гіперкуби з 4, 8 і 16-у вершинами

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

  • СОМА (Cache Only Memory Architecture) — архітектура пам'яті, при якій робота з нею відбувається як з кешем. Система переносить сторінки пам'яті, з якою даний процесорний модуль працює частіше за інших, в його локальну пам'ять.

Мал. 6.6. Щонайдовша дорога в гіперкубі

  • CC-NUMA (Cache-coherent Non-uniform Memory Access неоднорідний доступ до пам'яті із забезпеченням когерентності кешів). У цій архітектурі адаптери міжмодульних з'єднань забезпечуються власною кешпамятью, яка використовується при зверненнях до ОЗУ інших модулів. Основна діяльність центрального комутатора і каналів зв'язку полягає в підтримці когерентності цих кешів [www.ibm.com NUMA-Q].

Зрозуміло, що обидві ця архітектура не вирішує в корені проблеми неоднорідності доступу: для обох можна побудувати таку послідовність міжпроцесорних взаємодій, яка промоєт1 всі кеші і перенавантажуватиме міжмодульні зв'язки, а в разі СОМА приведе до постійного перекачування сторінок пам'яті між модулями. Те ж саме, втім, справедливо і для симетричних багатопроцесорних систем із спільною шиною.
Як резюме можна лише підкреслити, що масштабованість (відношення продуктивності системи до кількості процесорів) багатопроцесорних систем визначається в першу чергу природою завдання і рівнем паралелізму, закладеним у використаний для вирішення цього завдання алгоритм. Різні типи багатопроцесорних систем і різні топології міжпроцесорних з'єднань придатні і оптимальні для різних завдань.
Промивання кеша— досить поширений термін. Це послідовність зверненні, яка набагато більше об'єму кеша і в якій немає жодного повторного звернення до однієї і тієї ж сторінки, або дуже мало таких зверненні.

 

:: Реклама ::

 

:: Посилання ::


 

 

 


Copyright © Kivik, 2017