Тестирование SSD-накопителя Plextor PX-64M2S

Технические характеристики

Методика тестирования

Результаты тестирования

Последовательное и случайное чтение

Последовательная запись

Случайная запись

Заключение

 

 

Технические характеристики

Прежде чем переходить к детальному анализу результатов тестирования SSD-накопителя Plextor PX-64M2S, давайте рассмотрим его характеристики. Итак, речь идет о 2,5-дюймовом SSD-диске с интерфейсом SATA III (SATA 6 Гбит/с) на основе NAND флэш­памяти c MLC-ячейками (каждая ячейка памяти является четырехуровневой и может хранить два бита информации). Емкость диска составляет 64 Гбайт. Напомним, что в SSD-дисках доступная для использования емкость указывается не в двоичных (GiB), а в десятичных (GB) гигабайтах, то есть 1 Гбайт равен 109 байт. Поэтому емкость этого диска, доступная для использования, составляет примерно 60 двоичных гигабайт (60 GiB).

Если точнее, то реальная емкость SSD-диска Plextor PX-64M2S составляет 64 GiB (двоичных гигабайт), однако часть памяти используется как резервная область диска и недоступна для записи данных. Собственно, резервная область диска как раз и представляет собой разницу между 64 двоичными и 64 десятичными гигабайтами (64 GiB - 64 GB), в данном случае ее размер равен примерно 4 GiB.

 

Рисунок

Согласно приводимой производителем спецификации, при подключении SSD-диска Plextor PX-64M2S по интерфейсу SATA 6 Гбит/с скорость последовательного чтения достигает 370 Мбайт/с, а скорость последовательной записи — 110 Мбайт/с.

Заявляемая производительность случайного чтения составляет 15 000 IOPS при размерах блоков 4 Кбайт и глубине очереди задач 32. Нетрудно подсчитать, что при такой производительности скорость случайной записи блоками по 4 Кбайт должна составлять порядка 60 Мбайт/с. Скорость случайной записи блоками по 4 Кбайт заявляется равной 9000 IOPS (при глубине очереди задач 32), что соответствует 35 Мбайт/с.

SSD-накопитель Plextor PX-64M2S основан на контроллере Marvell 88SS9174 с поддержкой команды TRIM. Напомним, что при удалении файла операционная система посылает команду TRIM контроллеру диска и дает ему знать, какие страницы памяти могут быть перезаписаны, то есть содержат устаревшие данные. Соответствующие страницы памяти помечаются к удалению и могут быть использованы в процедуре Garbage Collection.

Поддержка команды TRIM позволяет уменьшить показатель Write Amplification и тем самым способствует сокращению циклов перезаписи каждой отдельной ячейки памяти. Для работы команды TRIM необходима поддержка со стороны как ОС, так и драйвера диска (драйвера контроллера на системной плате) и контроллера самого SSD-диска. Команда TRIM реализована в операционной системе Windows 7, а также в ядре Linux, начиная с ревизии 2.6.28. Что касается поддержки команды TRIM в драйверах контроллера на системной плате, то она предусмотрена в стандартном драйвере Microsoft, а также в драйвере Intel RST (в случае использования чипсетов Intel). Отметим, что в настоящее время команда TRIM не поддерживается для RAID-массивов.

Кроме того, контроллер Marvell 88SS9174 реализует постоянную процедуру Garbage Collection, которая в спецификации упоминается как Instant Restore (постоянное восстановление). Также в спецификации указывается, что в SSD-диске Plextor PX-64M2S применяется кэш­буфер емкостью 128 Мбайт на базе памяти DDR3.

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

Методика тестирования

После краткого обзора характеристик диска Plextor PX-64M2S можно перейти к результатам его тестирования.

Для тестирования мы использовали стенд следующей конфигурации:

  • процессор — Intel Core i7-2600K (Sandy Bridge);
  • системная плата — ASUS P8P67;
  • чипсет системной платы — Intel P67 Express;
  • диск с операционной системой — Seagate Barracuda ST31500341AS (7200 RPM, 1,5 Тбайт);
  • режим работы SATA — AHCI;
  • драйвер дисков — Intel RST 10.1;
  • контроллер диска — интегрированный в чипсет Intel P67 Express-контроллер.

При тестировании применялась операционная система Window 7 Ultimate (32 bit). Дополнительно устанавливался драйвер Intel RST 10.1, а сам SSD-диск Plextor PX-64M2S подключался к порту SATA III, реализованному через контроллер, интегрированный в чипсете Intel P67 Express. К еще одному SATA-порту подключался HDD-диск, на который устанавливалась операционная система и все необходимые для тестирования приложения. В настройках BIOS для всех SATA-портов задавался режим работы AHCI.

