SSD : Что о них нужно знать

Год назад я купил себе 4 SSD: 2x 30Gb и 2x 60Gb OCZ Vertex. Своими впечатлениями, граблями, и особенностями использования (в том числе, и в серверном окружении) этих(и вообще) SSD я и хочу поделится.

В общих чертах

Основное отличие SSD от HDD очевидно – там все во флеш памяти, чтение из которой очень быстро, запись – тоже достаточно быстрая, медленно только стирать. Также, у флеш-памяти ограничен ресурс по количеству стирания (разрушается диэлектрик, изолирующий заряд в ячейке памяти). Существуют 2 основных типа флеш-памяти: MLC и SLC. Основное отличие – в SLC на 1 ячейку 1 бит данных, в MLC – от 2 до 3 (соответственно, нужно уметь различать 4-8 уровней заряда). Т.к. порог ошибки в MLC-памяти намного ниже, то и ресурс получается меньше.
SLC выдерживает порядка 100’000 стираний, MLC – 10’000 (старая, 2-х битовая), и до 3-5’000 (новая, 2-3 битовая, 34нм). Тенденция грустная – чем новее чипы памяти, тем меньше ресурс перезаписи.

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

Подробнее о ресурсе дисков

Предположим, у вас 60Гб диск (в реальности там еще 4Гб резерв), и вы пишите по 20Гб данных в день (в том числе изменения. Изменение 1 байта на диске = 4кб записи). Тогда если у вас новая MLC флеш-память, на диске свободно около 30%, диск прослужит вам порядка 0.3*60*5000/20 = 12.3 года. Эти расчеты касаются дисков с современными контроллерами (Intel, Indilinx – отличить их можно сразу по наличию 32Мб+ кеш памяти).
Конечно, если забить диск на 90%, и писать с максимальной скоростью, по моим расчетам диск можно убить за 1-2 недели (я даже думал пожертвовать одним диском ради эксперимента, но на форуме OCZ меня отговорили )
Однако, люди, работающие с флеш памятью говорят, что 10’000 – это гарантированное число перезаписей, а лишь небольшой процент ячеек выйдет из строя после 10’000 перезаписей(контроллер их пометит и будет работать как положено), основная масса выдержит больше.

Также, в современных прошивках степень «использованности» флеш-памяти можно контролировать через SMART, но лучше на этом сильно не зацикливаться :-)
Ну и наконец, когда кто-то встретится с полным исчерпанием ресурса – говорят прогревание (150С+) помогает частично восстановить ресурс флеш-памяти, думаю через пару лет местные сервис центры освоят новые услуги «восстановление SSD» и «перепайка флеш-памяти» :-)

Оптимизации системы

Для того, чтобы диск прослужил вам долго, нужно все что часто меняется (temp, кеш браузера, индексы) вынести на HDD, отключить время последнего чтения файлов (fsutil behavior set disablelastaccess 1). В Windows XP при форматировании SSD разделы нужно «выравнивать», иначе SSD придется делать 2 чтения вместо одного (Windows XP делает смещение первого раздела в 63 сектора, а нужно кратно степени двойки). Windows Vista/7 выравнивают диски уже правильно.
В Linux – монтировать диски с опцией noatime, все что ненужно – писать в tmpfs.
Для обоих систем – если прошивка SSD знает команду TRIM, и у операционной системы есть поддержка (последние ядра Linux, Windows 7) – то SSD сможет эффективнее стирать удаленные данные что даст меньшее падение производительности из-за внутренней фрагментации (об этом ниже).

Как это работает внутри

Флеш-память пишется блоками по 4кб, а стирается по 512кб (бывает по разному немного). Стирание также достаточно медленная операция. Старые контроллеры (JMicron в основном, отличить можно по отсутствию кеш-памяти) – как получали данные, так их сразу и писали. Если нужно было изменить в случайном месте 4кб данных, им приходилось каждый раз стирать целый блок 64-512кб. Это было оооочень медленно – жалкие 8-10 операций случайной записи в секунду – это намноооого медленнее, чем даже обычный жесткий диск (80+ операций случайной записи без учета кеша).

