Глава 8. Иллюстрация структуры физического носителя

"Если бы я спросил людей чего они хотят, они бы ответили, что более быстрых лошадей"

Генри Форд

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

За последние несколько лет выбор оборудования носителя претерпел изменения, поскольку в настоящее время на рынке доступно множество вариантов не только систем хранения корпоративного уровня, но и систем для персонального применения. Эти различные варианты хранения подходят для конкретных типов сред или рабочей нагрузки. Например, в ряде ситуаций люди ищут ориентированные на ёмкость решения, в то время как в иных главной заботой выступает максимизация производительности. В любом случае, решение доступно для всяких обстоятельств. Для корпоративных сред производители предлагают массивы хранения, которые способны реализовывать гибридное решение и содержать сочетание этих вариантов.

Большинство протоколов и систем было построено исходя из шпиндельных жёстких дисков. Исключением из этого правила не является и стек хранения в Linux. При обсуждении планирования на блочном уровне мы обнаружили как такие методики как слияние и сращивание сцеплены с механическими устройствами с тем, чтобы росло число последовательных операций. Поскольку данная глава целиком посвящена физической структуре и различным типам устройств, мы обнаружим подробности того, почему шпиндельные устройства медленнее остальных.

Мы начнём с традиционной и наиболее старой формой хранения в наши дни, с вращающихся жёстких дисков. Мы обсудим их физическую структуру, архитектуру и принципы работы. После этого мы перейдём к твердотельным устройствам и обнаружим что отличает их от механических устройств. Мы обсудим их внутреннюю структуру и построение, а также поясним их принципы работы. Также мы кратко обсудим понятие износоустойчивости устройства и увидим чем они отличаются как для механических, так и для твердотельных устройств. Наконец, мы обсудим интерфейс NVMe (Non-Volatile Memory Express, специальной энергонезависимой памяти - интерфейс доступа к твердотельным накопителям, подключённым по шине PCI Express), который произвёл революцию производительности твердотельных устройств.

Мы намерены обсудить следующие основные вопросы:

  • Понимание механических жёстких дисков

  • Пояснение основ архитектуры твердотельных дисков

  • Разобраться с износоустойчивостью устройств

  • Заново открываем SSD при помощи NVMe

Технические требования

Представленный в данной главе материал не зависит от операционной системы. Раз так, нет никаких команд или понятий, которые конкретно привязаны к Linux. Тем не менее, вам бы помогли некие базовые знания относительно доступных в наши дни различных вариантов носителей хранения.

Разбираемся с механическими жёсткими приводами

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

Давайте кратко опишем основные компоненты механического диска:

  • Пластина (platter): Жёсткий диск состоит из множества тонких круглых дисков, называемых пластинами. Все данные жёсткого диска записываются на этих пластинах. Для максимизации ёмкости данные могут считываться и записываться с обеих сторон поверхности пластины - с верхней и с нижней. Поверхность такой пластины намагничена с обеих сторон. Общее число таких пластин и их ёмкость хранения определяют общую ёмкость всего жёсткого диска.

  • Шпиндель: Пластины диска вращаются благодаря мощности шпиндельного мотора диска, который спроектирован на поддержание постоянной скорости. Все пластины жёсткого диска вращаются со скоростью нескольких тысяч rpm (revolutions per minute, оборотов в минуту) со стандартными скоростями шпинделя в 5 400 rpm, 7 200 rpm, 10 000 rpm и 15 000 rpm, поскольку все пластины насажены на единственный шпиндель мотора. Следовательно, все они крутятся одновременно и с одной и той же скоростью.

  • Головка чтения/ записи: Как у новичка, у меня сложилось впечатление, что данные запечатлены на жёстком диске в виде изображения или надписи. Ну, развеем это заблуждение, данные отражаются в виде магнитного сигнала на движущемся носителе. Приводы обладают двумя головками чтения/ записи на пластину, по одной с верхней и с нижней сторон. Во Время записи головка изменяет магнитную ориентацию на поверхности пластины, в то время как при считывании данных эта головка магнитную ориентацию на поверхности своего диска. Интересно отметить, что магнитная головка никогда не касается поверхности своей пластины.

  • Рычаг привода: Сборка рычага привода отвечает за установку головок чтения/ записи. Такой рычаг привода играет критически важную роль при точном позиционировании головок чтения/ записи в конкретном положении, в котором следует считывать или записывать данные.

  • Контроллер: Дисковый контроллер это жизненно важный компонент, который осуществляет контроль всех операций упомянутых ранее компонентов, а также он взаимодействует с системой хоста. Он осуществляет инструкции хоста, управляет головками чтения/ записи и контролирует рычаг привода.

