?

Log in

No account? Create an account
   Journal    Friends    Archive    Profile    Memories
 

SSD-диски ("твёрдотельные") - morfizm


Dec. 24th, 2014 05:37 am SSD-диски ("твёрдотельные")

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

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

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

Недорого.
=========

Начну с "недорого". Подержанные SSD на 120GB стоят на eBay $45 включая доставку, на 160GB стоят $60. Новые на 240GB можно купить за $90-100.
Проблема в том, что готовые комплектации компьтеров с SSD-диском стоят непропорционально дорого. Например, тот же диск может стоить в 2-4 раза дороже (добавить $200-400 к цене сборки), если он туда вставлен продавцом компьютера, а не вами лично. Я не знаю точно, почему это так, но это факт. Могу попробовать объяснить это тем, что компоненты для брендовых сборок должны закупаться заводом задолго заранее, поэтому потребителю приходится платить за диски по ценам годовалой давности, а это большая разница, т.к. SSD диски стремительно дешевеют. Короче, покупайте новое или даже бывшее в употреблении, и вставляйте в компьютер сами. Дешевле купить компьютер без SSD и добавить к нему SSD, чем покупать сразу с SSD.

Что такое 120GB? Человеку, у которого Windows, Office и мелочёвка, 120GB может вполне хватить для всего. Если много музыки, фотографий и фильмов, их можно хранить отдельно на более дешёвом обычном диске. Если у вас установлены довольно "тяжёлые" приложения (требующие много места) - типичный пример это игры - то 160GB лучше. Но при экономном использовании, 160GB хватит за глаза.

Мегакруто.
==========

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

Тут я начну с конца, будет немного проще.

Как работают вращающиеся жёсткие диски.
=======================================

Обычный жёсткий диск это одна или несколько пластин и одна или несколько головок чтения-записи, одновременно двигающихся к центру диска и обратно. Вспоминаем проигрыватель виниловых пластинок - очень похоже, только пластинка крутится очень быстро - со скоростью 80-120 оборотов в секунду (4800-7200 в минуту), и головки движутся тоже очень быстро - за секунду головка может 100 раз пройти путь от внешнего радиуса к центру (50 раз туда-обратно).

Механика операций чтения и записи требует трёх шагов:

1) Головка должна разместиться на нужном месте, над нужной "дорожкой" (в грампластинках дорожка одна и очень длинная, идёт по спирали. Жёсткий диск разбит много непересекающихся дорожек - каждая окружность это дорожка, и когда одна дорожка целиком зачитана, можно чуток передвинуть головку на соседнюю). Движение головки и ожидание прокручивания диска вместе называются seek (поиск?). Если среднее время поиска 5 мс, то это значит, что 5 мс займёт передвинуть головку "от случайной дорожки в какую-то другую случайную". Легко посчитать, что максимальное расстояние (от самой внешней дорожки до самой внутренней) будет примерно втрое больше (15 ms). Хорошая новость в том, что среднее время поиска на современных дисках очень низкое, и общее время доступа почти полностью определяется вторым шагом, который исполняется одновременно с первым (кстати, я только что написал коммент про это на serverfault):

2) Диск должен "прокрутиться", чтобы тот кусочек, откуда начинать обращаться к данным, оказался ровно под головкой. Если у нас 90 оборотов в секунду (5400 в минуту, типично для ноутбуков), то каждый полный оборот займёт примерно 11 мс. В среднем нужно будет прокрутить на полоборота, т.е. 5.5 мс. Это и есть время доступа.

3) Последовательная операция чтения или записи какого-то количества байт начиная с найденного места. Скорость этого процесса зависит от плотности записи, количества дорожек и скорости вращения диска, обычно измеряют скорость последовательного доступа в мегабайтах в секунду. Например, 100MB/sec чтение и 80MB/sec запись. При скорости в 100MB/sec, 1 гигабайт, лежащий на диске "подряд", можно прочитать за 10 секунд.

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