Современные контроллеры (Intel, все Indilinx) стирают блоки заранее, и делают полный “remap” 4кб блоков: если вы меняете/пишите 4кб данных – они записываются в новое место, которое заранее было стерто. Таким образом, получается хорошая скорость на записи, по крайней мере, пока у контроллера хватает предварительно стертых блоков.
Отсюда вытекает и их проблема: фрагментация подготовленного места/файлов. По мере работы, особенно когда на диске мало свободного места, и данные и свободное место оказывается «размазано» ровным слоем по всему диску, и контроллеру может быть не просто найти 512кб последовательных пустых блоков, чтобы стереть. Тут и происходит некоторое падение общей производительности (до 30-50%).

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

Кстати, есть веселый секрет, тщательно скрываемый производителями: т.к. SSD клепают на одних и тех же контроллерах без изменений в схеме, прошивки с полной переинициализацией для контроллеров на Indilinx Barefoot(например 1.1 прошивка для OCZ Vertex) получаются «универсальными» - можно сделать из OCZ Corsair и обратно – смотря какая прошивка больше нравится :-) Производитель конечно негодует, и потому такие прошивки решили больше пользователям не давать :-) Однако всегда нужно помнить, что у каждой прошивки есть ограниченный набор поддерживаемых чипов флеш-памяти.

SSD и RAID

К сожалению, большинство RAID-контроллеров до сих пор не имеют поддержки TRIM = не смогут использовать все возможности SSD. Также, многие контроллеры, в том числе и аппаратные имеют слишком дохлые процессоры, чтобы обрабатывать гиганское количество запросов, обрабатываемых SSD. Приятное исключение – ICH10R, хоть и софтовый, по скорости он «уделывает» многих: суммарный предел скорости 660 Мб/сек за бесплатно. К счастью, производители усиленно работают над поддержкой TRIM, и скоро она должна быть доступна везде.

О надежности SSD

Казалось бы, нет движущихся частей – все должно быть очень надежно. Ан нет. Любая электроника ломается, в том числе и SSD. Но самый большой источник проблем – прошивка. На данный момент, для контроллеров Indilinx Barefoot только-только начала стабилизироваться прошивка – до этого там регулярно бывали критические баги, вплоть до потери данных: структуры данных очень сложные, и если контроллер их запорет – восстановить данные становится невозможно. В таких случаях помогает прошивка с уничтожением всех данных, когда заново создаются служебные структуры данных. У Intel также были косяки, приводящие к уничтожению всех данных, так что это общая проблема.

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

Приведу пару примеров:

1) На форуме OCZ выложили бета-версию прошивки 1.42b, и сказали что её уже оттестировали и 99% что оно пойдет в релиз. Я как раз отдавал сервер в датацентр с SSD, и прошил туда эту прошивку. Через 2 месяца захожу на форум – а там паника: в прошивке нашли баг приводящий к повреждению данных, и необходимо откатываться. А мне до сервера 900км, а 2-3 часа удаленных рук в ДЦ стоили бы как новый SSD :-)

2) Недавно утром включаю компьютер – а один из SSD не обнаруживается (с тогда еще последней прошивкой 1.5). Оказалось, были повреждены внутренние структуры данных, восстановлению не подлежит. Прошил на 1.1 с уничтожением всех данных, затем 1.3, 1.4, 1.5 и наконец 1.6. Забил диск под завязку – читаю с побайтовой проверкой – все в порядке. И такой случай – не такая редкость. (мне еще повезло, у меня SSD со старой памятью. А у новых – прошивка 1.1 их не поддерживает, и тогда восстановить работоспособность самостоятельно невозможно)

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

О безопасности SSD

