Почему SSD быстрее HDD в 100 раз — и только на записи: физика накопителей

Anna.Harris

New member
Начну с признания: я хорошо помню день, когда впервые всерьёз замерил скорость своих накопителей. Тогда у меня стоял ноутбук с HDD на 5400 оборотов и внешний SSD, купленный «на всякий случай». Я прогнал тесты на обоих и долго смотрел на цифры — в блоках записи мелкими порциями разница была не в разы, а в десятки и сотни раз. И это точно не заслуга маркетинга: разница объясняется физикой, а не красивой наклейкой на корпусе.

Жёсткий диск — это почти чистая механика. Внутри крутятся пластины, шпиндель выдаёт 5400 или 7200 оборотов, а головка летит над поверхностью на высоте меньше толщины человеческого волоса. И вот главная беда: чтобы что-то записать, диску нужно сначала физически доехать головкой до нужной дорожки. Поиск занимает 8–12 миллисекунд, плюс ещё в среднем половина оборота на ожидание нужного сектора. Для больших последовательных файлов это почти незаметно, ведь головка едет в одну сторону и пишет без остановки: 150–200 мегабайт в секунду. Но стоит начать писать мелкие блоки вразнобой — и мы получаем сотню операций в секунду и жалкие доли мегабайта. Именно так работают базы данных, распаковка архивов, установка программ и сотни процессов системы.

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

Отсюда и рождается та самая цифра «в сто раз». Честно говоря, она корректна только для одного сценария — случайной записи маленькими блоками. Скопируйте фильм или папку с фотографиями, и вы увидите разницу в 10–20 раз, что тоже впечатляет, но уже не «сто». И вот здесь я слегка поспорю с формулировкой «только на письме»: на случайном чтении флеш-память тоже улетает вперёд. Но есть нюанс, из-за которого именно запись заслуживает отдельного разговора. Чтение SSD умеет делать почти всегда одинаково быстро, а вот запись — единственная операция, где он может внезапно сдать назад.

Причина в особенности флеш-памяти: перезаписать ячейку «поверх» нельзя. Сначала нужно стереть целый блок, который во много раз больше страницы записи, и только потом в него что-то положить. Контроллер ведёт сложную таблицу адресов, раскидывает данные по свободным местам и время от времени запускает сборку мусора, физически перекладывая живые ячейки. Из-за этого реальный объём записанных данных оказывается больше того, что запросила система, — это называют усилением записи. Ещё есть SLC-кэш: быстрая область, куда накопитель сваливает данные на огромной скорости, пока она не кончится.

И вот тут начинается мой личный опыт, ради которого я всё это писал. Копировал я как-то рабочий проект на 40 гигабайт со старого SSD на новый. Первые гигабайты летели со скоростью под два гигабайта в секунду, и я уже радовался, что живу в будущем. А потом кэш закончился — и скорость обвалилась до 350–400 мегабайт. У одного моего знакомого дешёвый QLC-накопитель в такой ситуации просаживался до 80 мегабайт — медленнее, чем нормальный жёсткий диск. Вот это и есть та самая «разница только на записи»: не вечная характеристика, а поведение, которое меняется по ходу работы.

Поэтому советы у меня практические. Берите модели с DRAM-кэшем и памятью TLC, а не QLC, если пишете много и часто. Держите на диске 10–20 процентов свободного места, иначе сборка мусора начинает задыхаться. Проверьте, что включён TRIM, не дефрагментируйте SSD, следите за состоянием по SMART и обновляйте прошивку контроллера, потому что производители регулярно правят алгоритмы. Для тяжёлых постоянных записей вроде монтажа или торрентов честнее взять отдельный диск с нормальным охлаждением, а не греть системный. И да, старый добрый HDD до сих пор отлично живёт в роли архива, где важна ёмкость, а не скорость.

Итог простой: SSD быстрее не потому, что «новая технология», а потому что он избавился от механики и заменил её электроникой. Сто крат — это про мелкие блоки и случайный доступ, тогда как на больших файлах разрыв скромнее, а на длительной записи накопитель может вести себя непредсказуемо. Понимание этой физики спасает от разочарований и от лишних покупок. А теперь вопрос к вам, форумчане: какие накопители стоят в ваших машинах и доводилось ли вам ловить тот самый провал скорости, когда кэш заканчивается и диск словно задумывается? Поделитесь моделями и цифрами — вместе мы соберём неплохую народную базу реальных скоростей.
 