Теперь, когда мы ознакомились с основными компонентами механического диска, давайте взглянем на геометрию механических дисков.

Рассматриваем физическую схему и адресацию

Геометрия жёсткого диска описывает то как данные организованы на пластинах. Такая организация основывается на делении поверхностей пластин на концентрические кольца, называемые треками. Цилиндр это вертикальный раздел, который взаимодействует с соответствующим кольцом по всем пластинам и применяется для того чтобы ссылаться на определённое место на общем диске. Цилиндр составлен одним и тем же номером кольца на каждой пластине. Всякие трек далее делится на более мелкие элементы, носящие название секторов. Такой сектор выступает наименьшим адресуемым элементом на жёстком диске. Мы описывали понятие размера блока в Главе 3. Блок это группа секторов и он выступает свойством файловой системы. Сектор является физическим свойством самого диска и его структура создаётся начальным форматированием производителем данного диска. Изначально наиболее принятым применяемым размером сектора было 512 байт. Однако более современные диски также пользуются секторами в 4кБ. Ниже приводится иллюстрация физической подготовки механического диска:

 

Рисунок 8.1


Структура механического диска

Для адресации физического местоположения на жёстком диске применяется пара методик. Одна из них носит название CHS (cylinders, heads, and sectors, цилиндров, головок и секторов). Собственно физическая геометрия жёсткого диска обычно выражается в терминах CHS. Сочетание номеров CHS может применяться для идентификации любого местоположения на диске. Для нахождения адреса на диске операционной системе хоста требуется знать геометрию CHS конкретного диска.

В наши дния CHS заменена на LBA (logical block addressing, логическую адресацию блоков). LBA это иной вид адресации на диске, которая упрощает управление адресами со стороны операционной системы. LBA пользуется линейной схемой адресации для доступа к физическим данных блоков. При использовании LBA взамен CHS, всякому сектору назначается уникальный логический номер. При его использовании адресация физического диска происходит просто как к отдельному большому устройству, который просто ведёт отсчёт имеющихся секторов начиная с 0. Затем далее это уже задание соответствующего контроллера диска перевода адресов LBA в адресацию CHS. Операционной системе лишь требуется знать размер своего дискового устройства в терминах номеров адресации логических блоков.

{Прим. пер.: Для описания законченной картины геометрии современных шпиндельных дисков стоит отметить тот факт, что в дисках большой ёмкости применяется черепичный (драночный, shingle) метод записи и чтения. При таком методе головка чтения/ записи за одну операцию одновременно записывает (считывает) несколько секторов в одном местоположении (составленную этими секторами "черепицу"). Такой метод доступа к данным сопряжён с дополнительными накладными расходами блочного уровня. А именно: изменение в одном из секторов черепицы потребует повторной записи данных и в остающиеся неизменными сектора черепицы. подробнее}.

Смотрим на плохие секторы

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

Существует два вида плохих секторов - аппаратные плохие секторы и программно определяемые плохие секторы. аппаратные плохие секторы будут обладать допустимыми физическими дефектами, например, неким видом физического воздействия или дефектом при их производстве. Аппаратная ошибка, как правило неисправима и такой сектор не может применяться для последующего хранения данных. Программно определяемый плохой сектор это место на диске, которое идентифицируется в качестве проблемного операционной системой хоста. Такой сектор может быть выявлен самой операционной системой когда значение ECC (error-correcting code, кода с исправлением ошибок) такого сектора не соответствует записанным в этом месте сведениям. Если некоторое приложение пытается выполнит выборку из некого сектора и выявляет что значение ECC не соответствует содержимому этого сектора, это може указывать на наличие программной ошибки сектора. Такие ошибки могут выявляться и исправляться различными методами.

Взглянем на производительность жёсткого привода