В современных SSD данные не удаляются сразу после того, как вы удалили файл на диске. Даже если вы перепишете файл по верху нулями – физически данные еще остаются, и если чипы флеш-памяти достать, и прочитать на программаторе – можно найти 4кб кусочки вашего сверх-секретного документа. Полное стирание данных стоит ждать тогда, когда на диск будет записано данных равное количеству свободного места + объем резерва (~4 Гб для 60Гб SSD). Но не гарантированно. Если секретный документ попал на «изношенную» ячейку, следующая запись в неё может быть и через пару сотен гигабайт данных…

Потребление энергии

По сравнению с 2.5’ 5400RPM ноутбучными винчестерами – в активном режиме конечно меньше, а вот во время простоя – SSD проигрывает. Ему то еще надо заниматься фоновыми задачами, а у HDD потребление почти нулевое. Поэтому рассчитывать на особое увеличение длительности автономной работы – не стоит.

Скорость работы и личные впечатления

SSD блещут на случайном чтении мелкими блоками: 10-20 тысяч мелких случайных чтений в секунду – плевое дело. Загрузка программ и системы – небо и земля. Раньше Photoshop грузился 12 секунд (после старта системы, без ReadyBoost/SuperFetch – с 30Гб раздела на WD Raptor 150Gb), сейчас – 4 секунды (3 в RAID-0). Скорость линейного чтения – 440Мб/сек, записи – 360-400 Мб/сек. В любых сетевых играх всегда прогружаюсь первым :-) Да и ощущение совсем другое: раньше когда с моего Raptor-а что-то грузилось – хруст стоял на пол комноты, было ощущение что компьютер надрывается из последних сил. Сейчас – все бесшумно, как будто это не стоит никаких усилий. В общем, впечатление по работе на десктопе крайне положительные. На нетбуке (Lenovo S10) – Windows 7 бегает как молодая, никаких тормозов.

Работа на сервере

3 месяца диск провел на web-сервере у Агавы. Нагрузка была небольшая, ни о каких тормозах не могло быть и речи. Я бы не рекомендовал ставить на MLC SSD базы данных, а вот nginx на раздачу статики через гигабитный канал – так и просится, забить можно будет даже 2x1Gbit канал.

Что покупать и что не покупать

Конкретный производитель SSD не так важен, как производитель контроллера.
Intel (Kingston) – достаточно быстро и дорого, Indilinx (OCZ, Corsair и другие) – дешевле, где-то медленнее, где-то быстрее (особенно последний контроллер Sandforce). Главное отличие – наличие кеш-памяти, 64Мб и выше.
Ни в коем случае нельзя покупать SSD на контроллерах Jmicron – если где-то продают б/у SSD – скорее всего это те тормозливые поделки, которые зачастую медленее HDD. На JMicron-ах раньше делали SSD все, т.к. это был первый SSD контроллер.

Пара слов о будущем

В ближайшем будущем(1-3 года)прорывов ждать не стоит: с каждым новым более тонким техпроцессом флеш память живет все меньше(сначала 10’000, потом 5’000 а теперь и вовсе 3’000).

Конкурирующие с NAND Флеш-памятью технологии, не имеющие ограничений на перезапись (такие как FRAM/PRAM) – это конечно хорошо, но плотность хранения информации у них существенно меньше, и уменьшать ячейки там сложнее. Так что их применение ограничивается различными микроконтроллерами, встраиваемыми системами и проч., где гигабайты не нужны, а нужна надежность (прямо сейчас можно спокойно купить 32-64кб FRAM памяти, случайное чтение/запись 70нс, кол.во циклов перезаписи - неограниченно, <10$. Реальный шанс сделать Спектрум например на FRAM памяти ).

Цены также падают крайне медленно: год назад я покупал SSD за практически те же деньги, что и сейчас.

Стоит ли это того?

Определенно да. Если есть лишние 150-300$, лучше купить SSD для системы и программ, вместо 4-х ядерного процессора. или процессора с чуть большей частотой. Эффект не заметить невозможно!
19 Июня 2010

RSS@BarsMonster3@14.by