Хозяйке на заметку #2: размер дорожек разный (внешние длинные, внутренние короткие, разница примерно вдвое), а плотность записи на современных дисках примерно одинаковая. При этом скорость вращения (оборотов в секунду) одинаковая для всех дорожек. Таким образом внешние дорожки дают вдвое большую скорость. Зачем это знать? "Начало диска" это внешний обод, который быстрый. Если вы купили новый диск, совершенно пустой или пусть даже с установленной системой, но с большим количеством свободного места, и потом запускаете какой-нибудь benchmark-тул чтобы узнать его скорость, то вы увидите вдвое большее число, чем число, которое вы бы увидели при тестировании концевой части диска. Скажем, 100 MB/sec в начале, 50 MB/sec в конце, соответственно 75 MB/sec средняя скорость. Самая последняя установленная игрушка скорее всего, будет больше всего тормозить, т.к., вероятно, окажется в конце диска. Это важно понимать, т.к. у SSD скорость последовательного доступа одинакова в любом месте диска.

Хозяйке на заметку #3: в глубокой древности (в районе 90х) время на seek было значительно выше, чем время на полоборота диска, и имело смысл дробить диск на мелкие партиции, чтобы данные, связанные по смыслу, лежали физически на соседних дорожках. Например, я помню 286-й с 40MB-винчом, разбитым на 4 куска по 10MB: C:, D:, E:, F:. Сейчас так мелко дробить бессмысленно. Разделять систему и данные (делать C: и D:) имеет смысл по некоторым другим причинам, которые выходят за рамки данного обзора, и имеет смысл лишь располагать наиболее часто читаемые вещи в начале диска, т.к. там выше скорость последовательного доступа. Т.е. C: должен быть создан сначала, а D: потом, и C: не должен быть огромным, чтобы установленные программы не расползались по всей поверхности диска. Скажем, если диск размером 1TB, то делать C: больше 200GB бессмысленно, кроме случая если вы реально будете кучу всего инсталлировать и вам 200GB может не хватить. 200GB из 1TB будет располагаться в более быстрых первых 20% диска. Ещё один антипаттерн, про который полезно знать: если у вас один огромный диск C:, и вы ставите вторую операционную систему рядом с первой (не форматируя с нуля), то с большой вероятностью вторая операционная система ляжет в конце диска и будет грузиться вдвое медленнее.

"Случайный доступ" это когда данные не лежат подряд, а раскиданы по диску, и даже если нужно прочесть всего один байтик, нужно тратить те самые средние 5.5 мс. В одной секунде 1000 мс, получаем 1000/5.5 = 181 операций в секунду (их ещё называют IOPS, Input/Output operations Per Second). Если читать по одному байту за операцию, то получится скорость 181 байт (!) в секунду. На чтение 1 гигабайта с такой скоростью уйдёт больше 2 месяцев :) Это в 600 тыс раз медленнее.

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

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

Известные мне трюки:

1. Диски разбиты на кластеры по 4096 байт (4K), это минимальная единица, которую можно прочесть или записать за один раз. (Чтение куска размером меньше, чем кластер, это чтение кластера, изменение его, и запись обратно целиком кластера). Системные программы и приложения про это "знают" и стараются работать с файлами так, чтобы, во-первых, не создавать слишком маленьких файлов ("полезные" файлы зачастую заметно больше одного кластера, и очень редко меньше), и, во-вторых, не "бегать по файлу", а работать с последовательными кусками, при необходимости, загружать весь файл в память, работать в ней, а потом скидывать на диск изменения, если нужно. Если мы в режиме "совершенно случайного доступа" будем читать по одному кластеру, это будет 181*4 = 724K/сек. Т.е. не в 600 тыс раз медленнее быстрого последовательного доступа, а всего лишь в 141 раз медленнее. Красота.

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

2. Дефрагментация. С течением времени, по мере удаления файлов, на диске возникают "дырки" свободного места. Новые файлы заполняют эти дырки и становятся фрагментированными - кусочек здесь, кусочек там. Даже если разработчик приложения аккуратно читает файл последовательно, фрагментация приводит к беготне по всему диску со всеми вытекающими. Дефрагментация это перемещение и консолидация этих кусочков, а также консолидация свободного места. Windows уже много лет автоматически дефрагментирует NTFS по расписанию, в фоновом режиме, когда компьютер не занят. Вам ничего не надо делать, чтобы это произошло. Дефрагментация не спасает от всего. Даже если файлы 1, 2, 3, 4, 5, 6 лежат цельными кусками, плотно друг рядом с другом, какое-то приложение зачитает файлы 1, 3, 5, какое-то 2, 4, 6, а какое-то другое 1, 2, 5, 6. Нельзя так расположить файлы, чтобы угодить всем приложениям одновременно.