При выделении ограничений производительности механических дисков мы часто пользуемся термином позиционирования (seeking) или времени позиционирования (seek time). На время позиционирования ссылаются как на ту величину времени, которую занимает принятие положения головки чтения/ записи на поверхности пластины в правильном треке. Будучи повторно выполняемыми, операции произвольного доступа чрезвычайно затратны для механических дисков. При доступе к данным в произвольном треке значение времени позиционирования будет расти, ибо соответствующей головке чтения/ записи придётся непрерывно перемещаться. Чем ниже значение времени позиционирования диска, тем быстрее обслуживание запросов на ввод/ вывод.

После того как необходимая головка чтения/ записи была размещена в верном треке, её следующей задачей является определение места необходимого сектора под этой головкой. Для достижения этого соответствующая пластина вращается до положения необходимого сектора под этой головкой чтения/ записи. Полное значение времени для выполнения такой задачи носит название задержки вращения. Эта операция зависит от величины скорости мотора шпинделя. Чем выше значение RPM, тем ниже будет величина задержки вращения. И опять же, когда запросы относятся к соседним секторам дорожки, задержка вращения будет ниже. Для считывания и записи произвольных секторов задержка вращения будет выше.

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

Разбираемся с отставанием механических приводов

С самого момента их создания было совершенно очевидно, что механические приводы никоим образом не способны соответствовать значениям скоростей, на которых работают ЦПУ. Время отклика механических приводов измеряется миллисекундами, по сравнению с наносекундами для ЦПУ. Присутствие механических компонентов в такой конструкции также ограничивает общую производительность. Нельзя сказать что не были предприняты усилия по улучшению физической структуры жёстких дисков. К примеру, для повышения производительности, жёсткие диски были оснащены небольшим дисковым кэшем. С годами скорость вращения двигателя шпинделя увеличилась до 15 000 оборотов в минуту. Для повышения производительности также были разработаны пластины меньшего размера. Все эти факторы способствовали существенному повышению производительности механических приводов. Тем не менее, несмотря на всё это даже самые быстро вращающиеся приводы по- прежнему работают слишком медленно по сравнению с ЦПУ. Большая часть времени тратится на перемещение механических частей.

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

Теперь, когда мы получили общее представление о механических устройствах, давайте изучим твердотельные диски и исследуем чем они отличаются от традиционных вращающихся носителей.

Объясняем архитектуру твердотельных приводов

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

Твердотельные накопители для постоянного хранения данных применяют микросхемы флеш- памяти. В связи с этим существует два варианта: флеш память NAND и NOR. Большинство твердотельных накопителей пользуется микросхемами флеш- памяти NAND, так как они обеспечиваю более быстрые времена записи и стирания. Рискуя чересчур углубиться в электронику (наименее любимый мной предмет в колледже), скажу, что флеш- память NAND состоит из транзисторов с плавающим затвором, а электроны хранятся в плавающем затворе. Когда плавающий затвор хранит заряд, он считывается как ноль. Это означает, что в ячейке хранятся данные, вопреки тому как мы это понимаем (вы можете догадаться почему мне не нравилась электроника).

Вот отражены первичные компоненты SSD:

 

Рисунок 8.2


Архитектура SSD

Имеющийся контроллер SSD выполняет разнообразные функции и представляет своему хосту сырое хранилище в флеш- памяти NAND.

Рассматриваем физическую схему и адресацию

Всякая флеш- память NAND в SSD составлена из следующих компонентов:

  • Затворы (Gates): транзисторы плавающих затворов это критически важные компоненты SSD и они отвечают за электропроводность, удержание и высвобождение электрического заряда в ячейках, применяя хранящиеся внутри плавающего затвора электроны.

  • Ячейка (Cell): Это базовый элемент хранения, который способен содержать единственный фрагмент данных при помощи его электрического заряда, представляющего значение его бита (битов). Как мы вскорости обнаружим, ячейки способны хранить либо единственный уровень заряда, либо множество уровней.

  • Байт (Byte): Отдельный байт представлен восемью ячейками.

  • Страница (Page): В SSD страница сопоставима с сектором жёсткого диска и представляет наименьший элемент, в который можно выполнять запись, или который можно считывать. Как правило, страница имеет размер 4кБ, хотя она может быть и больше этого размера.

  • Блок (Block): Блок это собрание страниц некого SSD. Операции очистки в SSD выполняются в терминах блоков, что означает, что все страницы в пределах блока обязаны очищаться совместно.