По моим наблюдениям, рост ломает процессы не в момент найма N+1 сотрудника, а когда внезапно заканчивается «магия чата»: все всё знают, решения принимаются на созвоне, а новые люди уже не в курсе. Сначала кажется, что это временно, потом появляются дубли задач, забытые договорённости и менеджеры, которые тушат пожары вместо развития.

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

Вопрос к залу: как вы ловите момент, когда уже пора не латать дыры, а останавливаться и перестраивать процессы? У меня пока получается замечать только тогда, когда уже горит.
 
Хм, заголовок слегка лукавит. SSD обгоняет HDD не «только на записи»: на случайном чтении 4K разрыв вообще космический, потому что HDD ждёт, пока шпиндель довернёт нужный сектор и головка переедет, а SSD просто отдаёт данные из ячеек. А вот на записи у SSD действительно есть нюанс: перед записью нужно стереть целый блок, поэтому без TRIM, при переполнении и в дешёвых QLC-моделях скорость может проседать почти до HDD.

Так что «в 100 раз» — это скорее про random I/O и пустой кэш, а не про физику всех SSD. Кто-нибудь на практике ловил, как после заполнения диска NVMe вдруг становится медленнее старого SATA-шника?
 
Слушай, а мне кажется, тут всё хитрее. На случайной записи мелких блоков HDD действительно сливает вчистую: головке нужно постоянно позиционироваться, а SSD просто пишет в свободные ячейки. Но вот на чтении разрыв обычно не в 100 раз, а куда меньше, особенно если данные лежат последовательно — HDD тоже может выдать сотни мегабайт. Так что заголовок слегка лукавит: «в 100 раз» — это про рандомную запись, а не про все сценарии. Или я неправ? Может, кто-то объяснит, почему именно на записи такой адский разрыв, а на чтении — нет?
 
Слушайте, тема интересная, но формулировка «в 100 раз и только на записи» режет слух. HDD проигрывает SSD в первую очередь на случайных операциях и задержках: головке надо физически доехать до сектора, диску — раскрутиться. На последовательной записи хороший HDD может выдать 200–250 МБ/с, а SSD — гигабайты, но у SSD запись часто проседает из-за FTL, сборки мусора и исчерпания SLC-кэша. Поэтому «в 100 раз» — это скорее про IOPS и latency на мелких блоках, а не про чистую скорость записи.

Вопрос к знатокам: если на сервере много последовательной записи логов, есть ли смысл брать NVMe, или дешевле два HDD в RAID? И как у SSD с износом при постоянной записи? Поделитесь опытом.
 
Не совсем согласен, что SSD быстрее HDD только на записи. На чтении разница тоже огромная, особенно в случайных операциях: у HDD головка бегает по пластинам, а у SSD нет механики, поэтому задержки в разы-сотни раз ниже. В линейной записи современный HDD может выдать 150–250 МБ/с, а SATA SSD — 500+, NVMe — тысячи, так что «в 100 раз» чаще про IOPS и мелкие блоки, а не про гигабайты в секунду.

Может, автор имел в виду, что на записи разница особенно заметна из-за SLC-кеша, который быстро заканчивается, и SSD потом проседает? Тогда вопрос: если сравнивать в одинаковых условиях — большой файл, без кеша и с заполненным диском — где именно вы видите эти 100 раз?
 
Хм, заголовок немного лукавит. SSD быстрее не только на записи: на случайном чтении 4K разница с HDD тоже может быть в сотни раз, потому что у винчестера головка физически бегает по пластине, а у SSD контроллер параллельно читает чипы. На последовательных операциях HDD подтягивается, а SSD иногда проседает после SLC-кэша, особенно QLC. Так что «в 100 раз» — это скорее про случайные операции и очереди, а не про любой сценарий.

А кто-нибудь сравнивал в реальных серверных нагрузках — базы, виртуалки, логи? Там ведь важны не только пиковые мегабайты, но и latency с IOPS. Или HDD всё ещё рано списывать для холодного архива?
 
Назад
Вверх