Увеличение производительности сервера с помощью SSD дисков

Как известно, твердотельные накопители SSD, получающие все более широкое распространение, намного превосходят по производительности традиционные жесткие диски HDD. Однако их стоимость значительно выше, и поэтому использование одних лишь SSD в качестве корпоративного пула ресурсов хранения данных оказывается для большинства компаний невыгодным.

«Лучшей практикой» для многих корпоративных заказчиков является применение гибридных систем хранения SSD/HDD. Такое решение позволяет воспользоваться преимуществами обоих типов носителей – большой емкостью HDD и высоким быстродействием SSD в IOPS (количество операций ввода-вывода в секунду}, – но при этом остается экономически привлекательным.

В гибридной системе хранения SSD/HDD основная емкость представлена недорогими жесткими дисками, а небольшой пул для «горячих», часто используемых данных – флеш-памятью. В рационально спроектированной гибридной СХД при небольшом количестве накопителей SSD достигается значительное ускорение операций с основным пулом хранения данных.

Реализация Гибридных СХД

На практике применяются два основных метода ускорения – кэширование данных и их многоуровневое хранение (tieriпg). В обоих случаях для увеличения производительности ввода-вывода используется концепция «горячих » данных, но в действительности это совершенно разные подходы. При кэшировании один или несколько накопителей SSD служат в качестве кэша для виртуального пула хранения, где основное хранилище реализовано на жестких дисках. SSD в этом случае не предоставляют дополнительной емкости – это невидимая для приложений «прослойка», увеличивающая производительность ввода-вывода. Информация всегда передается в основной пул хранения, однако «горячие» данные копируются и в кэш – память (на SSD). При последующих обращениях к этим или рядом размещенным данным вместо основного пула хранения используется кэш-память, за счет чего и достигается существенный выигрыш в производительности.

При многоуровневом хранени и данные соответствующим образом сортируются и помещаются на уровень SSD или HDD (уровней может быть больше двух): «Горячие» отправляются на флеш память, а реже используемые – на жесткие диски.

Что Лучше?

Многоуровневое хранение не предполагает избыточности данных, поэтому реализация RAID в этом случае становится более сложной – требуется покупка дополнительных SSD. Сама сортировка данных и распределение их по уровням негативно сказываются на производительности. Такие системы должны управлять данными, которые из «Горячих» со временем превращаются в «холодные». Ввиду отсутствия избыточности, часто используемые данные нужно перемещать в основной пул, как только они становятся менее полезными. Эти фоновые процессы потребляют IOPS и сказываются на скорости операций ввода-вывода во время таких перемещений. С наибольшей эффективностью многоуровневое хранение функционирует в тех случаях, когда соответствующие алгоритмы адаптированы к требованиям и задачам заказчика. Для достижения идеальной производительности нужны постоянный мониторинг и подстройка алгоритмов.

В отличие от сложного многоуровневого хранения, кэширование на SSD в существующих СХД реализовать проще. Гибридные системы хранения скэшированием на SSD не требуют дополнительного администрирования, а приложение воспринимает такую систему точно так же, как и любую другую сетевую СХД, только работает она намного быстрее. Реализация RAID и защита данных у нее аналогичные, и покупать для этого дополнительные SSD не потребуется. На SSD помещаются копии данных, поэтому осуществлять их фоновое перемещение в основной пул хранения не придется. Не будет и связанных с этим издержек, влияющих на производительность. Кэширование на SSD необходимо, в прочем, подстраивать под конкретные Корпоративные приложения, но простота системы кэширования означает, что администрирование системы будет значительно менее сложным, чем у сопоставимой СХД смногоуровневым хранением.

Издержки, связанные с инсталляцией СХД с многоуровневым хранением и ее сопровождением, будут оправданными только в очень крупных организациях, которые могут позволить себе как установку стоечных модулей SSD для организации выделенного пула флеш-памяти, так и увеличение штата системных администраторов для управления СХД. Для большинства компаний, не имеющих экстремально крупных пулов хранения, предпочтительным вариантом ускорения систем хранения будет кэширование на SSD.

Проблема Записи

Будучи более производительными, накопители SSD имеют определенные ограничения на запись данных, и это нужно иметь в виду при выборе метода ускорения СХД. Хотя хранящиеся на флеш – накопителях данные можно считывать бесконечное число раз, их ячейки допускают ограниченное число циклов записи. Эта проблема осложняется необходимостью удалять весь блок даже при записи данных меньшего объема. Для ее решения в современных контроллерах флеш-памяти применяются методы распределенной записи, кэширования операций записи и фоновая «сборка мусора». Однако запись на SSD остается более сложной операцией, чем чтение. Слишком частое выполнение записи в одни и те же ячейки может привести к быстрой деградации флеш-памяти.