Для тестирования мы использовали утилиту IOmeter 1.1.0 (версия от 2010.12.02), которая представляет собой очень мощный инструмент для анализа производительности накопителей (как HDD, так и SSD).

Подробно особенности использования утилиты IOmeter при тестировании SSD-дисков мы рассматривали в статье «Тестирование SSD-диска Intel X25-M 160 Гбайт», опубликованной в сентябрьском номере журнала за 2010 год, а потому лишь напомним, что утилита IOmeter позволяет работать как с дисками, на которых создан логический раздел, так и с дисками без такового. В случае если проводится тестирование диска без созданного на нем логического раздела, то IOmeter работает на уровне логических блоков данных, то есть вместо операционной системы передает команды контроллеру на запись или чтение LBA-блоков.

Если на диске создан логический раздел, то первоначально утилита IOmeter создает на диске файл, который по умолчанию занимает весь логический раздел (в принципе, размер этого файла можно изменять, указав его в количестве 512 байтных секторов), и далее уже работает с этим файлом, то есть считывает или записывает (перезаписывает) отдельные LBA-блоки в пределах этого файла. Но опять-таки IOmeter работает в обход операционной системы, то есть непосредственно посылает запросы контроллеру на чтение/запись данных.

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

Утилита IOmeter позволяет задавать размер блока запроса (Transfer Request Size) на запись/чтение данных; тест можно проводить как для последовательных (Sequential) чтения и записи, то есть когда LBA-блоки считываются и записываются последовательно друг за другом, так и для случайных (Random) чтения и записи, когда LBA-блоки считываются и записываются в произвольном порядке. При формировании сценария нагрузки можно задавать время теста, процентное соотношение между последовательными и случайными операциями (Percent Random/Sequential Distribution), а также процентное соотношение между операциями чтения и записи (Percent Read/Write Distribution).

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

Во всех сценариях загрузки применялись запросы на передачу данных блоками следующих размеров: 512 байт, 1, 2, 4, 8, 16, 32, 64, 128, 256, 512 Кбайт и 1 Мбайт.

При тестировании SSD-диска во всех сценариях нагрузки мы устанавливали выравнивание запросов по размеру 512-байтного сектора.

В случае тестирования диска с созданным логическим разделом с файловой системой NTFS размер раздела соответствовал всей доступной области диска, а если диск тестировался без созданного логического раздела, то в настройках утилиты IOmeter указывалось, что в тестах необходимо использовать всё пространство диска (настройка по умолчанию).

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

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

Естественно, в случае чтения (как последовательного, так и случайного) неважно, идет ли речь о новом или ранее использовавшемся диске (скорость чтения не может от этого зависеть). А вот при операциях записи скорость может зависеть от состояния диска.

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

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

Собственно, именно поэтому при тестировании на скорость последовательной записи мы использовали новый диск (поскольку сами операции последовательной записи постепенно приводят диск к состоянию нового), а вот скорость случайной записи определялась только на ранее использовавшемся диске.

Для того чтобы привести диск к состоянию ранее использовавшегося, мы применяли операцию случайной записи блоками по 32 Кбайт в течение 12 часов.

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

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

Если диск ранее использовался, то наиболее быстрое (скачкообразное) изменение скорости случайной записи происходит в течение первых нескольких секунд после начала тестирования. И связано это с тем, что в первые несколько минут нагрузки скорость будет большой за счет того, что, во-первых, не используется процедура Garbage Collection, а во-вторых, таблица соответствия физических и логических блоков первоначально размещается в кэш­буфере на основе DDR-памяти. По мере увеличения числа запросов размер таблицы соответствия увеличивается, и, во-первых, ее необходимо оптимизировать (с чем связано резкое падение производительности), а во-вторых, она размещается уже не в DDR-памяти, а во флэш­памяти самого диска. Отметим, что если тест прервать на несколько минут, когда скорость случайной записи стабилизируется, а потом возобновить, то все повторится, то есть скорость случайной записи станет очень высокой, но буквально через несколько секунд скачкообразно снизится. Это говорит о том, что за время паузы контроллер диска успевает оптимизировать таблицу соответствия.