Изначально, биты SSD хранились в ячейках, которые далее организовывались в страницы. Страницы группировались в блоки, которые, в свою очередь, содержались в матрице (plane), как это проиллюстрировано на Рисунке 8.3. Как правило, микросхема составлена из множества матриц:

 

Рисунок 8.3


Схема кристалла в SSD

Термины SLC и MLC описывают общее число бит, которые хранятся в некой ячейке. Дополнительно к SLC и MLC также существуют флеш- диски TLC (triple-level cell) и QLC (quad-level cell). Добавление большего числа бит в ячейку NAND оказывает существенное воздействие на производительность флеш- памяти NAND. По мере роста числа хранимых в ячейке бит производительность флеш- памяти снижается, в то время как доступная ёмкость растёт. При SLC NAND контроллеру флеш- памяти требуется знать будет ли это 0 или 1. Для MLC NAND её ячейка способна обладать четырьмя значениями - 00, 01, 10 и 11. Аналогично TLC NANAD способна иметь 8 значений, а для QLC это уже 16 значений. Следующая схема отражает взаимосвязь между различными видами SSD:

 

Рисунок 8.4


Сопоставление флешей SLC, MLC, TLC и QLC

Как и механические диски, SSD также для адресации физического местоположения применяют LBA, однако имеются некие дополнительные компоненты, которые вовлечены в данный процесс. Для установления соответствия адресов логических блоков физическим страницам, флеш- память NAND пользуется FTL (flash translation layer, слоем трансляции флеш- памяти). Этот FTL скрывает сложность флеш- памяти NAND и выставляет хосту лишь некий массив адресов логических блоков. Это намеренно сделано для эмуляции механического привода, так как большая часть стека на стороне операционной системы оптимизирована для работы с механическими приводами.

Рассматриваем считывание и запись

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

Подходящим эквивалентом сектору в SSD выступает страница. Нет никакой возможности произвести индивидуальное считывание отдельной ячейки. Операции чтения выравниваются в соответствии с естественным размером страниц самого устройства. Например, принимая во внимание размер страницы в 4кБ, если вы пожелаете считать 2кБ данных, флеш- контроллер выполнит выборку полной страницы в 4кБ. Аналогично, запись также следует этой процедуре. Выравнивание операции записи на странице происходит по размеру страницы. Исходя из размера страницы в 4кБ, запись 6кБ данных применит две страницы по 4кБ.

Стирание, сборка мусора и иллюзия доступного пространства

Когда некое приложение выполняет запись во флеш- память NAND, эта флеш- память обязана выделить чистую страницу для соответствующих новых данных. Очистка (ситрание, erasing) флеш- памяти NAND требует высокого напряжения и когда выполняется на уровне страницы, она способна негативно воздействовать на расположенные рядом ячейки и ограничивать их срок службы. Таким образом, во избежание проблем, SSD удаляет данные на уровне блоков, хотя это и усложняет саму операцию очистки. Операция очистки это критически важный фактор определения продолжительности жизни флеш- памяти NAND. Термин P/E (Program and Erase Cycle, цикл программирования и стирания) отражает срок службы SSD и основывается на значении числа циклов P/E, которые способна выдерживать флеш- память NAND. Когда некий блок записывается и затем стирается, это засчитывается как один цикл. Это очень важно, так как блок может быть повторно записан конечное число раз, сверх которое он уже не способен записывать новые данные вовсе.

Итак, как SSD стирает данные? Допусти, мы записываем на SSD некие новые данные. Такая операция записи, также именуемая операцией программирования, имеет место на уровне страницы. Через некое время мы осознаём, что эти записанные ранее данные подлежат обновлению неким новым содержимым. Здесь имеются два варианта:

  • В блоках имеется достаточно свободных страниц

  • Доступно достаточно свободных страниц, однако все блоки содержат смесь свободных, задействованных и утративших силу (stale) страниц, либо смесь задействованных и устаревших страниц

