Базові елементи Flash Virtualization Platform (FVP), частина 2. Використання власної платформи або файлової системи

Одна з тем, яку я обговорював з Satyam і Murali Vilayannur, була файлова система, яка використовується для зберігання даних на флеш-пристроях. Слід пам'ятати про наступні примітні факти: Satyam створив VMFS3, Murali був провідним розробником VMFS5. З цієї точки зору, здавалося б, використання VMFS очевидно. Однак великим сюрпризом для мене виявився той факт, що для флеш-пристроїв ми не використовуємо VMFS, ще більшим сюрпризом стало те, що ми взагалі не використовуємо файлову систему.

Чому не VMFS?
Файлові системи надають можливості, які не потрібні і іноді навіть конфліктують з вимогами платформи, обробної активний введення-ввивод на флеш-пристроях. Одна з найбільших проблем використання файлової системи, аналогічної VMFS, на флеш-пристрої полягає в тому, що вона оптимізована для SAN-систем зберігання і їх моделей управління даними; Satyam написав статтю про це для ACM під час роботи в VMware. На жаль, це робить файлову систему невідповідним інструментом для задач FVP.

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

Файлові системи також надають можливості, які значно перевершують потреби FVP. Наприклад, дискові блокування. VMFS має просунутий менеджер розподілених блокувань, який управляє доступом різних хостів ESXi до дисків. FVP управляє локальними дисками хоста і не вимагає блокувань на інших хостах, як результат, менеджер розподілених блокувань стає абсолютно зайвим. Те ж саме можна сказати про POSIX-сумісність і розподілені транзакції. І так далі.

Низькорівневі операції з флеш-пам'яттю
Ось приклад, ніж запис на флеш-пристрої принципово відрізняється від записів на жорсткі диски. Флеш не може перезаписати існуючі дані. Дані у флеш-пам'ять можуть бути записані тільки на порожню сторінку. Особливістю флеш-пам'яті є те, що запис може проводитися сторінками, а стирання - тільки блоками. Що таке сторінка і що таке блок? Флеш зберігає дані в осередках; осередки об'єднані в сторінки (4 КБ); сторінки згруповані в блоки. Більшість виробників об'єднують 128 сторінок в один блок. Якщо потрібно стерти сторінку, то потрібно стерти весь блок. Всі необхідні дані з інших сторінок повинні бути збережені десь ще. Широко відомо, що флеш-пристрої мають обмежену кількість циклів запису і стирання.

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

управління зносом
Зверніть увагу, для простоти я прийняв рішення показати 9 сторінок в одному блоці замість 128 сторінок на блок.

Почнемо з процесу управління зносом. У цьому прикладі додаток вже створило дані і записало їх в сторінки A, B і C в блоці 1 (Крок 1). Надходять нові дані (Крок 2), які записуються на сторінки D, E, і F. Додаток оновлює попередні дані (AC) і замість використання попередніх сторінок флеш-пристрій продовжує використовувати нові сторінки. Ці нові дані позначені як A-1, B-1 і C-1. Розподіл записів якомога більш рівномірно називається "управління зносом". Старі сторінки тепер позначені як прострочені.

Прибирання сміття та множинна запис
У цьому прикладі блок A заповнений, що трапиться, якщо місце, доступне користувачеві для запису, закінчилося і надходять нові дані?

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

Прибирання сміття - це прекрасно, але множинна запис, що виникає при його роботі, завдає значної шкоди флеш-пристроїв. Для того, щоб записати 3 сторінки, флеш-пристрій повинен вважати 6 сторінок і записати ці 6 сторінок в інше місце до того, як буде здатне записати нові дані. І не забувайте про цикл стирання. Припустімо сценарій, в якому диск заповнений повністю, куди ми (тимчасово) перемістимо дані до запису нових даних? У моїй схемі я додав блок B для такого варіанту. Для того, щоб виконати це в реальній ситуації (при використанні файлової системи), потрібно виділити надмірне простір, зарезервоване контролером флеш.

Для того, щоб виконати це в реальній ситуації (при використанні файлової системи), потрібно виділити надмірне простір, зарезервоване контролером флеш

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

Переосмислення управління даними на флеш-пристроях
Інженери PernixData розробили для FVP новий формат управління даними на флеш-пристроях. Подробиці будуть розкриті в наступних статтях, а зараз кілька принципових моментів.

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

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

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

Цитую нашого менеджера продукту Bala: "Елегантність продукту, на мою думку, в тому, що він виконує основні завдання, НЕ вимагаючи від користувача якихось нових або незвичайних дій".

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

Оригінальна стаття .

З 2016 FVP знятий з продажу.

Чому не VMFS?
Що таке сторінка і що таке блок?
Припустімо сценарій, в якому диск заповнений повністю, куди ми (тимчасово) перемістимо дані до запису нових даних?