3. Prefetch. Windows следит за тем, в какой последовательности происходит чтение файлов при запуске системы и отдельных программ. В частности, один EXE-файл (приложение) может загружать много DLL (исполняемые библиотеки, лежащие в отдельных файлах), кроме того, из этих файлов может зачитываться не всё, а лишь некоторые куски. Windows следит за порядом чтения кластеров и создаёт копию, в которой все эти кластеры лежат на диске подряд. Таким образом, после нескольких медленных запусков, последующие запуски ускоряются (Windows будет подсовывать копию и читать из неё). Разумеется, если файлы изменятся, то эта копия станет негодной и prefetch будет создавать её заново, но исполняемые файлы редко меняются. Эта оптимизация позволяет получить скорость, близкую к скорости последовательного чтения, для сценария "начальный запуск компьютера", а также "запуск приложений" - от момента клика на приложение до момента, как приложение загрузилось (и, скажем, показало какое-то первое своё окно). Всё, что приложение делает дальше в оптимизацию prefetch'а не входит. Например, приложение может уже самостоятельно подгружать какие-то другие исполняемые модули или файлы с данными. Скажем prefetch не будет оптимизировать "загрузку уровней" в играх - это не запуск приложений, а обычное чтение из файлов, про особенности которого Windows ничего не "знает".

4. I/O request queue - очередь запросов на ввод-вывод. Разные приложения, одновременно работающие с диском (или одно, использующее многопоточность), могут замедлять систему (скажем, заставляя головку бегать по диску, одновременно читая из двух разных мест и возвращаясь то в одно, то в другое), но если тип доступа уже не оптимален, то как правило, они ускоряют. Происходит это за счёт того, что система накапливает запросы в очереди, и меняет их порядок. Например, файлы на диске лежат так: 1, 2, 3, 4. Одно приложение хочет зачитать 3, другое 1, третье 4. Если все эти запросы (3, 1, 4) лежат в очереди, то система может упорядочить их так, чтобы выполнить один проход головкой от "1" к "4" и "по дороге" прочитать 3. Под "системой" в данном случае я понимаю комбинацию из операционной системы и контроллера жёсткого диска. С учётом того, что важен не только номер дорожки, а ещё и положение на дорожке (необходимость ожидания, пока диск "прокрутится") всё, на самом деле, немножко сложней, но суть та же: система, возможно, увеличивает время ожидания для отдельных запросов, но оптимизирует суммарную пропускную способность (общее количество MB/sec, которое пишется на диск и читается с диска). Благодаря этому даже в случае "совсем случайного" доступа эффекты сглаживаются, и реальная скорость будет не 724K/сек, а несколько мегабайт. Это будет тоже в десятки раз медленнее настоящего последовательного доступа, но всяко лучше, чем в 140 раз медленнее или чем в 600 тыс раз медленнее :)

5. Кэш. Оперативная память (RAM), хоть и называется Random Access Memory (память со случайным доступом), имеет похожие проблемы: прочесть один байтик из случайного места может обойтись в 100 раз дороже, чем читать или писать последовательно. Но, во-первых, всего в 100, а не в 600 тыс, а, во-вторых, скорость последовательного доступа памяти - это гигабайты в секунду. Т.е. в десятки раз выше, чем вращающиеся жёсткие диски. Операционная система обычно использует под кэш всю свободную память. Если вы хотите достичь хорошего быстродействия на домашнем компьютере, нужно чтобы хотя бы 1GB, а лучше 2GB, были свободны - тогда их можно будет использовать под кэш. (Сразу очевидный плюс SSD: размер кэша намного менее важен для SSD, об этом потом, таким образом, больше памяти можно использовать под приложения без потери быстродействия, ну или купить меньше оперативной памяти в сумме). В кэш попадает всё, что было недавно прочитано или записано, вытесняя те куски, к которым не было обращений или были лишь редкие обращения. Таким образом, некоторые вещи, которые часто используются, в кэше пребывают постоянно и с диска заново не читаются. Например, огромная куча системных библиотек (DLL) живёт в кэше. Для недавно запущенного приложения в кэше лежат конфигурационные и вспомогательные файлы, к которым приложение неоднократно обращается. Игра, подгрузившая кусок карты, не будет подгружать с диска старый кусок снова, если вы вернётесь - он будет выдан из кэша. Если, конечно, в кэше было достаточно места и нужные вещи не вытеснились! Именно из-за кэша очень трудно собственноручно протестировать быстродействие диска, например, методом копирования файла туда-сюда. Будучи однажды зачитанным, если он влезает в кэш, второй раз он будет зачитываться из кэша и это будет очень быстро, вы увидите неправильные цифры. Используйте специальные приложения для оценки производительности (benchmarking tools), они теструют, минуя кэш. Когда вы ходите по интернету, в кэше лежат файлы с печеньками (cookies). Обозреватель также пишет много временных файлов с копиями вебстраниц (и общих кусков для вебстраниц - вроде файлов CSS, JS, etc) и картинок, и он нередко запрашивает из интернета лишь подтверждение, что файлы не изменились. Временные файлы обычно живут в кэше, потому что к ним происходит частое повторное обращение.