Допустим, имеются три свободные страницы. Контроллер флеш- памяти запишет соответствующие обновлённые данные в любые свободные страницы, а более старые страницы будут помечены утратившими силу (устаревшими, stale). Такие помеченные устаревшими страницы являются частью блока. Достаточно вероятно, что некие прочие страницы в том же самом блоке содержат используемые данные. Когда страница в блоке требует обновления, контроллер флеш- памяти считывает содержимое всего блока (который содержит упомянутые страницы) в свою память и вычисляет обновление значения необходимой страницы. Затем он осуществляет операцию стирания этого блока. Операция стирания данного блока очищает содержимое всего блока, включая и те страницы, которые отличаются от подлежащих обновлению. Контроллер флеш- памяти затем записывает содержимое предыдущего блока и обновлённые данные упомянутой страницы. Такой процесс стирания носит название увеличения записи (write amplification). Увеличение записи относится к той ситуации, когда число выполняемых запоминающим устройством операций записи превышает число выполняемых устройством хоста операций.

Раз все операции стирания выполняются на уровне блоков, как мы способны высвобождать занимаемое устаревшими страницами место? Естественно, прежде чем их стирать, наш контроллер не будет дожидаться пока все страницы блока превратятся в устаревшие? Если это так, то на диске очень скоро закончатся все свободные страницы. Очевидно, что подобный подход может обладать некоторыми опасными последствиями. Это подводит нас ко второму вопросу - как SSD справится с ситуацией, при которой недостаточно свободных страниц для размещения новых записей, или все имеющиеся блоки содержат сочетание задействованных и устаревших страниц? Для восстановления устаревших страниц операция стирания должны быть применена на уровне блока, но куда мы помещаем все задействованные на данный момент страницы? На нашем следующем рисунке показан конкретно этот сценарий:

 

Рисунок 8.5


Где мы запишем полученные данные?

Именно здесь возникает иллюзия избыточной загруженности. На флеш- накопителе имеется гораздо больше места, чем это видно конечному пользователю. Такое не распределённое пространство зарезервировано контроллером SSD для операций, подобных выравниванию износа и сборке мусора. Данное свободное пространство пригодится в таких обстоятельствах, как необходимость освобождения устаревших блоков. Процесс очистки устаревших блоков носит название сборки мусора (garbage collection). Обычно твердотельные накопители способны обладать ёмкостью, на 20- 40% превышающую заявленную. Производители флеш- накопителей пользуются данным приёмом повсеместно, начиная с применяемых в персональных системах накопителей, вплоть до используемых в корпоративных системах хранения накопителей. Такое дополнительное пространство способствует повышению долговечности и производительности записи SSD.

Взглянем на выравнивание износа

Исходя из ограниченного числа циклов P/E, основная цель операции выравнивания износа состоит в в увеличении продолжительности жизни при уверенности что данные равномерно распределяются по всем страницам. Когда данные в определённой ячейке подлежат изменению, процесс выравнивания износа информирует FTL о необходимости изменения соответствия LBA на указание нового блока. Выравнивание износа помечает старые данные как устаревшие. Как уже пояснялось ранее, текущий блок не должен быть стёрт. Все эти решения принимаются во имя расширения времени жизни ячеек. Например, когда приложение хоста часто обновляет значение определённой ячейки, в контроллер флеш- памяти обновляет один и тот же блок снова и снова, изолятор этой ячейки износится намного быстрее.

Посмотрим на управление плохими блоками

Раз все ячейки способны преодолеть лишь конечное число циклов P/E, важно отслеживать те ячейки, которые превращаются в дефектные и более не могут программироваться или стираться. Исходя из этого, подобная ячейка рассматривается как сбойный блок. Контроллер отслеживает таблицу всех сбойных блоков. Когда страницы в блоке содержат имеющие силу данные, тогда имеющиеся в таком блоке данные копируются в новый блок, а таблица сбойных блоков обновляется.

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

Применение флеш- памяти NAND в SSD превращает твердотельные накопители в реально быстрые. Хотя их производительность по- прежнему не столь высока как у оперативной памяти, она на несколько порядков быстрее чем у шпиндельного жёсткого диска. Отсутствие каких бы то ни было механических компонентов гарантирует, что SSD не подвержен воздействию факторов, ограничивающих производительность механических устройств. Являющиеся ахиллесовой пятой операции произвольного доступа более не вызывают беспокойства при использовании SSD.

Разбираемся где отстают SSD

