Рецепт сервера для Recovery-шторма

Рецепт сервера для Recovery-шторма

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

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

Один из недостатков такого подхода — сравнительно высокая длительность процессов сохранения и особенно вос­ста­нов­ле­ния состояния, этот эффект получил название Recovery Storm: каждая минута простоя сервера сто­ит де­нег.

Три модели устойчивости

Согласно документу от Microsoft существует три варианта построения устойчивых систем.

  1. Block Based это привычная модель, основанная на сохранении информации в виде блоков, файлов или баз данных. Как правило, при сохранении и восстановлении требуется преобразование форматов представления данных.
  2. Persistent heaps модель допускает сохранение и восстановление содержимого диапазонов памяти под управлением программного обеспечения. Термин Flush-on-commit, используемый в контексте описания данной модели, подчеркивает участие приложения в выделении и подготовке данных, подлежащих сохранению.
  3. Whole-system persistence (WSP) модель отличается от предыдущей тем, что роль пользовательского программного обеспечения минимизирована. В частности, в модулях NVDIMM, копирование DRAM-to-Flash и восстановление Flash-to-DRAM выполняется аппаратно под управлением контроллера, устанавливаемого на модулях либо на дополнительной плате резервного питания. Контроллер фиксирует момент отключения напряжения и запускает необходимые процедуры, что подчеркивается термином Flush-on-fail.

Осознанный выбор: WSP + flush-on-fail

Теоретически, каждая из трех перечисленных моделей может базироваться на любой физической реализации (маг­нит­ный или SSD диск, энергонезависимая память). На практике, наиболее эффективным подходом является модель WSP на основе энергонезависимой памяти, работающая с дисциплиной flush-on-fail.

WSP или, в свободном переводе полностью устойчивая система, работая в режиме flush-on-fail, обеспечивает воз­мож­ность быстрого копирования содержимого оперативной памяти и контекста центрального процессора в энер­го­не­за­ви­си­мую память в момент отключения электропитания. Здесь ключевое слово быстрого и означает оно не толь­ко минимизацию потерь рабочего времени сервера, но и возможность значительного сокращения требуемой емкости резервного источника электропитания. Такой подход также позволяет выполнять основные операции по сохранению данных в случае аварийной ситуации и минимизировать потери производительности, связанные с подготовкой к сбою пи­та­ния, выполняемой независимо от того, произойдет сбой или нет.

Важным фактором обеспечения прозрачности механизмов резервного копирования является поддержка этой опе­ра­ции для всей оперативной памяти. Иначе, в алгоритмах работы приложений необходимо обеспечить размещение со­хра­ня­е­мых данных в строго заданном диапазоне адресного пространства, как это имеет место для второй модели (Per­sis­tent heaps, Selective model). В силу некоторых особенностей программной индустрии, адекватное со­про­вож­де­ние и адаптация существующих приложений под новые требования возможны далеко не всегда. Это ве­со­мый ар­гу­мент в пользу WSP.

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

NVDIMM: энергонезависимые модули памяти

Доступные решения на NVDIMM используют конденсаторы большой емкости, называемые ultracapacitors. Хотя их га­ба­ри­ты и выделяются на фоне современных электронных компонентов, по сравнению с аккумуляторами UPS, ре­ше­ние весьма компактное и даже экологичное. Для повышения КПД, конденсаторы заряжаются от источника питания +12 вольт, а низкие напряжения, необходимые для функционирования RAM, Flash и управляющего контроллера, фор­ми­ру­ют­ся импульсными понижающими регуляторами.

Каждый модуль снабжен Flash-памятью типа NAND, размер которой равен размеру оперативной памяти. По ава­рий­но­му сигналу, содержимое оперативной памяти переписывается в Flash память. В рабочем сеансе, в адресном про­ст­ран­ст­ве платформы находится только оперативная память.

Реализация модели WSP в системе с NVDIMM: центральное место отводится управляющему контроллеру, в обязанности которого входит мониторинг AC-питания, а также своевременный запуск процедур резервного копирования и восстановления информации
Рис.1
Реализация модели WSP в системе с NVDIMM: центральное место отводится управляющему контроллеру, в обязанности которого входит мониторинг AC-питания, а также своевременный запуск процедур резервного копирования и восстановления информации

WSP как аппаратно-программная инфраструктура

WSP подразумевает интеграцию в серверную платформу следующих четырех компонентов:

  1. Power Monitor представляет собой аппаратный компонент, контролирующий состояние линии AC-питания, запускающий процесс копирования данных (DRAM-to-Flash) при отключении питания. Задачей данного узла является генерация запроса на аппаратное прерывание для центрального процессора.
  2. Save Routine это программный модуль, запускаемый по запросу на прерывание от устройства Power Monitor. Процедура координирует аварийное сохранение информации из оперативной памяти в энергонезависимую. Одной из задач является обеспечение когерентности содержимого оперативной памяти и кэш-памяти (операции Cache Writeback and Invalidation), с целью предотвращения сохранения «устаревшей» копии данных. Для успешного рестарта также необходимо сохранить состояние процессора(процессоров) и остановить все выполняемые потоки инструкцией HLT.
  3. Recovery Routine это программный модуль, обеспечивающий восстановление информации при возобновлении питания.
  4. Собственно NVDIMM Module, содержащий схемы DRAM, Flash, контроллер и резервный источник питания в виде конденсаторов ultracapacitors.

Неочевидные требования к блоку питания

Дополнительные конденсаторы обеспечивают питание во время переноса информации из DRAM в энер­го­не­за­ви­си­мую Flash-память, автономно выполняемого модулями NVDIMM. Длительность этой процедуры может со­став­лять единицы-десятки секунд.

В отличие от NVDIMM, процессор и системная логика резервным питанием не обеспечены. Это означает, что ин­тер­вал времени, отведенный на запуск и выполнение процедуры Save Routine, отсчитываемый от момента отключения AC-питания, должен быть завершен до разряда фильтрующих конденсаторов блока питания. В примере на рис.2 ин­тер­вал отсчитывается от момента перехода сигнала PowerGood в состояние низкого логического уровня и до фак­ти­че­ско­го от­клю­че­ния выходных напряжений. Отметим, что при таком подходе платформа должна автономно формировать сигнал системного сброса, используя задержанную версию сигнала PowerGood, формируемую не блоком питания, а дополнительной схемой на основании выходных напряжений блока питания. Иначе, сброс центрального процессора произойдет до выполнения процедуры Save Routine по низкому уровню сигнала PowerGood от блока питания.

В зависимости от нагрузки, мощности и качества блока питания длительность данного интервала составляет 10-300 миллисекунд. Начальный этап процедуры сохранения, требующий участия центрального процессора, должен быть завершен за это время. Типовое время выполнения такой процедуры менее 5 миллисекунд.

В этом примере, длительность интервала, отведенного для процедуры Save Routine, составляет 33 миллисекунды

Рис.2 В этом примере, длительность интервала, отведенного для процедуры Save Routine, составляет 33 миллисекунды

Возможен и альтернативный вариант: интервал начинается с момента отключения AC-питания и заканчивается в мо­мент перехода сигнала PowerGood в состояние низкого логического уровня.

Резюме

Как видим, модель WSP + flush-on-fail наиболее эффективная и как это обычно случается, самая дорогостоящая. Ос­нов­ных причин тому две:

  • Процессами сохранения и восстановления информации управляет аппаратное обеспечение. Кроме того, специальные требования предъявляются к качеству блока питания.
  • Совершенная реализация WSP предполагает наличие дублирующих устройств энергонезависимой памяти (Flash Backup) для всей оперативной памяти платформы.