Содержимое кэша исчезает в двух случаях:
1) При его вытеснении. Например, если вы запустили приложение, которому потребовалось очень много оперативной памяти. Кэш уменьшился до минимума, и его содержимое было вытеснено.
2) При выключении компьютера. Поэтому первый запуск приложений дольше последующих повторных даже при том, что prefetch старается ускорить первые запуски реорганизацией читаемых блоков.

6. Можно чуть ускорить систему, если отключить обновление last access time. Windows, по умолчанию, при каждом чтении файла, пишет на диск обновлённые метаданные - дату последнего обращения к файлу (last access time). В интернетах есть советы, как это отключить, я отключаю. Дата последнего обращения довольно бессмысленная величина. Единственное полезное использование, которое мне приходит в голову, это написать скрипт, удаляющий файлы из временной директории, которые давно не использовались. Но это всё не нужно, т.к. есть стандартный disk cleanup, который просто удаляет всё подряд :)


Как работают SSD.
=================
В SSD нет движущихся частей, вместо намагничивания используется флеш-память.
Она обладает такими особенностями:

1. Очень быстрый случайный доступ. Несколько десятков тысяч операций в секунду вместо одной-двух сотен. Типичные показатели для современных новых дисков это 40-60 тысяч операций в секунду при высокой длине очереди запросов (I/O request queue), и 10-20 тысяч при длине 1 (запросы делаются по одному, одним приложением, следующий запрос строго после выполнения предыдущего). 20 тысяч запросов в секунду это 80MB/sec для 4K блоков. По сути, нижняя граница скорости "случайного доступа" у SSD практически такая же, как средняя скорость последовательного доступа для вращающихся дисков.

2. Последовательный доступ ещё быстрее. Если бы не было "накладных расходов", связанных с чтением и записью маленьких блоков данных, разницы между случайным и последовательным доступом могло бы не быть вовсе, но она всё же есть, сравнительно небольшая (в несколько раз). Современные диски дают около 400-500MB/sec чтение и 400-500MB/sec запись. Старые диски вроде Intel 320 Series на 120GB дают 120MB/sec запись и 200MB/sec чтение.

Хозяйке на заметку: для домашнего пользователя реальная скорость обычно ниже из-за отсутствия поддержки SATA III (6GBit/sec). Если есть SATA II (3GBit/sec), то скорость теоретически ограничена 300MB/sec, реальная около 250-280 из-за накладных расходов. Если есть SATA I (1.5GBit/sec), то скорость ограничена 150MB/sec, реальная чуть меньше. Для компьютеров с SATA I скорость можно заметно увеличить, если купить PCI-e карту с поддержкой SATA II/III. Дешёвые однополосные карты (одна полоса PCI-e интерфейса) стоят порядка $10-20, и тогда скорость будет ограничена пропускной способности одной полосы PCI-e. Для PCI-e v1.x (2.5GBit/sec) это 250MB/sec (реальная скорость порядка 170-200), для PCI-e v2.x (5GBit/sec) это 500MB/sec (реальная скорость порядка 370-400). "Накладные расходы" выше, около 20-25%, но при этом PCIe даёт эту скорость в обе стороны - на чтение и на запись одновременно. Не знаю, реально ли использовать эту двухканальность именно с SSD дисками, но даже в случае одного канала, это уже заметно лучше, чем SATA I.

3. Важная особенность, связанная с производительностью, состоит в том, что, прежде, чем перезаписать ячейку флеш-памяти новыми данными, её нужно "стереть". Операция "стирания" дорогостоящая - это медленное действие, которое желательно делать не непосредственно перед записью новых данных, а заблаговременно. Чтобы стирание происходило заблаговременно, нужно, чтобы на диске всегда было свободное место. В этом случае контроллер флешки может производить "стирание" этого свободного места фоновым процессом (изначально оно "свободное" с т.з. операционной системы, но не "стёртое" с т.з. контроллера диска). Рекомендуют резервировать 7-10%. Некоторые новые SSD идут уменьшенного объёма с уже зарезервированными 6.25% (чаще всего диски на 120 это, на самом деле, диски на 128, но 8 зарезервировано).

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