особенность электронных устройств состоит в том, что, в целом, они рассчитаны на определённый период времени. То же самое относится и к SSD; существует связанный с ними определённый промежуток их жизни. Опять же, чтобы сократить изложение физики и электроники, процесс записи в SSD запасает электроны, а процесс стирания сливает напряжение транзистора с плавающим запором. Данная последовательность событий носит название цикла P/E. Каждая ячейка NAND содержит способствующие удержанию напряжения в ячейке изоляторы. При каждом прохождении цикла P/E изолятор подвергается некоторому повреждению. Степень такого повреждения, по своей природе, ограничена, но накапливается со временем накапливается и, в конечном счёте, изоляторы утратят свои возможности. В результате это может приводить к утечке напряжения, что влечёт за собой изменение состояний между уровнями напряжения. После этого такая ячейка будет считаться неисправной и больше не сможет применяться для хранения. Если своей судьбы достигает слишком много ячеек, накопитель перестаёт работать должным образом. Именно по этой причине механические диски обладают большей износоустойчивостью нежели твердотельные накопители.

Зачастую вы видите, что спецификация SSD будет содержать значение переносимых им числа циклов P/E. Однако это вовсе не означает, что SSD не могут применяться для долговременного хранения. Хотя и имеется связанное с продолжительностью их жизни ограничение, такое ограничение, как правило, достаточно велико. Их можно применять на протяжении многих лет. Имеется большое число инструментов, при помощи которых можно проверять их работоспособность и уровень износа SSD. В таблице 8.1 приведены некоторые общие операции с механическими накопителями и SSD с указанием их основных элементов:

Таблица 8-1. Рабочие элементы SSD и HDD
Устройство Операция Элемент

Механический диск

Чтение

Сектор

Запись

Сектор

Обновление

Сектор

Стирание

Сектор

Управление сбойными блоками

Сектор

SSD

Чтение

Страница

Запись

Страница

Обновление

Блок

Стирание

Блок

Управление сбойными блоками

Блок

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

Прежде чем погрузиться в мир устройств NVMe, давайте кратко коснёмся темы износоустойчивости приводов.

Разбираемся с износоустойчивостью привода

Обычно существует рейтинг долговечности, относящийся как к механическим дискам, так и к SSD. Износоустойчивость накопителя определяет большое число факторов, таких как максимум его производительности, пределы рабочей нагрузки и его MBTF (mean time between failures, среднее время наработки на отказ). По причине противоположности своей природы долговечность механических дисков и SSD измеряется по- разному.

Показатели долговечности для обоих типов накопителей выражаются отличными способами. Как уже пояснялось ранее, ячейки флеш- памяти NAND способны проходить ограниченное число циклов P/E, на которое рассчитаны NAND. Важно отметить, что ячейки NAND изнашиваются лишь при операциях записи (программирования) и стирания. Для операций считывания такие затраты незначительны. Ниже приводятся показатели для измерения значения долговечности SSD:

  • DWPD (Drive Writes per Day, число записей на диск в день): Соотношение DWPD показывает сколько раз за день вы можете перезаписать весь SSD на протяжении его времени жизни

  • TBW (Terabytes written, число записанных терабайт): Показатель TBW представляет сколько данных может быть записано на накопитель за весь срок его службы прежде чем вам, возможно, придётся его заменить.

Если у вас имеется SSD в 100 ГБ с гарантийным сроком в три года и соотношением DWPD равным 1, что означает, что у вас есть возможность записывать на диск 100 ГБ данных каждый божий день, причём на протяжении следующих трёх лет, что означает, что ваше соотношение TBW составит 109 ТБ:

100 GB x 365 days x 3 years ≈109 TB

У механических дисков это иначе, поскольку они не подвержены воздействию циклов P/E. Магнитная поверхность пластин механических дисков поддерживает повторную запись данных. Когда на подлежащем записи физическом месте уже имеются данные, такие существующие данные могут быть перезаписаны новыми данными. Тем не менее, в то время как соотношения SSD подвержены воздействию только операций записи, а не числом операций считывания, в свою очередь, механические диски подвержены воздействию как операций чтения, так и операций записи. Таким образом, соотношение для механических дисков определяется в терминах числа записанных или считанных байт. Такая рабочая нагрузка не имеет официального названия, однако в плане применяемых для SSD термина неофициально мы можем называть его DWRPD (Drive Writes/ Read per Day, число записей/ считываний на диске в день). Воздействие операций считывания и записи на износоустойчивость иллюстрируется Таблицей 8.2:

Таблица 8-1. Износоустойчивость дисков
Тип устройства Соотношение рабочей нагрузки Операция Воздействие на износоустойчивость

Механический диск

DWRPD

Чтение

Снижает

Запись

Снижает

SSD

DWPD

Чтение

Незначительное воздействие

Запись

Снижает

Таблица 8.2 суммирует воздействие операций считывания и записи на оба типа устройств. Реальные значения гарантийного срока будут разниться у различных производителей хранилищ. Пределы рабочих нагрузок для механических устройств также выражается в терминах ТБ данных, которые можно считывать/ записывать за год. При проверке износоустойчивости имейте в виду, что такие термины как DWPD и TBW это всего лишь числа. Критически важно понимать, что гарантийный период выступает основным ключом для определения реальной долговечности. При выборе диска будет лучше руководствоваться и гарантийным сроком, и DWPD.

Теперь давайте поясним ка интерфейс NVMe произвёл революцию для SSD.

Переделываем SSD при помощи NVMe

Для доступа к механическим и твердотельным накопителям имеется ряд транспортных протоколов. Такие протоколы как SATA, SCSI и SAS изначально были разработаны для механических дисков. Таким образом, они в большей степени ориентированы на применение потенциала шпиндельных дисков. С появлением твердотельных накопителей эти протоколы начали применяться и для данного типа дисков. Большинство твердотельных накопителей, в особенности в самом начале, пользовались портами SATA и SAS, как и любые прочие механические устройства. Они бы легко умещались в имеющиеся разъёмы механических приводов и подключались к своей системе через SATA или SAS контроллер. Несмотря на существенный рост производительности при использовании твердотельных накопителей, тот факт, что изначально написанный для механических устройств набор интерфейсов, протоколов и команд применялся к SSD, рассматривался как накладные расходы и широко распространено мнение, что это несколько ограничивает применение флеш- накопителями своего потенциала.