Если диск новый, то характер изменения скорости случайной записи на такой диск существенно иной. Скорость случайной записи остается достаточно высокой в течение длительного времени (нескольких минут), после чего скачкообразно снижается (видимо, это связано с тем, что активизируется процедура Garbage Collection), а затем продолжает постепенно снижаться в течение нескольких часов по мере уменьшения свободного места на диске. В качестве иллюстрации к вышесказанному на рис. 1 приводится график зависимости скорости случайной записи блоками по 4 Кбайт от времени для ранее использовавшегося диска, а на рис. 2 — для нового (процесс «старения»).

 

Рисунок

Рис. 1. Зависимость скорости случайной записи блоками по 4 Кбайт
от времени для ранее использовавшегося диска

Рисунок

Рис. 2. Зависимость скорости случайной записи блоками по 4 Кбайт
от времени для нового диска

Для ранее использовавшегося диска начальная скорость случайной записи составляет 23 Мбайт/с, но уже через 15 с после начала тестирования она падает до среднего значения 1,7 Мбайт/с (см. рис. 1).

Для нового диска начальная скорость случайной записи составляет 27 Мбайт/с, но уже через 15 мин после начала тестирования эта скорость падает до среднего значения 9 Мбайт/с, а затем на протяжении нескольких часов постепенно снижается до стабильного уровня в 1,7 Мбайт/с (см. рис. 2).

В нашем тестировании мы измеряли только установившуюся скорость случайной записи для ранее использовавшегося диска как с созданным логическим разделом с файловой системой NTFS, так и без него. Для этого в настройках IOmeter время теста с каждым запросом на передачу блока данных составляло 1 час, но первые 10 мин работы (этого более чем достаточно для стабилизации скорости) не учитывались в расчете средней скорости (утилита IOmeter позволяет реализовать такую настройку теста).