5. Дополнительные преимущества SSD:
5.1. Полная бесшумность.
5.2. Ударопрочность. Многие ноутбуки имеют технологию, отключающую жёсткий диск при вибрации, например, когда вы несёте ноутбук в руках - продолжать работу в этом случае невозможно, пока не остановишься. С SSD никаких проблем. Берёшь ноутбук в одну руку, идёшь с ним, скажем, в туалет, и можно продолжать программировать, отвечать на e-mail-ы и т.п. другой рукой, параллельно с движением по коридору. Удобство!
5.3. Низкое энергопотребление. Значительное увеличение времени работы от батареии.
5.4. Низкое выделение тепла. Особенно важно для людей, живущих в тёплых регионах. Если все диски SSD, то, может быть, потребуется не три потративных кондиционера, а всего два! :)


Теперь пришло время подрезюмировать разные сценарии работы с компьютером и сравнить производительность обычного жёсткого диска и SSD.

Как производительность компьютера зависит от диска.
===================================================
1. Загрузка системы и запуск простых приложений -- на обычном диске почти полностью оптимизируется дефрагментацией и prefetch'ем, и зависит от скорости последовательного чтения (которая, в свою очередь, зависит от того, это начало диска или его конец, и может отличаться вдвое, скажем, 50MB/sec вместо 100MB/sec). Тем не менее, даже последовательное чтение может значительно ускорить "ощущение" от скорости компьютера, когда речь идёт об увеличении его в несколько раз (200-500MB/сек вместо 75MB/sec). Скорость загрузки системы будет вдвое быстрее. Загрузка приложений ещё быстрее.

2. Запуск сложных приложений - вроде графических систем или IDE для разработки, часто подгружающих разные модули, или игр, подгружающих карты и мультимедиа, связанную с графикой, квестами и т.п. (текстуры, аудио, видео) - здесь, наверное, у обычного диска будет что-то среднее между случайным доступом и последовательным, как повезёт. Если требуется "на глаз" назвать простой диапазон, я бы сказал, 10-50% от скорости последовательного доступа, в среднем, 30%. Конечно, это сильно зависит от того, насколько разработчики приложения позаботились о производительности. SSD будет давать огромный прирост в скорости (от 2-3 раз до десятков раз).

3. Web browsing. Чтение файлов вроде cookies - близко к случайному доступу (очень медленно), но делается только один раз, потом берётся из кэша. Временные файлы со страницами и картинками - казалось бы, диск вообще не должен использоваться, но он таки используется, и SSD заметно ускоряет открытие страниц раза в два! Может, это потому что временными файлами неправильно пользуются (приложение обозревателя не выставляет нужные атрибуты, чтобы сказать системе держать эти файлы в памяти) - может быть это даже сделано намеренно, чтобы не расходовать слишком много памяти, т.к. иначе можно вытеснить кэш, а также спровоцировать использование файла подкачки (swapping), что ещё сильнее бы ухудшило производительность. Может, система пишет временные на диск и ждёт, пока они запишутся, чтобы гарантированно сохранить их между перезагрузками. Предположу, что это может делаться по разным причинам, в т.ч. из соображений безопасности. Может, играют роль поисковый индексер, антивирус или запись времени последнего доступа (last access time, об этом ниже). Я не знаю. Но факт в том, что web browsing сильно зависит от скорости случайного доступа на диск, как ни парадоксально это звучит.

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

5. Реестр. В Windows многие настройки компьютера и программ хранятся в огромной базе данных, называемой реестр (registry). Производительность работы с реестром очень далека от последовательного доступа. Больше всего реестр используется при инсталляциях и де-инсталляциях, но он также используется при запуске и нормальной работе многих программ. Менее важно для игр, более важно для приложений со всевозможной интеграций с explorer'ом, офисом и пр. Microsoft'овскими технологиями (использование какой-то общей технологии это подгрузка COM-объектов, а это активное чтение из реестра). Работа с вебом тоже использует реестр. SSD в очень много раз (10x?) ускоряет работу с реестром.