Для таких технологий как флеш- память NAND специально был разработан интерфейс NVMe. NVMe зачастую путают с новым типом устройств, но технически это не так. NVMe это протокол доступа и транспорта к хранилищу для SSD. Он действует как интерфейс взаимодействия, который работает напрямую поверх интерфейса PCIe. Стандартный SSD это устройство с интерфейсами SATA или SAS. Эти диски осуществляют доступ к операционной системе своего хоста через традиционные протоколы SCSI. NVMe SSD применяет физический форм- фактор M2 и пользуется логическим интерфейсом NVMe, разработанным специально для этого типа устройств. {Прим. пер.: Не совсем корректное утверждение, ибо логическим интерфейсом NVMe пользуются также устройства в исполнении стандартных плат с PCIe разъёмом, а также совместимые с 2.5" дисками устройства форм- факторов U2, U3 и подобных им.} NVMe диски получают доступ исключительно при помощи интерфейса PCIe. Со стороны операционной системы хоста для доступа к устройствам NVMe используются отдельные драйверы и протоколы. Короче, запомните следующее:

Все NVMe устройства это SSD, но не все SSD это NVMe устройства.

NVMe оставляет в стороне предпринимаемые традиционные SSD маршруты и напрямую подключается к ЦПУ через интерфейс PCIe, пользуясь слотами PCIe в материнской плате {Прим. пер.: Или же применяя специальные выводы с материнской платы на плату подключения накопителей (backplane).} К тому же, PCIe применяет для устройств хранения четыре трассы (lane), что в результате имеет обмен данными в четыре раза быстрее чем в подключении SATA, который обладает лишь одной трассой (lane). {Прим. пер.: Опять неточность - несмотря на возможность физической совместимости SATA/ SAS соединений и подключений PCIe, в них применяются различные транспортные протоколы и контакты. Строго говоря, SATA интерфейс обладает двумя каналами передачи данных, в то время как у SAS может быть 4 (а также 2 и 1) канала. Скорость обмена SATA составляет до 1.5Гбит/с у SATA rev.1, а также до 3Гбит/с и до 6Гбит/с у SATA rev.2 и rev.3, соответственно (0.1875/ 0.375/ 0.75ГБ/с). Для SAS скорость обмена составляет 1.5, 3, 6 ,12 или 24 Гбит/с (0.1875/ 0.375/ 0.75/ 1.5/ 3ГБ/с). Пропускная способность PCI-Express 2.0 достигает 500 МБ/с или 5 ГТ/с (Гигатранзакций/с) по одной трассе, соответственно 2ГБ/с или 20 ГТ/с для стандарта в 4 трассы (lane), а для PCI-Express 3.0/ 4.0 и 5.0 по четырём трассам (lane) это уже 32/ 64/ 128ГТ/с, или до 4/ 8/ 16ГБ/с, соответственно.} При сочетании NVMe и SSD имеется экспоненциальное увеличение производительности.

Рост производительности происходит не только благодаря мощности оборудования. Для получения в полной мере преимуществ аппаратуры также требует модификации и стек программного обеспечения. Порой аппаратура может быть настолько хороша, насколько хорошо контролирующее её программное обеспечение. К примеру, интерфейсы SATA и SAS поддерживают очередь отдельных команд в 32 и 256 команд, соответственно. С другой стороны, NVMe обладает 64k очередей по 64k команд на очередь {64k = 65 536}. Это разница ошеломительного масштаба. Существует отдельный написанный под NVMe набор команд, который полностью отличается от всех старых протоколов SATA и SAS. Старые протоколы были направленно разработаны под механические устройства и обладали большим объёмом программного обеспечения. В NVMe имеется всего лишь небольшое число команд, что обеспечивает затрату очень небольшого числа циклов ЦПУ при обработке ввода/ вывода.

Поскольку NVMe определяет как интерфейс взаимодействия, так и метод представления хранилища в системе, это делает возможным применение единственного драйвера в общем программном стеке для управления таким устройством. С целью поддержки необходимых функциональных возможностей, для наследуемых протоколов каждому производителю требуется разрабатывать драйвер для каждого отдельного устройства. Рисунок 8.6 суммирует иерархию стека хранения и в то же время выделяет различия в накладных расходах при использовании протоколов NVMe и SCSI:

 

Рисунок 8.6


Сопоставление стека NVMe и SCSI

Когда речь заходит о производительности, устройствам NVMe проще предлагать более высокие скорости обмена для каждого доступного SSD. Производительность считывания и записи твердотельных накопителей NMVe намного превосходит производительность стандартных твердотельных устройств. Благодаря своей исключительной производительности твердотельные накопители NVMe стоят значительно дороже стандартных твердотельных накопителей, что неудивительно, поскольку интерфейс и протокол NVMe были разработаны для полного применения всех возможностей SSD. {Прим. пер.: Сомнительное утверждение, которое можно списать на устаревшие данные. В реальности аппаратная часть NVMe проще SAS и SATA, а потому дешевле, что и демонстрирует текущее соотношение цен.}

Выводы

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

Мы обсудили три наиболее распространённых на современном рынке варианта хранилищ - вращающиеся жёсткие диски, SSD и NVMe. Шпиндельные механические диски это один из наиболее старых видов носителей хранения из доступных на рынке в наши дни. За последние десятилетия они претерпели ряд изменений, которые до некоторой степени улучшили их производительность. Поскольку они состоят из ряда механических компонентов, в их производительности существуют жёсткие ограничения. В конце концов, двигатель вращающего поверхности пластин шпинделя может вращаться только с конечной скоростью. По причине ограничений жёстких дисков появились твердотельные устройства. SSD не обладают механическими частями и состоят исключительно из электронных компонентов. Для постоянного хранения данных они применяют флеш- память NAND, что делает их чрезвычайно быстрыми по сравнению с механическими дисками. По причине того, что применяются процессы записи и стирания и они выполняют утечку напряжения с ячеек, твердотельные накопители способны выдерживать ограниченное число циклов программирования и стирания, что ограничивает их время жизни.

Ранее SSD были ограничены применением протоколов и интерфейсов, первоначально разработанных для механических устройств. Тем не менее, с появлением NVMe это ограничение исчезло. NMVe намеренно были разработаны под флеш- память NAND и служат в качестве метода доступа и транспортного протокола к хранилищу для SSD. В отличии от традиционных SSD, NVMe работают напрямую через интерфейс PCIe, что делает их гораздо более быстрыми.

Теперь мы достигли окончания Части III этой книги. Я надеюсь, что вы нашли её сведения полезными. В Части IV мы обсудим и изучим некоторые инструменты и методики устранения неисправностей и анализа производительности хранилищ.