Во всех остальных сценариях нагрузки время теста с каждым запросом на передачу блока данных составляло 10 мин. Также отметим, что во всех перечисленных тестах мы задавали в настройках IOmeter глубину очереди задачи (# of Outstanding I/Os) равной 4, что типично для пользовательских приложений.

Результаты тестирования

Последовательное и случайное чтение

Результаты тестирования в режиме последовательного и случайного чтения диска без созданного на нем логического раздела показаны на рис. 3. Как видите, максимальная скорость последовательного чтения составляет 355 Мбайт/с. При этом максимальное значение скорости чтения достигается при размере блока в 32 Кбайт.

 

Рисунок

Рис. 3. Зависимость скорости чтения от размера блока
для диска без созданного логического раздела

Результаты тестирования в режиме последовательного и случайного чтения диска с созданным на нем логическим разделом показаны на рис. 4. Максимальная скорость последовательного чтения в этом случае составляет 341 Мбайт/с, причем достигается она при размере блока 32 Кбайт.

 

Рисунок

Рис. 4. Зависимость скорости чтения от размера блока
для диска с созданным логическим разделом

Интересно отметить, что скорость последовательного чтения оказывается выше скорости случайного чтения как для диска с созданным логическим разделом, так и для диска без него. На самом деле это довольно странный результат, поскольку в NAND флэш­памяти просто нет причин, которые могли бы привести к разнице в скорости последовательного и случайного чтения.

Последовательная запись

Результаты тестирования для последовательной записи нового диска с логическим разделом и без него показаны на рис. 5.

 

Рисунок

Рис. 5. Зависимость скорости последовательной записи
от размера блока для нового диска

Прежде всего отметим, что разница в скорости последовательной записи для диска с логическим разделом и без него имеется только при размере блока менее 8 Кбайт. Максимальная скорость последовательной записи составляет 82 Мбайт/с и достигается при размере блока 8 Кбайт для диска с логическим разделом и при размере блока 4 Кбайт для диска без логического раздела. Как видите, до заявляемых производителем 110 Мбайт/с этот диск явно не дотягивает.

Случайная запись

Результаты тестирования для случайной записи ранее использовавшегося диска с созданным логическим разделом и без него показаны на рис. 5. Как видите, реальная скорость случайной записи блоками по 4 Кбайт составляет примерно 1,6 Мбайт/с, а никак не 35 Мбайт/с, то есть более чем на порядок ниже значения, заявляемого производителем. Однако обвинять производителя во лжи мы бы не стали. Конечно же, те цифры, которые заявляет производитель, взяты им не с потолка. Как мы уже отмечали, скорость случайной записи меняется со временем: в начале теста она составляет десятки мегабайт в секунду, но по прошествии нескольких минут скачкообразно падает до нескольких мегабайт в секунду. На рис. 6 показан график зависимости скорости случайной записи блоками по 4 Кбайт от времени.

 

Рисунок

Рис. 6. Зависимость скорости случайной записи
от размера блока для ранее использовавшегося диска

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

Заключение

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

К серьезным недостаткам диска Plextor PX-64M2S можно отнести невозможность самостоятельного обновления прошивки контроллера.

Особенности функционирования SSD-дисков

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

Вообще, процесс записи информации на SSD-диски сильно отличается от аналогичного процесса с HDD-дисками. Для того чтобы объяснить эти явления, рассмотрим более подробно процессы записи на HDD- и SSD-диски.

В случае жестких HDD-дисков размер сектора равен 4 Кбайт (в новых моделях) или 512 байт. Для адресации секторов (блоков) на диске используется метод LBA (Logical Block Addressing), при котором каждый блок, адресуемый на жестком диске, имеет свой порядковый номер.

Если данные записываются, к примеру, в блок LBA c определенным номером, то это означает, что они будут размещаться в определенном месте (на конкретных цилиндре, дорожке и секторе) на диске. И сколько бы раз ни перезаписывался этот блок, данные всегда будут помещаться в одно и то же физическое место на диске, соответствующее номеру блока LBA. Если данные записываются в LBA-блоки с разными номерами, то это означает, что на диске они будут размещаться в разных мес­тах, которые соответствуют номерам LBA-блоков. Если, к примеру, требуется записать на HDD-диск какой-либо файл, то первоначально он разбивается на блоки, каждому из которых присваивается определенный логический LBA-номер, а каждому логическому LBA-номеру соответствует жестко заданное место на диске.

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

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

Во флэш-памяти данные преимущественно записываются последовательно, то есть порциями по 4 Кбайт в следующую по порядку свободную страницу флэш-памяти. При этом логический адрес записываемой страницы (LBA) сопоставляется с физическим адресом (PBA), то есть с адресом расположения во флэш-памяти.

Соответствие между логическими и физическими адресами (LBA-PBA mapping) приведено в специальной таблице, размещенной в оперативной памяти SSD-диска.

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

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

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

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

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

Для того чтобы использовать блоки со страницами, помеченными на удаление, применяется метод переноса данных с помощью пустых и резервных блоков. Даже если пустых блоков в SSD-диске уже не осталось, всегда имеется определенное количество резервных блоков, применяемых для переноса данных. Перед тем как удалить страницу с устаревшими данными, нужно переместить из соответствующего блока страницы с актуальными данными в резервный свободный блок и уже потом удалить весь блок, содержащий страницы с устаревшими данными. Соответственно мы получаем частично занятый блок с перемещенными данными, доступный для записи, и пустой блок, который становится резервным. Однако в результате такого перемещения данных получается, что на SSD-диск приходится записывать больше данных, чем требуется. К примеру, если необходимо записать всего одну страницу (4 Кбайт) и для этого нет свободного блока, то прежде нужно найти блок со страницами, помеченными на удаление. Если имеется блок, в котором помечена на удаление всего одна страница, то нужно переместить из этого блока в резервный блок остальные 127 страниц и дополнить его той одной страницей, которую нужно было записать. Затем блок со страницей, помеченной на удаление, стирается и становится резервным. Получается, что для записи всего одной страницы (4 Кбайт) приходится записывать 128 страниц (512 Кбайт), а кроме того, тратится много времени на чтение всего блока и его стирание. Именно поэтому скорость записи на новый диск (на который данные никогда не записывались) и на уже заполненный может кардинально различаться. Для того чтобы подчеркнуть принципиальную разницу в скорости записи на пустой и заполненный диски, используется коэффициент усиления записи (Write Amplification), который показывает, во сколько раз больше данных приходится записывать, чем реально требуется. При записи на пустой диск коэффициент усиления записи равен единице, а при записи на заполненный диск его значение может колебаться от 2 до 25.

Рассмотренный пример является несколько идеализированным — в реальности механизм перемещения данных, то есть избавления от блоков со страницами, помеченными к удалению, применяется по мере заполнения диска, причем с помощью как пустых, так и резервных блоков. Эта процедура называется сбором мусора (Garbage Collection).

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

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

Теперь нужно выяснить, откуда берутся те самые резервные блоки, которые применяются для перемещения данных. Если имеется SSD-диск, емкость которого составляет 120 Гбайт, то реально для записи доступно 120 десятичных, а не двоичных гигабайт. Разница между емкостью диска в двоичной и десятичной интерпретации как раз и составляет резерв блоков для перемещения данных (резервная область). Важно отметить, что резервная область диска — это не какой-то выделенный участок блоков памяти. Резервные блоки как бы «размазаны» по всему диску, более того — их расположение динамически меняется во времени. Любой блок памяти может быть и резервным, и доступным для записи.

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

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

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

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

Еще одна принципиальная разница между случайной и последовательной записью заключается в принципах формирования и оптимизации таблицы соответствия LBA-PBA. Строго говоря, речь идет не просто о таблице, а о гораздо более сложной структуре. Не вникая в детали, отметим, что данная таблица не содержит отдельных записей для каждого сектора, а оперирует блоками переменной длины — чем больше эти блоки, тем меньше записей в таблице требуется. Более того, по мере заполнения такой таблицы начинается процедура ее оптимизации, что заметно отражается на производительности диска.

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

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

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

Как уже отмечалось, наиболее слабым местом всех SSD-дисков является процедура случайной записи. Однако есть несколько простых способов, позволяющих немного повысить скорость случайной записи. Напомним, что скорость случайной записи зависит от количества резервных блоков. На этом явлении основан один из прос­тых способов увеличения скорости случайной записи, который заключается в принудительном увеличении размера резервной области. Для этого достаточно создать на диске логический раздел, размер которого меньше физического размера диска. В этом случае не используемое для логического раздела пространство автоматически становится резервной областью диска. Правда, данный способ годится только для нового диска, на котором до этого не создавалось логических разделов. Если же на диске первоначально был создан логический раздел по размеру всего диска, который ранее использовался, то создание нового логического раздела не приведет к ожидаемым результатам. В этом случае диск нужно сначала почистить, то есть принудительно очистить все блоки памяти. Обычная операция форматирования при этом помогает не всегда (это зависит от операционной системы, модели SSD-диска и версии прошивки диска), поэтому для очистки дисков иногда приходится применять специальные утилиты (например, Paragon Disk Wiper 2010).

Другой способ повышения производительности SSD-дисков заключается в применении специальной команды TRIM.

Если операционная система и SSD-диск поддерживают команду TRIM, то при удалении некоторого файла с диска ОС посылает команду TRIM-диску и дает ему знать, что данные из определенного набора страниц могут быть перезаписаны, то есть соответствующие страницы памяти помечаются к удалению и могут применяться в процедуре Garbage Collection. Важно отметить, что сама по себе команда TRIM не приводит к физическому удалению данных. Преимущество команды TRIM заключается в том, что с ее помощью можно увеличить количество блоков, содержащих страницы, отмеченные к удалению, и тем самым повысить эффективность процедуры Garbage Collection при выборе блока с наибольшим количеством страниц, отмеченных к удалению. Тем самым команда TRIM способствует увеличению производительности диска, минимизируя избыточную запись при перемещении данных. Кроме того, использование команды TRIM позволяет снизить число перемещений данных в процедуре Wear Leveling.

Для работы команды TRIM необходима поддержка со стороны как ОС, так и SSD-диска. Команда TRIM реализована в операционной системе Windows 7, а также в ядре Linux, начиная с ревизии 2.6.28. Кроме того, все основные производители SSD-дисков объявили о поддержке этой команды. Тем не менее не все старые SSD-диски ее поддерживают.

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

В начало В начало

КомпьютерПресс 04'2011


Наш канал на Youtube

1999 1 2 3 4 5 6 7 8 9 10 11 12
2000 1 2 3 4 5 6 7 8 9 10 11 12
2001 1 2 3 4 5 6 7 8 9 10 11 12
2002 1 2 3 4 5 6 7 8 9 10 11 12
2003 1 2 3 4 5 6 7 8 9 10 11 12
2004 1 2 3 4 5 6 7 8 9 10 11 12
2005 1 2 3 4 5 6 7 8 9 10 11 12
2006 1 2 3 4 5 6 7 8 9 10 11 12
2007 1 2 3 4 5 6 7 8 9 10 11 12
2008 1 2 3 4 5 6 7 8 9 10 11 12
2009 1 2 3 4 5 6 7 8 9 10 11 12
2010 1 2 3 4 5 6 7 8 9 10 11 12
2011 1 2 3 4 5 6 7 8 9 10 11 12
2012 1 2 3 4 5 6 7 8 9 10 11 12
2013 1 2 3 4 5 6 7 8 9 10 11 12
Популярные статьи
КомпьютерПресс использует