6. Разные "полезности". Поисковый индексер - он слушает все изменения файловой системы, после чего открывает изменённые файлы для чтения и индексирует их, складывая кусочки в отдельную базу данных - поисковый индекс. Индекс используется при поиске по тексту (стартовое меню, обозреватель компьютера, Outlook). Индексирование обычно происходит в фоновом режиме, когда компьютер не используется, но когда кроме индексера есть ещё много других полезностей (антивирусы, дефрагментации, автоматические апдейты системы и программ, подготовка файлов для prefetch-а и пр.) они могут давать какую-то заметную общую нагрузку на дисковую систему, значительно замедляя всё остальное. Для SSD параллельная нагрузка на дисковую систему совсем не проблема. Замедление будет пропорционально допонительным объёмам данных (которые обычно небольшие).

7. Отображение файлов в директориях. Обозреватель (explorer) делает немеренное количество работы в фоновом режиме, чтобы красивенько показывать типы файлов и превьюшки. Когда вы открываете директорию, он открывает файлы (все, по одному), чтобы вытащить из них метаданные, сгенерировать превью (thumbnail), обновить thumbs.db. Открытие open/save диалогов в программах, особенно в Microsoft Office, тоже генерирует большое количество работы. SSD очень сильно улучшит этот сценарий. Работа с разными коллекциями, особенно наведение порядка в фотографиях и музыке, это одно удовольствие. Раньше я хранил отдельную копию уменьшенных фотографий, чтобы показывать людям, когда они приходят в гости, потому что оригиналы слишком уж долго грузятся. SSD снимает все эти проблемы. Копируем оригиналы и не паримся.

8. Работа с файлами. Открытие-закрытие, копирование, перемещение, распаковка архивов. Чем больше размер отдельных файлов, тем ближе общая скорость к скорости последовательному доступа. Чем меньше файлы, тем медленнее. SSD совсем незначительно замедляется при работе с маленькими файлами (в 2-5 раз, но не в десятки-сотни-тысячи раз).

9. Виртуальная память (swap). Всё очень быстро, когда памяти хватает. Когда памяти не хватает, всё сумасшедше медленно. Почему? Потому что начинает использоваться файл подкачки. Менее часто используемые кусочки памяти (странички, обычно по 4K) выгружаются туда (на диск!), освобождая место для новых аллокаций памяти. Работа с выгруженными кусочками - это загрузка их в память, одновременно с выгрузкой чего-то другого. Мы заменяем память, скорость доступа которой несколько гигабайт в секунду на вращающийся диск, который работает с 4K-страничками со скоростью 724K/сек. Если приложению действительно нужно больше памяти, чем есть - скажем, есть 4GB памяти, а приложение постоянно "трогает" 5GB, то это замедление работы в тысячи раз. Фактически замедление не такое сильное, т.к. превышение объёмов памяти происходит потому что приложений запущено много, и какие-то из них неактивны или малоактивны. Когда используется файл подкачки, происходит соревнование за оперативную память между приложениями и дисковым кэшем, размер которого обычно уменьшается до минимального. Это тоже ухудшает производительность. SSD значительно шустрее работает с вируальной памятью (в десятки раз). Правда, не рекомендуется долго работать в таком режиме, т.к. это быстрее изнашивает диск. С другой стороны, SSD не требует такого большого кэша, и реально доступной оперативной памяти при сохранении хорошей производительности будет больше.

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


Как перейти на SSD.
===================
Самое простое - переустановить систему. Windows 7+ поймёт, что это SSD, и сделает правильные настройки. Если поменять диск на работающей системе, то лучше всего скачать драйвера/утилиту к SSD, и с помощью неё выставить правильные настройки (отключить prefetch, etc).

Как поменять диск на работающей системе. Я знаю три способа:

1. Подключить одновременно оба диска. При помощи disk manager'а (он внутри computer manager) сконвертировать оба диска в "dynamic", удалить все партиции с нового диска, после чего кликнуть правой клавишей на партиции (C:, D:, ..., в т.ч. на маленькую, обычно безымянную, загрузочную партицию) основного диска, и выбрать "добавить зеркало" ("add mirror"), указав там везде второй диск. Важно делать это последовательно слева направо, чтобы порядок создавшихся зеркальных партиций был одинаков. Нужно подождать, пока закончится процесс заливки на зеркало ("resync") - disk manager показывает прогресс. После этого нужно выключить компьютер, вытащить старый диск (!) и перезагрузиться. Всё прекрасно загрузится с нового. Нужно будет войти в disk manager снова, при необходимости, поправить "буквы" дисков, а также удалить сломавшийся mirror (это можно сделать только когда второй диск физически отсутствует, не подключен). Новый диск можно оставить в режиме dynamic, это ничего страшного.
Это самый простой метод, но работает не для всех дисков, а только если одинаковый размер сектора. Иначе Windows не даст создать mirror.

2. Сделать image backup, потом восстановить из backup'а на новый диск.

3. Использовать сторонние утилиты. Я последние несколько раз использовал бесплатную версию EaseUS Partition Master. Она работает!

Хозяйке на заметку: интернет кишмя кишит советами по экономии места на SSD-диске, типа, всё, что можно оттуда перетаскивайте на большой вращающийся диск, а оставьте только систему. Это (был) хороший совет для самых первых SSD-дисков, которые были маленького размера, вроде 32GB или 60GB. Начиная от 120GB (а лучше 160GB), нужно делать в точности наоборот: из активно используемого, всё, что можно перетаскивать именно на SSD. Особенно каталоги с временными файлами, временными интернет файлами, а также инсталляции игр. Фильмы и редкоиспользуемые фото и музыку можно хранить где-то отдельно в другом месте. Часть коллекции фоток и музыки я бы всё-таки хранил на SSD, потому что это таки даёт дополнительные удобства. Не нужно отключать hibernate чтобы сэкономить место, наоборот, пользуйтесь им и радуйтесь, что hibernate теперь, наконец-то, работает с приемлемой скоростью :)

На этом, пожалуй, пора заканчивать данный сеанс связи.
Удачи с дисковыми системами, и с наступающими праздниками!


P.S. Комментарии с намёками на ЖЖ-кат будут получать ответы с намёками на клавишу Page Down. Её надо нажать всего 4 раза, чтобы всё пролистнуть. It's not that hard, seriously.

Upd.: Дополняю пост кусочками из комментариев ermouth (там и другие детали интересны, но оставлю их в комментариях):
*) Нет задержки на раскрутку при выходе из стэндбая – это очень важно для ноутбуков, это вообще меняет сценарий их использования. К моменту, как крышка открыта, всё уже работает.
*) Тормоза при подходе к последним 5-10% имеют место, но обнаруживаются они только тестами. На глаз это незаметно.
*) До сих пор не заметил деградации по к-ву циклов даже на самых старых дисках.
*) На SSD очень удобно держать виртуальные машины, они очень быстро стартуют и поэтому их можно иметь много и поднимать-убивать пачками.

Tags: ,

70 comments - Leave a commentPrevious Entry Share Next Entry

Comments:

From:ermouth
Date:December 24th, 2014 04:04 pm (UTC)
(Link)
Я бы дополнил, как юзер, у которого много разных SSD (10+) на хозяйстве, и давно (c 2010). В частности есть опыт эксплуатации винсервера.

1) Нет задержки на раскрутку при выходе из стэндбая – это очень важно для ноутбуков, это вообще меняет сценарий их использования. К моменту, как крышка открыта, всё уже работает.

2) Тормоза при подходе к последним 5-10% имеют место, но обнаруживаются они только тестами. На глаз это незаметно.

3) До сих пор не заметил деградации по к-ву циклов даже на самых старых дисках.

4) Хочется новый стандарт на форм-фактор дисков для ноутов, потому что сейчас SSD – это на 95% пластмасса и пустое место.

5) На SSD очень удобно держать виртуальные машины, они очень быстро стартуют и поэтому их можно иметь много и поднимать-убивать пачками.

6) SSD дают возможность применять стратегию ‘cache entire DB’ для небольших проектов – то-есть появляется возможность создать в RAM снэпшот всей базы за незметное при старте время. Это ускоряет UI response в некоторых случаях до уровня, который воспринимается как ‘мгновенный отклик’ – без присущих для такого рода решений бубнов и усложнённых архитектур.

7) Я не держу архивы на SSD.
From:yourumka
Date:December 24th, 2014 05:26 pm (UTC)
(Link)
Так а вроде уже появились SSD с разъемом подключения mSATA, на вид напоминают ноутбучную память SoDimm.
From:ermouth
Date:December 24th, 2014 05:43 pm (UTC)
(Link)
Это просто чип прикрученный к папе PCI express x1. Это не новый форм-фактор, это такое что-то временное.

Хочется всё же форм-фактор. Как SATA в своё время или USB. То-есть хочется такой ноутбук (планшет), в который можно было б картриджи вставлять, грубо говоря. И без разборки корпуса.
From:morfizm
Date:January 5th, 2015 07:10 am (UTC)
(Link)
Спасибо, очень хорошие дополнения.

Про 1) и 5) я давно знаю, просто забыл упомянуть. Это важно!

6) это хороший поинт, но это уже уход в программирование и производственные задачи; если мы говорим о них, то ещё важно упомянуть скорость доступа. Например, если ответ на запрос должен быть в реальном времени, а серверов, обслуживающих запрос, много, плюс есть ещё какие-то overheads, то даже одно-единственное обращение к диску на каждый запрос может быть недопустимо: если нет работы, то это уже 5мс, но как правило, диски загружены, очередь ввода-вывода длинная, и обращение может запросто стоить 100мс. Выход - либо очень много RAM, чтобы всё или почти всё было закэшировано, либо SSD (комбинация из RAM и SSD тоже хорошо).

4) Согласен, и к этому всё идёт.

2) 3) - я тоже не заметил ни тормозов, ни деградации. Мало того, ни один SSD на моих глазах ещё не умирал (т.т.т.), хоть я к этому "всегда готов", нас тут запугивали, как они мало живут эти SSD. Мало того, половина купленных мной SSD - юзанные, и с ними тоже не было никаких проблем (т.т.т.).
From:ermouth
Date:January 5th, 2015 07:49 pm (UTC)
(Link)
Ты всё верно пишешь про п.6, я просто коротко сказал, без лишних добавок. Сам п. 6 – это такой результат довольно долгих размышлений по поводу файловых систем вообще.

Дело в том, что и само понимание файла как куска данных, и API, которые вокруг него понаписаны, с приходом SSD решительно устарели. До SSD мы имели аксиому «всё, что большое, читается последовательно и seek небыстрый».

Теперь мы можем читать как угодно и seek мгновенный – в XXI веке появились файлы, к которым возможен честный _произвольный_ доступ. Если попытаться посмотреть на все мне известные файловые API (это хоть и неглубокие знания, но широкие), получится, что эти API в новых реалиях просто какие-то динозавры. Разнообразные, да, – но рептилии и страшные.

Поэтому стратегия чтения всей БД в RAM (с повторением API дисковой версии БД, но только в памяти) – это в первую очередь следствие уродливейших файловых API, которые лежат между диском и БД.

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

Edited at 2015-01-05 07:55 pm (UTC)
From:kot_begemot
Date:December 24th, 2014 04:27 pm (UTC)
(Link)
Я бы не рискнул советовать покупать подержаные SSD, особенно дешёвые. У них и у новых-то срок жизни не ах, а уж подержанные могут умереть в любой момент.
From:morfizm
Date:January 25th, 2015 04:49 am (UTC)
(Link)
У меня ни разу не умерли, я покупаю подержанные чаще, чем новые.
From:yourumka
Date:December 24th, 2014 05:21 pm (UTC)
(Link)
Спасибо! Все написано очень понятно, приятно читать. Насколько я понимаю, любители SSD все хранят на обычном жестком диске не потому что места мало, а как раз таки боятся достичь лимита циклов записи.
Знакомые ставили только появившиеся в продаже SSD на сервера, скорость была чудесной, правда, сдыхали за полгода. Так знакомые, пользуясь годовой гарантией, сдавали и получали взамен новые.
From:ermouth
Date:December 24th, 2014 05:45 pm (UTC)
(Link)
Я столкнулся с такой историей единственный раз, 4 года назад, на SSD "первого" поколения. Нпсколько я понимаю, сейчас за полгода уездить SSD надо очень и очень постораться.
From:yourumka
Date:December 24th, 2014 06:20 pm (UTC)
(Link)
Да, это и было года 4 назад ))
From:archaicos
Date:December 24th, 2014 09:42 pm (UTC)
(Link)
У тебя наглая опечатка. Page Down нужно нажать 14 раз, а не 4.
From:dennyrolling
Date:December 25th, 2014 06:27 pm (UTC)
(Link)
а на макбуке и вообще page down нет! :)
From:metaller
Date:December 26th, 2014 11:21 am (UTC)
(Link)
Офигенский пост, плюсую и репосчу в forum.privet.com !
From:morfizm
Date:December 26th, 2014 11:25 am (UTC)
(Link)
Возьми первый коммент ermouth'а тоже - там важные дополнения, про которые я забыл написать.