ПЕРЕЛІК ДИСЦИПЛІН:
  • Адміністративне право
  • Арбітражний процес
  • Архітектура
  • Астрологія
  • Астрономія
  • Банківська справа
  • Безпека життєдіяльності
  • Біографії
  • Біологія
  • Біологія і хімія
  • Ботаніка та сільське гос-во
  • Бухгалтерський облік і аудит
  • Валютні відносини
  • Ветеринарія
  • Військова кафедра
  • Географія
  • Геодезія
  • Геологія
  • Етика
  • Держава і право
  • Цивільне право і процес
  • Діловодство
  • Гроші та кредит
  • Природничі науки
  • Журналістика
  • Екологія
  • Видавнича справа та поліграфія
  • Інвестиції
  • Іноземна мова
  • Інформатика
  • Інформатика, програмування
  • Юрист по наследству
  • Історичні особистості
  • Історія
  • Історія техніки
  • Кибернетика
  • Комунікації і зв'язок
  • Комп'ютерні науки
  • Косметологія
  • Короткий зміст творів
  • Криміналістика
  • Кримінологія
  • Криптология
  • Кулінарія
  • Культура і мистецтво
  • Культурологія
  • Російська література
  • Література і російська мова
  • Логіка
  • Логістика
  • Маркетинг
  • Математика
  • Медицина, здоров'я
  • Медичні науки
  • Міжнародне публічне право
  • Міжнародне приватне право
  • Міжнародні відносини
  • Менеджмент
  • Металургія
  • Москвоведение
  • Мовознавство
  • Музика
  • Муніципальне право
  • Податки, оподаткування
  •  
    Бесплатные рефераты
     

     

     

     

     

     

         
     
    Архітектура і продуктивність серверних ЦП
         

     

    Інформатика, програмування

    Архітектура і продуктивність серверних ЦП

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

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

    Загальна архітектура ЦП

    Функціональні пристрої ЦП

    Будь-який ЦП незалежно від його призначення має у своєму розпорядженні поруч функціональних пристроїв (ФУ): блоками цілочисельних обчислень (Integer Execution Unit, E-box, арифметико-логічний пристрій), обробки адрес (Address Translation Unit, A-box), контролером системної шини (System Bus Controller, B-box), декодером команд (Instruction Decoding Unit, I-box). Для проведення обчислень і зберігання проміжних результатів використовується так званий файл регістрів (їх може бути декілька), що складається з фіксованої кількості записів певної довжини (регістрів). Практично у всіх сучасних ЦП реалізовані та засоби пророкування напрямку умовних переходів. З початку 1990-х рр.. загальноприйнятої стала практика впровадження в ядро ЦП блоку речових обчислень (Floating-Point Unit, F-box). Якщо дизайн певної апаратної платформи передбачав використання кеш-пам'яті з прямим доступом, то в ЦП вводився блок взаємодії з кеш-пам'яттю (Cache Memory Interface Unit, C-box). У сучасних ЦП нерідко також реалізовані контролери пам'яті, периферійних шин і т. д.

    Набір команд ЦП

    В залежно від подання команд процесори прийнято ділити на RISC (Reduced Instruction Set Computing, обчислення за допомогою обмеженого набору команд) і CISC (Complex Instruction Set Computing, обчислення за допомогою розширеного набору команд). В даний час «чистокровних» представників того чи іншого сімейства зустріти все важче - у більшості ЦП є риси обох архітектур.

    Архітектура RISC з'явилася як спроба позбутися від недоліків, властивих CISC-процесорів. У 1970-х рр.. були проведені дослідження, які показали, що близько 20% всіх команд CISC-процесора займають при виконанні близько 80% всього процесорного часу, а інші 80% команд - що залишилися 20%, т. з. в наявності явний дисбаланс - деякі команди залишаються практично незатребуваними. У той же час кожна додаткова команда в наборі збільшує вартість ЦП, оскільки для її виконання в процесорі повинні бути відповідні виконавчі блоки. Виникла ідея звести набір команд до мінімуму, зафіксувати їх довжину для зручності декодування, а безпосередній доступ до пам'яті (завантаження даних в регістри ЦП з пам'яті та копіювання з регістрів на згадку) дозволити лише деяким з них. Це дозволило отримати компактне ядро ЦП, здатне працювати на більш високих частотах при незмінних проектних нормах.

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

    ЦП архітектури х86: CISC або RISC?

    Процесори архітектури х86 спочатку мали CISC-архітектуру, але з часом стали набувати властивостей RISC. Ядра цих ЦП зазнали кардинальних змін: вони стали проектуватися багато в чому за принципами RISC, але в той же час для збереження сумісності з існуючим програмним забезпеченням в квартирі в ЦП все так само робили звичайні команди CISC. Для того щоб така модель ЦП виявилася працездатною, потрібне обов'язкове внутрішнє перетворення CISC-команд в одну або кілька RISC-команд, що безпосередньо виконуються ядром ЦП.

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

    Першим з ЦП архітектури х86, спроектованим з RISC-ядром, став вже забутий Nx586 компанії NexGen, представлений у березні 1994 р. У листопаді 1995 р. з'явився Pentium Pro компанії Intel, а в березні 1996-го - AMD К5, побудований на базі модернізованої фірмової архітектури 29К.

    CISC-процесори архітектури х86 ще якийсь час випускалися, переважно Intel (Pentium і Pentium MMX) і Cyrix (6x86 і 6х86МХ/6х86МП), але їхні дні були пораховані. У наступні роки архітектура Intel P6, в основу якої ліг вищезгаданий Pentium Pro, продовжувала екстенсивно розвиватися, а пізніше її змінила архітектура NetBurst.

    В квітні 1997 р. AMD випустила Кб, заснований на RISC-ядрі Nx686 (NexGen була поглинена AMD на початку 1996 р.), і розвивала цей модельний ряд до 2000 р., незважаючи на відставання у продуктивності від архітектури Intel P6. У квітні 1999 AMD представила новий ЦП К7, що отримав офіційну назву Athlon, і успішно продовжує розвивати його архітектуру і до цього дня - ядро К8 (Athlon 64, Athlon 64 FX, Opteron) являє собою еволюційний розвиток ядра К7. Підводячи підсумки вищесказаного, можна зробити висновок, що ЦП архітектури х86 перестали бути CISC, але і RISC в повному розумінні не стали (подібний перехід не забезпечить збереження зворотної сумісності з існуючим програмним забезпеченням), тому їх можна класифікувати як псевдо-RISC.

    Концепція VLIW

    Цікава різновид підходу RISC - VLIW концепція (Very Long Instruction Word), відома також як EPIC (Explicitly Parallel Instruction Computing, обчислення з явною паралельного). Її суть - ефективний розподіл навантаження методом «Примітивний ЦП - розумний компілятор»: ЦП має в своєму розпорядженні великою кількістю конвеєрів функціональних пристроїв, що працюють паралельно, а всю роботу по формуванню ефективного потоку команд виконує компілятор. Відповідно, алгоритми та блоки позачергового виконання (out-of-order execution) не використовуються зовсім. Декодер ЦП проводить вибірку з потоку «зв'язок» команд, а планувальник направляє їх у черзі на потрібні функціональні пристрої.

    Найбільш відомі представники цього підходу - процесори Crusoe і Transmeta Efficeon, а також Intel Itanium та Itanium 2.

    Кеш-пам'ять в ЦП

    Статична і динамічна пам'ять

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

    Одна осередок статичної пам'яті складається з шести транзисторів і двох резисторів (для техпроцесів з проектними нормами до 0,5 мкм могли бути використані тільки чотири транзистора на одну клітинку, з додатковим шаром полікремнія і з більш жорсткими обмеженнями за максимальною тактовою частотою), у той час як аналогічна структура динамічної пам'яті складається з одного транзистора і одного конденсатора. Швидкодія статичної пам'яті набагато вище (ємність, використовувана в динамічній пам'яті, має певну швидкість зарядки до необхідного рівня, що визначає «частотний стеля»), але із-за більшого кількості складових елементів вона істотно дорожче у виробництві та відрізняється більш високим енергоспоживанням. Бітове значення клітинки статичної пам'яті характеризується станом затворів транзисторів, а динамічної - рівнем заряду конденсатора. Так як конденсатори мають властивість з часом розряджатися, то для підтримки їх стану потрібно регулярна перезарядка (для сучасних мікросхем динамічної пам'яті -- приблизно 15 разів на секунду). Крім того, при операції читання з комірки динамічної пам'яті конденсатор розряджається, тобто осередок втрачає свій початковий заряд, а отже повинна бути перезаряджаючи.

    Очевидно, що статична пам'ять використовується там, де потрібна максимальна швидкодія (регістри ЦП, кеш-пам'ять, локальна пам'ять сигнального процесора), а динамічна - там, де пріоритетом є об'єм, а не швидкість читання-запису (оперативна пам'ять, буфери периферійних пристроїв).

    Причини впровадження кеш-пам'яті

    Явна необхідність у кеш-пам'яті при проектуванні масових ЦП проявилася на початку 1990-х рр.., Коли тактові частоти ЦП значно перевищили частоти системних шин, і, зокрема, шини пам'яті. В даний час частоти серверних ЦП досягають майже 4 ГГц, а оперативної пам'яті, масово застосовуваної в серверах, - тільки 400 МГц (200 МГц з подвоєнням завдяки передачі по обох фронтах сигналу). У цій ситуації при прямому зверненні до пам'яті функціональні пристрої ЦП значну частину часу простоюють, чекаючи доставки даних. В якійсь мірі проблеми швидкодії оперативної пам'яті можуть бути вирішені збільшенням розрядності шини пам'яті, але навіть в серверах молодших класів нерідко зустрічається 8-16 гнізд для модулів пам'яті, тому таке рішення ускладнює дизайн системної плати. Отримати ж 256 - або навіть 512-біт шину до розташованої всередині кристала ЦП кеш-пам'яті порівняно нескладно. Таким чином, ефективної альтернативи кеш-пам'яті в сучасних високопродуктивних системах не існує.

    Ієрархічна модель кеш-пам'яті

    Як правило, кеш-пам'ять має багаторівневу архітектуру. Наприклад, в комп'ютері з 32 Кбайт внутрішньої (в ядрі ЦП) і 1 Мбайт зовнішньої (в корпусі ЦП або на системній платі) кеш-пам'яті перше буде вважатися кеш-пам'яті, 1-го рівня (L1), а другий - кеш-пам'яті 2-го рівня (L2). В сучасних серверних системах кількість рівнів кеш-пам'яті може доходити до чотирьох, хоча найбільш часто використовується дво-чи трирівнева схема.

    В деяких процесорних архітектур кеш-пам'ять 1-го рівня розділена на кеш команд (Irstruction Cache, I-cache) і кеш даних (Data Cache, D-cache), причому необов'язково однакових розмірів. З точки зору схемотехніки простіше і дешевше проектувати роздільні I-cache і D-cache: вибірку команд проводить 1-BОХ, а вибірку даних - Е-box і F-box, хоча в обох випадках задіюються А-box і З-box. Всі ці блоки великі, і забезпечити їм одночасний і швидкий доступ до одному кешу проблематично. Крім того, це неминуче вимагало б збільшення кількості портів доступу, що також ускладнює завдання проектування.

    Так як I-cache і D-cache повинні забезпечувати дуже низькі затримки при доступі (це справедливо для будь-якого кеша L1), доводиться жертвувати їх обсягом - зазвичай він складає від 16 до 32 Кбайт. Адже чим менше розмір кеша, тим легше добитися низьких затримок при доступі.

    Кеш-пам'ять 2-го рівня, як правило, уніфікована, тобто може містити як команди, так і дані. Якщо вона вбудована в ядро ЦП, то говорять про S-cache (Secondary Cache, вторинний кеш), в іншому випадку - про B-cache (Backup Cache, резервний кеш). У сучасних серверних ЦП обсяг S-cache становить від одного до декількох мегабайт, a B-cache - до 64 Мбайт. Якщо дизайн ЦП передбачає наявність вбудованою кеш-пам'яті 3-го рівня, то її іменують T-cache (Ternary Cache, третинний кеш). Як правило, кожен наступний рівень кеш-пам'яті повільніше, але більше за попередній за обсягом. Якщо в системі присутній B-cache (як останній рівень моделі кеш-пам'яті), то він може контролюватися як ЦП, так і набором системної логіки.

    Якщо в момент виконання певної команди в регістрах не виявиться даних для неї, то вони будуть затребувані з найближчого рівня кеш-пам'яті, тобто з D-cache. У разі їх відсутності у D-Cache запит направляється в S-cache і т. д. У гіршому випадку дані будуть доставлені безпосередньо з пам'яті. Втім, можливий і ще більш сумний варіант, коли підсистема управління віртуальною пам'яттю операційної системи (ОС) встигає витіснити їх у файл підкачки на жорсткий диск. У випадку доставки з оперативної пам'яті втрати часу на отримання потрібних даних можуть складати від десятків до сотень тактів ЦП, а в разі знаходження даних на жорсткому диску мова вже може йти про мільйони тактів.

    асоціативність кеш-пам'яті

    Одна з фундаментальних характеристик кеш-пам'яті - рівень асоціативності -- відображає її логічну сегментацію. Справа в тому, що послідовний перебір всіх рядків кеша в пошуках необхідних даних зажадав б десятків тактів і звів би нанівець весь виграш від використання вбудованої в ЦП пам'яті. Тому комірки ОЗУ жорстко прив'язуються до рядків кеш-пам'яті (у кожному рядку можуть бути дані з фіксованого набору адрес), що значно скорочує час пошуку. З кожною клітинкою ОЗУ може бути пов'язано більше одного рядка кеш-пам'яті: наприклад, n-канальна асоціативність (n-way set associative) означає, що інформація по деякому адресою оперативної пам'яті може зберігатися в n місць кеш-пам'яті.

    Вибір місця може проводитися за різними алгоритмами, серед яких найчастіше використовуються принципи заміщення LRU (Least Recently Used, заміщається запис, запитана в останній раз найбільш давно) і LFU (Least Frequently Used, запис, найменш часто запитувана), хоча існують і модифікації цих принципів. Наприклад, повністю асоціативна кешпамять (fully associative), в якій інформація, що знаходиться за довільним адресою в оперативній пам'яті, може бути розміщена у довільній рядку. Інший варіант - пряме відображення (direct mapping), при якому інформація, яка знаходиться за довільним адресою в оперативній пам'яті, може бути розміщена тільки в одному місці кеш-пам'яті. Природно, цей варіант забезпечує найбільшу швидкодію, тому що при перевірці наявності інформації контролеру доведеться «заглянути» лише в один рядок кеша, але й найменш ефективний, оскільки при записі контролер не буде вибирати «оптимальне» місце. При однаковому обсязі кешу схема з повною асоціативністю буде найменш швидкою, але найбільш ефективною.

    Повністю асоціативний кеш зустрічається на практиці, але, як правило, у нього дуже невеликий обсяг. Наприклад, у ЦП Cyrix 6x86 використовувалося 256 байт такого кешу для команд перед уніфікованим 16-або 64-Кбайт кешем L1. Часто полноассоціатівную схему застосовують при проектуванні TLB (про них буде розповімо нижче), кешей адрес переходів, буферів читання-запису і т. д. Як правило, рівні асоціативності I-cache і D-cache досить низькі (до чотирьох каналів) - їх збільшення недоцільно, оскільки призводить до збільшення затримок доступу і в підсумку негативно позначається на продуктивності. У як деякої компенсації збільшують асоціативність S-cache (зазвичай до 16 каналів), оскільки затримки при доступі до цього кешу не важливі. Наприклад, згідно з результатами досліджень часто використовуваних цілочисельних завдань, у Intel Pentium III 16 Кбайт чотирьохканального D-cache було достатньо для покриття близько 93% запитів, а 16-Кбайт чотирьохканального I-cache - 99% запитів.

    Розмір рядки і тега кеш-пам'яті

    Важлива характеристика кеш-пам'яті - розмір рядка. Як правило, на один рядок покладається один запис адреси (так званий тег), що вказує, якому адресою в оперативній пам'яті відповідає дана лінія. Очевидно, що нумерація окремих байтів недоцільна, оскільки в цьому випадку обсяг слу?? ебной інформації в кеші в кілька разів перевищить обсяг самих даних. Тому один тег зазвичай покладається на один рядок, розмір якої зазвичай 32 або 64 байта (реально існуючий максимум 1024 байти), і еквівалентний чотирьом (іноді восьми) розрядність системної шини даних. Крім того, кожен рядок кеш-пам'яті супроводжується деякою інформацією для забезпечення відмовостійкості: одним або декількома бітами контролю парності (parity) або вісьма і більш байтами виявлення і корекції помилок (ЕСС, Error Checking and Correcting), хоча в масових рішеннях часто не використовують ні того, ні іншого.

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

    Smg - Розмір одного тега кеш-пам'яті, в бітах; Smem - максимальний обсяг Кешована оперативної пам'яті, в байтах; Scache - об'єм кеш-пам'яті, в байтах; А -- асоціативність кеш-пам'яті, в каналах.

    Звідси випливає, що для системи з 1-Гбайт оперативною пам'яттю і 1-Мбайт кеш-пам'яті з двоканальної асоціативністю буде потрібно 11 біт для кожного тега. Примітно, що власне розмір рядка кеш-пам'яті ніяк не впливає на розмір тега, але обернено пропорційно впливає на кількість тегів. Слід розуміти, що розмір рядка кеш-пам'яті не має сенсу робити менше розрядності системної шини даних, але багаторазове збільшення розміру приведе до надмірного засмічення кеш-пам'яті непотрібною інформацією і зайвого навантаження на системну шину та шину пам'яті. Крім того, максимально Кешована обсяг кеш-пам'яті не зобов'язаний відповідати максимально можливому встановлюється об'єму оперативної пам'яті в системі. Якщо виникне ситуація, коли оперативної пам'яті виявиться більше, ніж може бути кешовані, то в кеш-пам'яті буде бути присутнім інформація тільки з нижнього сегменту оперативної пам'яті. Саме такою була ситуація з платформою Socket7/Super7. Набори мікросхем для цієї платформи дозволяли використовувати великі обсяги оперативної пам'яті (від 256 Мбайт до 1 Гбайт), у той час як Кешована обсяг часто був обмежений першими 64 Мбайт (мова йде про B-cache, що знаходиться на системній платі) через використання дешевих 8-біт мікросхем тегова SRAM (2 біта з яких резервувалося під покажчики дійсності і змінених рядків). Це призводило до відчутного падіння продуктивності.

    Яка інформація міститься в тегах кеш-пам'яті? Це інформація про адреси, але як можна точно відобразити розташування рядка кеш-пам'яті на всьому просторі Кешована обсягу оперативної пам'яті, використовуючи таке незначне кількість адресних бітів? Це поняття є фундаментальним у розумінні принципів функціонування кеш-пам'яті.

    Розглянемо попередній приклад, з 11-біт тегами. З огляду на логічне сегментування завдяки двоканальної асоціативності, можна розглядати дану кеш-пам'ять як що складається з двох незалежних сегментів по 512 Кбайт кожен. Уявімо оперативну пам'ять як що складається з «сторінок» по 512 Кбайт кожна - їх буде відповідно 2048 штук. Далі, log2 (2048) - 11 (підстава логарифма дорівнює 2, тому що можливі тільки два логічних стану кожного біта). Це означає, що фактично тег - не номер окремого рядка кеш-пам'яті, а номер «сторінки» пам'яті, на яку відображається та чи інша рядок. Іншими словами, в межах «Сторінки» зберігається пряме відповідність її «строк» з відповідними рядками кеш-пам'яті, тобто п-й рядок кеш-пам'яті відповідає п-й «рядку» даній «сторінки» оперативної пам'яті.

    Розглянемо механізм роботи кеш-пам'яті різних видів асоціативності. Так, існуючу абстрактна модель із вісьмома рядками кеш-пам'яті та 64 еквівалентними рядками оперативної пам'яті. Потрібно помістити в кеш рядок 9 оперативної пам'яті (зауважимо, що всі рядки нумеруються від нуля і порядку зростання). У моделі з прямим відображенням цей рядок може зайняти тільки одне місце: 9 mod 8 = 1 (обчислення залишку від ділення без остачі), тобто місце рядка 1. Якщо взяти модель з двухканалиюй асоціативністю, то цей рядок може зайняти одне з двох місць: 9 mod 4 = 1, тобто рядок 1 будь-якого каналу (сегмента). Полноассоціатівная модель надає свободу для розміщення, і даний рядок може зайняти місце будь-якої з восьми наявних. Іншими словами, фактично є 8 каналів, кожен з яких складається з 1 рядка.

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

    Типи підключення кеш-пам'яті

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

    Існує два основних способи підключення кеш-пам'яті до ЦП для читання: наскрізної і побічний (Look-Through і Look-Aside). Суть першого в тому, що за необхідності дані спочатку запрошуються у контролера кеш-пам'яті самого високого рівня, який перевіряє стан підключених тегів і повертає або потрібну інформацію, або негативну відповідь, і в цьому випадку запит перенаправляється в більш низький рівень ієрархії кеш-пам'яті або в оперативну пам'ять. При реалізації другого способу читання запит одночасно направляється як кеш-контролера найвищого рівня, так і іншим кеш-контролерів і контролера оперативної пам'яті. Нестача першого способу очевидна: при відсутності інформації в кеші високого рівня доводиться повторювати запит, і час простою ЦП збільшується. Недолік другого підходу - висока надмірність операцій і, як наслідок, «засмічення» внутрішніх шин ЦП і системної шини непотрібною інформацією. Логічно припустити, що якщо для кешей L1 оптимальна наскрізна схема, то для T-cache або B-cache побічна схема може виявитися більш вигідною. Для S-cache вибір неоднозначний.

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

    Існують два поширених способу запису в кеш: наскрізний (Write-Through) і зворотного (Write-Back) запису. У першому випадку інформація одночасно зберігається як у поточний, так і в більш низький рівень ієрархії кеш-пам'яті (або прямо в оперативну пам'ять за відсутності такого). У другому - дані зберігаються тільки в поточному рівні кеш-пам'яті, при цьому виникає ситуація, коли інформація в кеші і оперативної пам'яті розрізняється, причому остання стає застарілою. Для того щоб під час скидання кешу інформація не була необоротно загублена, до кожного рядка кеша додається «брудний» біт (dirty bit, інакше відомий як modified). Він потрібен для позначення того, чи відповідає інформація в кеші інформації в оперативній пам'яті, і чи варто її записати в пам'ять при скиданні кеша.

    Також слід згадати спосіб резервування запису (write allocation). Під час запису даних в оперативну пам'ять часто виникає ситуація, коли записуються дані можуть скоро знадобитися, і тоді їх доведеться досить довго довантажувати. Резервування запису дозволяє частково вирішити цю проблему: дані записуються не в оперативну пам'ять, а в кеш. Рядок кеша, замість якої записуються дані, повністю вивантажується в оперативну пам'ять. Так як знову записаних даних звичайно недостатньо для формування повної рядка кеша, з оперативної пам'яті запитується відсутня інформація. Коли вона отримана, новий рядок записується, і тег оновлюється. Певних переваг чи недоліків такий підхід не має - іноді це може дати незначний приріст продуктивності, але також і призвести до засмічення кешу непотрібною інформацією.

    TLB як різновид кеш-пам'яті

    Майже всі сучасні ЦП володіють TLB (Translation Look-aside Buffers, допоміжні буфера перетворення). Своїм існуванням вони зобов'язані тому факту, що ЦП в роботі використовують переважно віртуальні адреси оперативної пам'яті, у той час як контролери оперативної та кеш-пам'яті працюють переважно з реальними адресами. Для того щоб не обчислювати при кожному зверненні до пам'яті реальну адресу з віртуального, в ЦП присутні таблиці відповідності віртуальних адрес сторінок пам'яті реальним. Як правило, їх обсяг невеликий (від одиниць до сотень записів), але цього цілком достатньо, оскільки часто запитані дані або команди звичайно добре локалізуються в межах сторінки пам'яті розміром 4 або 8 Кбайт.

    Що ж відбувається, якщо запитуваної реальної адреси будь-якої сторінки не знаходиться в TLB? A-box ЦП відпрацьовує спеціальний виклик (exception trap), на який ОС повинна адекватно відреагувати, тобто провести пошук потрібної сторінки в своїх таблицях підсистеми віртуальної пам'яті. Якщо в процесі пошуку виявиться, що зазначена сторінка знаходиться у файлі або розділі підкачки, то вона повинна негайно бути звідти зчитана в оперативну пам'ять. У підсумку А-box ЦП отримає реальну адресу потрібної сторінки пам'яті і процес піде своїм шляхом.

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

    багатопроцесорності

    Причини появи багатопроцесорних систем

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

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

    Завдяки зазначених переваг багатопроцесорні платформи користуються популярністю практично у всіх сегментах серверного ринку. Дво-та чотирипроцесорні сервери молодшого і середнього рівня мають гарне співвідношення ціна/продуктивність, і з точки зору організації охолодження вони не набагато складніше однопроцесорних. Рішення з вісьмома і більше процесорами мають більш складну архітектуру, але й дозволяють добитися максимальної продуктивності і надійності.

    Топології багатопроцесорних систем

    Типи багатопроцесорних систем розрізняються перш за все підходом до організації системної шини, що зв'язує, як і в однопроцесорних системах, ЦП і НМС. У Нині найбільш поширені три варіанти архітектури багатопроцесорних систем:

    загальна шина (shared bus);

    зіркоподібна топологія (star topology), або топологія «точка-точка" (point-to-point topology);

    комутована топологія (switch-based topology). Найбільш проста - топологія загальної шини.

    Як випливає з назви, всі ЦП у системі підключаються послідовно до загальної системної шини і відповідно змушені ділити між собою її смугу пропускання. Цим визначаються як переваги, так і недоліки цієї архітектури. Одночасно з економією на кількості провідників і загальної вартості розробки виникає проблема пропускної здатності системної шини, який настільки суттєвим, що при великій кількості ЦП (починаючи з восьми) така топологія просто непридатна, оскільки затримки при зверненні до пам'яті занадто великі через черги на звернення до шини. Компенсацією недостатньою пропускної здатності системної шини може служити додавання значних локальних обсягів кеш-пам'яті до кожного ЦП. Загальна шина найбільш виправдана в системах з двома процесорами. У чотирипроцесорних системах обсяги кеш-пам'яті кожного ЦП доводиться збільшувати в 2-4 рази, що призводить до істотного росту вартості кінцевої системи.

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

    Досить цікавий приклад зіркоподібній топології - чотирипроцесорні сервери Fujitsu PRIME-POWER 450. В їхню основу покладено принцип швидкісного універсального комутатора, що працює на тактовій частоті 220 МГц, який і виконує всі основні функції набору мікросхем. До нього по виділених 128-біт 220-МГц шин (110 МГц із застосуванням технології DDR) підключаються ЦП SPARC64 V з тактовою частотою 2 ГГц і вище. Далі до нього ж підключаються два контролера оперативної пам'яті (DDR SDRAM 110 МГц), кожен з яких має в своєму розпорядженні своїм 128-біт каналом даних, і два мости шини PCI - по 110-МГц 64-біт каналах. Ця схема забезпечує швидкісний обмін даними між всіма вузлами, але додавання, наприклад, ще чотирьох ЦП і двох контролерів оперативної пам'яті зажадає серйозної перепроектування комутатора.

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

    Розглянемо комутовану топологію на прикладі 16-процесорних серверів HP AlphaServer GS160. В основі архітектури лежить так званий Quad Building Block (QBB), містить чотири ЦП Alpha 21264B (EV68C) з тактовою частотою до 1,22 ГГц, до 16 Мбайт B-cache на кожен ЦП, чотири модулі регістровий SDRAM ЕСС загальним обсягом до 32 Гбайт, два модулі стабілізатора живлення, два 64-біт 33-МГц РСI-інтерфейсу, власне комутатор і інтерфейс GlobalPort для зв'язку з іншими комутаторами.

    Чотири таких QBB об'єднують в дворівневу деревоподібну структуру через головний комутатор, що знаходиться на окремому модулі і забезпечує пропускну здатність між двома окремо взятими QBB по 1,75 Гбайт/с у кожному напрямку.

    Осібно стоять системи, в яких контролер оперативної пам'яті, а часто і контролери периферійних шин інтегровані в ядро ЦП, а тому необхідність у системному шині відпадає. Такі системи будуються за NUMA-архітектурі, про яку піде мова далі. Їх можна розглядати як представників комутованої топології.

    Доступ до пам'яті в багатопроцесорних системах

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

    класичний SMP (Symmetrical Multi-Processing, симетричних багатопроцесорних);

    розподілений SMP (distributed SMP);

    NUMA (Non-Uniform Memory Access, неоднорідний доступ до пам'яті).

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

    Принцип розподіленої багатопроцесорності передбачає формування з наявних в системі ЦП логічних груп, кожна з яких має в своєму розпорядженні своїм (локальним) об'ємом оперативної пам'яті. Природно, що для забезпечення цілісності та нормального функціонування всього простору оперативної пам'яті ці логічні групи повинні бути якось пов'язані між собою. Затримки при доступі до пам'яті будуть відповідно різні в залежності від того, відбувається звернення до локальної або віддаленої області пам'яті. розуміти, що, незважаючи на деяку схожість, розподілена SMP - не приватний випадок комутованої архітектури: в останній можуть бути реалізовані як SMP, так і NUMA. Наприклад, в обчислювальному комплексі Intel Profusion вісім ЦП Intel Xeon розділені на дві групи по чотири ЦП і пов'язані комутатором, до якого підключається НМС з контролером оперативної пам'яті. Таким чином, при зверненні до пам'яті всі процесори рівноправні і Intel Profusion представляє є класичною SMP-систему. А ось описаний вище сервер HP AlphaServer GS160 спроектований за принципом розподіленої багатопроцесорності.

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

         
     
         
    Реферат Банк
     
    Рефераты
     
    Бесплатные рефераты
     

     

     

     

     

     

     

     
     
     
      Все права защищены. Reff.net.ua - українські реферати ! DMCA.com Protection Status