Если в клиентской системе операции записи на SSD можно распределить таким образом, что каждый отдельный блок носителя будет перезаписываться достаточно редко, то в гибридной СХД уровень SSD активно задействуется для хранения «горячих» данных всего дискового пула. При кэшировании и многоуровневом хранении операции с SSD станут очень интенсивными, и преимущества алгоритмов предотвращения износа носителя будут сведены на нет. Это означает, что в обоих случаях (кэширование и многоуровневое хранение) уровень SSD лучше всего задействовать для ускорения операций чтения, а не чтения и записи.

Реализация Кэширования на SSD

В системе с кэшированием на SSD операция ввода-вывода производится обычным образом: вначале выполняются чтение-запись на HDD. Если эта операция инициирует кэширование, данные также копируются с HDD на SSD. Тогда при любой последующей операции чтения того же логического блока он считывается непосредственно с SSD, что увеличивает общую производительность и уменьшает время отклика. Уровень SSD играет роль невидимого ускорителя ввода-вывода, и при любом отказе SSD данные все равно будут доступны в основном пуле хранения, защищаемом с помощью RAID.

Наполнение Кэш – Памяти

Кэш, как и основная емкость хранения, разбивается на группы секторов равного размера. Каждая группа называется кэш-блоком, а каждый блок состоит из подблоков. Размер кэш-блока можно настраивать под конкретное приложение, например СУБД или Wеb-сервер.

Считывание данных с HDD и их запись в SSD называют наполнением кэш-памяти. Эта фоновая операция обычно выполняется вслед за основной операцией чтения или записи. Поскольку назначение кэша – хранение часто используемых данных, к его наполнению должна приводить не каждая операция ввода- вывода, а только та, для которой пороговое значение счетчика оказывается превышенным. Обычно счетчики наполнения применяются при чтении и при записи.

Таким образом, с каждым блоком основной емкости хранения ассоциируются счетчики чтения и записи. Когда приложение считывает данные из кэш-блока, значение его счетчика чтения увеличивается. Если данные в кэш-памяти отсутствуют, а значение счетчика чтения больше или равно значению наполнения при чтении, то параллельно с основной операцией чтения выполняется операция наполнения кэш-памяти (данные кэшируются). Если же данные уже есть в кэшпамяти, они считываются с SSD, а операция наполнения не осуществляется. Если значение счетчика чтения меньше порогового значения, оно увеличивается, а операция наполнения не выполняется.

Пошаговые действия, выполняемые контроллером при обработке запроса приложения на запись данных

Рост производительности (в IOPS) в зависимости от времени

Для операции записи сценарий тот же. Подробнее он поясняется на иллюстрациях.
Что происходит с содержимым кэша после его «разогрева » ? Если на SSD есть свободное место, кэш продолжает заполняться «Горячими» данными. Когда емкость SSD исчерпывается, применяется алгоритм перезаписи наименее используемых данных (Least Receпtly Used, LRU), то есть на место последних в кэш-памяти записываются новые «горячие» данные. Если объем «Горячих» данных превышает емкость SSD, процент считываемых из кэш-памяти данных уменьшается, соответственно, снижается и производительность. Кроме того, чем меньше емкость SSD (и чем больше объем горячих данных), тем интенсивнее обмен «горячих » данных. В результате SSD будет изнашиваться быстрее.

Мы рекомендуем использовать накопители lпtel SSD ОС S3500. Так , у SSD емкостью 480 Гбайт наработка на отказ (MTBF) составляет 2 млн ч. Что касается производительности, то типичная задержка у этих накопителей равна 50 мс, максимальная задержка при чтении 500 мс (99,9% времени), а производительность при произвольном чтении блоками по 4 Кбайт достигает 75 тыс. IOPS, при записи – 11 тыс. IOPS. Это хороший вариант для SSD-кэширования.

Кэширование при чтении – записи

Операция чтения при отсутствии данных в кэш-памяти происходит следующим образом:

1. Приложение подает запрос на чтение данных.
2. Данные считываются с HDD.
3. Запрошенные данные возвращаются приложению.
4. Выполняется операция наполне ния SSD.

Операция чтения при наличии данныхв кэш-памяти:

1. Приложение подает запрос на чтение данных.
2. Данные сч и тываются с SSD.
3. Запрошенные данные возвращаются приложению.
4. При сбое SSD данные считываются с HDD.

Действия приложения при зап иси данных:

1. Приложение подает запрос на запись данных.
2. Данные записываются на HDD.
3. Приложению возвращается статус операции.
4. Выполняется операция наполнениякэш-памяти на SSD.

Настройка Кэш-Памяти SSD

Чтобы приложение использовало кэш память на SSD максимально эффективно, ее можно настроить. Основные параметры – размер блока кэш – памяти, пороговые значения наполнения при чтении и при записи.

Размер блока. Большой размер блока кэш-памяти подходит для приложений, часто обращающихся к соседним (по физическому расположению) данным. Это называется высокой локальностью обращений. Увеличение размера блока также ускоряет наполнение кэш -памяти на SSD – ускоряется « разогрев» кэша, после которого приложения с высокой локальностью обращений будут демонстрировать весьма высокую производительность.

Однако увеличение размера блока влечет за собой генерирование избыточного трафика ввода-вывода и увеличение времени отклика, особенно для отсутствующих в кэше данных. Меньший размер блока хорош для приложений с менее локализованными данным и, то есть когда доступ к данным осуществляется в основном случайным образом. Кэш – память на SSD будет « разогреваться » медленнее, но чем больше блоков, тем больше вероятность попадания в кэш нужных данных, особенно данных с низкой локальностью обращений. При небольших блоках коэффициент использования кэш-памяти ниже, но меньше будут и сопутствующие потери, так что при « Промахе», когда нужных данных нет в кэш – памяти, производительность страдает меньше.

Пороговое значение наполнения. Порог наполнения кэша – это число обращений к данным, после которого соответствующий блок копируется в SSD-кэш. При большом значении кэшируются только часто используемые данные и уменьшается обмен данных в кэше, но увеличивается время «разогрева» кэш – памяти и растет эффективность ее использования. При меньшем значении кэш – память разогревается быстрее, но возможно ее избыточное наполнение.

Для большинства приложений вполне достаточно порогового значения, равного 2. Наполнение при записи полезно в том случае , когда записываемые данные вскоре снова считываются. Подобное нередко случается в файловых системах. Другие приложения, например базы данных, не имеют такой особенности, поэтому наполнение при записи для них иногда лучше вовсе отключить.

Как можно видеть, увеличение или уменьшение каждого параметра имеет свои положительные и отрицательные последствия. Очень важно понимать «локальность» приложения. Кроме того, полезно протестировать систему на реальных нагрузках и посмотреть, при каких параметрах она показывает лучшие результаты.

Пример конфигурации Кэша на базе SSD

В тесте моделировалась типовая ситуация вода-вывода (произвольное чтение 90% +запись 10%) для определения выигрыша, который дает использование SSD- кэша. При тестировании применялась система AegisSAN 0500 в следующей конфигурации:

  • HDD: Seagate Constellations ES, ST1000NM0011 , 1 Тбайт, SATA 6 Гбит/с (х8);
  • SSD: lntel SSD DС 3500, SSDSC2BB480G4, 480 Гбайт, SATA 6 Гбит/с (х5) ;
  • RАID -группа : RAID 5;
  • тип ввода-вывода: Database Service (8 Кбайт) ;
  • режим ввода- вывода: блоки по 8 Кбайт.

Время «разогрева » вычисляется по следующей формуле : Т = (С х Р) / (1 х S х D), где Т – время « разогрева », 1- средняя производительность в IOPS одного HDD при произвольном чтении , S – размер блока ввода-вывода, D-число HDD, С – совокупная емкость всех SSD, 1Р – пороговое значение наполнения Кэш – памяти при чтении или записи. На практике «разогрев» кэша может занять больше времени.

Для данной конфигурации оно составит:
Т = (2 Тбайт х 2) / (244 х 8 Кбайт х 8) = 275 036,33 сек = 76,40 ч.

Без кэширования на SSD средняя производительность составила 962 IOPS. При включении кэширования она выросла до 1942 IOPS, то есть улучшение после «разогрева» кэша оказалось двукратным – 102%. Согласно расчетной формуле время разогрева равно 76,4 ч, в тесте после 75 ч производи тельность в IOPS достигла максимальной величины и оставалась после этого стабильной.

Заключение

В концепции ускорения гибридных СХД реализуется идея увеличения производительности всей системы за счет быстрого доступа к «горячим» данным. Принимая во внимание затраты на оборудование и администрирование, можно утверждать, что в общем случае кэширование данных на SSD представляет собой наилучший способ получения преимуществ высокой производительности при использовании систем хранения с флеш-накопителями без потери надежности хранения данных.

Рейтинг материала
[Голосов: 0 Рейтинг: 0]
24 декабря 2015, 14:14

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *