Передмова від VM Guru: Із задоволенням представляємо четверту статтю нашого автора Андрія Луценко, фахівця в галузі інформаційної безпеки, де розповідається про новаторських способах організації оперативної пам'яті за допомогою технологій віртуалізації.
Для більш глибокого розуміння статті рекомендуємо прочитати наступні статті Андрія:
Також, можливо, вам знадобиться завантажити Прикріплені файли (RED_PILL.exe і Project1.exe), гіпердрайвер і гіперагент, за допомогою яких можна контролювати засобами апаратної віртуалізації все без винятку події, пов'язані з передачею управління процесору.
Архітектура сучасних обчислювальних систем тримається на трьох китах: процесорі, що виробляє маніпуляції з інформацією, сховища інформації та пристроїв завантаження / розвантаження інформації із зовнішнього середовища.
Сховище інформації на даний момент складається з двох частин - Оперативної Пам'яті і довготривалих пристроїв зберігання (вінчестерів). Такий поділ пов'язаний з неможливістю до нинішнього часу об'єднувати властивості швидкісного доступу до інформації з функцією довготривалого зберігання великого об'єму інформації в одному пристрої.
Оперативна пам'ять найбільш архаїчна з цих систем, оскільки за останні десятиліття її архітектура не змінилася. Це як і раніше однорідний масив мікросхем пам'яті, об'єднаних єдиними шинами даних і адресації. Єдиною зміною і те, практично тридцятирічної давності, було введення поняття віртуалізації, причому ця віртуалізація відносилася не до самої ОП, а до методів її адресації з боку процесора.
В даний час саме обмеження щодо доступу до ОП є основною проблемою підвищення загального швидкодії обчислювальних установок. Багато на це заперечать, що на їх машинах варто по 2 гігабайти і все прекрасно працює. Але те ж саме говорили і десять років тому, тільки про обсяг 200 мегабайт. І двадцять років тому, але про обсяг в 16 мегабайт, я ще пам'ятаю, як це ж говорили і про 640 кбайт, тридцять років тому.
Що дає оперативна пам'ять об'ємом скажімо в один Терабайт?
В сучасних обчислювальних системах (мається на увазі залізо + ОС) такий обсяг потрібен тільки для серверів, і то не всіх.
Але це вірно тільки в тому випадку, якщо ОП не є довготривалим запам'ятовуючим пристроєм, типу флеш-пам'яті. Якщо ця пам'ять здатна зберігати інформацію тривалий час, як зараз це робить зовнішні накопичувачі, то при такому обсязі можна поєднати функції зберігання інформації і оперативного доступу до неї, тобто всю інформацію зберігати і обробляти безпосередньо в Оперативної Пам'яті.
При такому підході Оперативна Пам'ять це реальний шлях підвищення продуктивності будь-обчислювальної системи, від смартфона до сервера. Але це вже буде не оперативна пам'ять в класичному розумінні, а зовсім інший пристрій - «Масивна Оперативна Пам'ять».
Чому масивна? - Та тому що велика, а крім того адресується з точністю до масиву (блоку) а не до байта, як традиційна ОП.
Нікого вже не здивуєш флеш-накопичувачами з об'ємом 0,5-1 Тбайт, так що питання обсягу не актуальний в даний час.
Питання викликає час доступу до такої масивної ОП і метод організації до неї доступу, оскільки вона є ЗУ з сторінкової, а не довільної адресацією.
Сучасні контролери флеш-пам'яті забезпечують час доступу до інформації на рівні 1 Гб в секунду, причому це з одного контролера має 8 каналів для підключення флеш-мікросхем. В реально присутніх в якості комерційних продуктів системах забезпечується швидкість в 2-4 Гбайта в секунду ... Малувато звичайно, до 10-20 Гбайт / сек для традиційних ОП не дотягує.
Другою проблемою є метод доступу до інформації на такий Масивною ОП, оскільки вона має сторінкову організацію з розміром сторінок в 4 Кбайта - процесор з такою пам'яттю безпосередньо працювати не може ...
Але ці дві проблеми вирішуються одним способом - включенням до складу Масивною ОП Кеша з довільним методом доступу до інформації.
Алгоритм роботи такої пам'яті виглядає наступним чином: процесор виставляє запит на доступ до якогось адресою з точністю до байта, після чого сторінка в 4 Кбайта, що містить потрібну адресу, блоком, завантажується в Кеш з флеш-накопичувача.
Після завантаження сторінки в Кеш процесор працює з інформацією розміщеною в кеші, маючи до нього доступ на рівні байтів.
Власне так процесор працює і зараз зі звий внутрішньої Кеш-пам'яттю, оскільки в традиційних системах завантаження в кеш процесора з ОП йде блоками в 64-128 байт.
Теоретично все піддається реалізації, але індустрія до таких рішень на даний момент не готова, хоча повний набір необхідних технологій і є. Скажімо так, - час їх не за горизонтом, а й трапиться це не завтра ... проблема в мізках і їх неготовність до революційних змін, - подавай їм, бач, що не революцію, - а еволюцію.
Ну й добре, буде еволюція ...
Уже зараз є потреба в ОП об'ємом в терабайт і більше, навіть без функції довготривалого зберігання інформації. Обсяги ОП на серйозних обчислювальних установках в кілька терабайт не рідкість, але це арифметична сума ОП всіх серверів кластера. Одиничний процесор в складі такого кластера не має безпосереднього доступу до всього обсягу ОП, а тільки до невеликої частини, розташованої на його власній материнській платі. У багатьох випадках цього недостатньо, потрібно мати обсяг ОП в терабайтного масштабу саме в прямому доступі будь-якого процесора обчислювальної системи.
Ось цю актуальну задачу і спробуємо вирішити за допомогою емулятора Масивною Оперативної Пам'яті.
Підійдемо до проблеми по-російськи, з допомогою сокири і який там Матері ...
Як сокири будемо використовувати апаратуру віртуалізації, а матір залишимо для загадкової російської душі, готової витрачати весь вільний від основної роботи час на цю академічну тему.
Отже: як накопичувач Масивною Оперативної Пам'яті будемо використовувати SSD-диск, це звичайно неефективно, але це є під рукою.
Як Кеша будемо використовувати частину обсягу ОП за природним кордоном в 4 Гб. Апаратура віртуалізації дозволить відобразити на фізичні адреси такого Кеша весь емульований обсяг Масивною Оперативної Пам'яті.
Підкачування і вивантаження інформації з Кеша здійснюватимемо процесором в режимі хоста, в який будемо виходити за фактом відсутності в кеші необхідної інформації з основного накопичувача.
Гіпердрайвером буде « Червона пігулка », Допрацьована для 64бітние режиму, оснащена необхідними обработчиками подій і має власний драйвер для роботи з дисковим контролером на інтерфейсі AHCI.
Управління таблицями тіньової переадресації, завантаження / вивантаження даних з флеш-накопичувача здійснюється в режимі хоста тим процесором, на якому відбулася подія: - спілкування до адресою пам'яті, інформація по якому відсутній в кеші Масивною Оперативної Пам'яті.
В результаті програмами хоста Гіпердрайвера реалізується емуляція нового, невідомого досель пристрою під назвою «Масивна Оперативна Пам'ять».
На реальній системі спочатку завантажується Гіпердрайвер, який ініціалізує обладнання, системні таблиці, забирає в монопольне використання контролер флеш-накопичувача (SSD диска) і сам диск. Потім, уже на активній Масивною Оперативної Пам'яті, завантажується операційна система, таким чином, весь життєвий цикл ОС проходить за участю емульованого Гіпердрайвером неіснуючого в реальності обладнання.
Для ОС видно тільки кінцевий результат роботи такого обладнання - збільшений розмір Оперативної Пам'яті:
Операційна система (Windows 7-x64), спокійно починає працювати з такою емуліруемой Масивною Оперативної Пам'яттю, вважаючи, по простоті душевній, її реально існуючої. Правда ця конкретна ОС геть відмовляється працювати з об'ємом оперативної пам'яті понад 196 Гбайт, хоча їй пропонується обсяг 240 Гбайт. При цьому стабільна робота ОС без зависань на призначених для користувача програмах забезпечується при обсязі ОП не більше 150 Гбайт.
У такій емуліруемой пам'яті спокійно йдуть тести на продуктивність ОП. Зрозуміло, що результати цих тестів скажімо так: «від лукавого ..», але тим не менш, важливий сам факт.
Не зрозуміло в даному випадку, що реально вимірюється, але схоже, що в тесті всі дані знаходяться в кеші Масивно Пам'яті і збільшена затримка в 462 такту на блоках в 64 Мбайт цей час на доступ через додаткові таблиці переадресації в Гіпердайвере (NPG таблиці).
Реальний потенціал навіть емульованого за допомогою обладнання віртуалізації неіснуючого пристрою виявився напрочуд життєздатний і високий, і це при скромних 500 Мбайтах / сек пропускної здатності SSD наявному на даному макеті (теоретичних - на практиці не більше 250-300 Мбайт / сек).
Було запущено два тести на випадкове читання в обсязі 1 Гбайт кожен, якісь звернення до пам'яті потрапляють в Кеш, а якісь ні, і їх доводиться довантажувати з флеш-накопичувача. В результаті виходить, що макет забезпечує в тестах пропускну здатність в 3 Гб / сек сумарно.
Макет Масивною Оперативної Пам'яті зібраний на стандартному контролері Sata-3 і SSD вінчестері Vertex-3 об'ємом 240Гбайт.
Якщо використовувати більш серйозне залізо, типу SSD накопичувачів в форм-факторі PCI-E, та ще зробити на них чергування адрес для 2-Мбайтних блоків, то 4 таких пристрої дадуть в сумі 5-10 Гбайт пропускної здатності.
Це вже навіть більше, ніж може забезпечити серверна плата в режимі NUMA, але не дотягує до продуктивності пам'яті в режимі SMP-доступу.
При цьому потрібно мати на увазі, що цифри пропускної здатності актуальні для аварійного режиму Кеш-промаху, тобто коли в кеші відсутній потрібна сторінка і її потрібно підкачувати з флеш-накопичувача. У нормальному режимі (присутності інформації в кеші) доступ до такої масивної пам'яті за швидкістю і латентності нічим не відрізняється від стандартної ОП.
На наявному в реальності залозі можна створювати цілком успішні комерційні рішення, при ціні 80-100 тисяч рублів за один Тбайт Оперативної пам'яті. Це вже дуже навіть привабливі ціни, при швидкостях доступу навіть вище, ніж можуть забезпечити сучасні 4-х сокетних материнські плати (такі рішення поки можуть містити до 4х64 Гбайта = 256 Гбайт ОП, на швидкості доступу 4-5Гбайт / сек).
Якщо заточити внутрішні прошивки флеш-накопичувачів під специфіку Масивною Оперативної Пам'яті, а ще краще повністю переробити інтерфейс доступу до флеш-накопичувача, то можна отримувати значно більш продуктивні рішення.
Таким чином, стандартна апаратура віртуалізації, в зв'язці з флеш-накопичувачами може використовуватися для створення комерційно успішних рішень для збільшення обсягу Оперативної Пам'яті і довготривалого зберігання в ній інформації.
Наступним етапом, еволюційно, можна переходити і до чисто апаратної реалізації Масивною Оперативної Пам'яті ....
Що дає оперативна пам'ять об'ємом скажімо в один Терабайт?Чому масивна?