![](https://habrastorage.org/webt/zs/6s/wo/zs6swo-zur4f-s-zoa50e9wvb2u.jpeg)
В последние месяцы на глаза попадалось много материалов о том, что производители скрывают использование технологии SMR в своих устройствах. Новости о том, что покупатели жестких дисков подают в суд на производителей и тому подобное.
Дело в том, что в силу особенностей технологии, такие устройства плохо подходят для многих сценариев использования, в которых находят своё применение жесткие диски. Выражается это в катастрофическом падении производительности.
Для определения того что в диске, лежащем на полке магазина, применена технология SMR, если эта информация не указывается производителем явно, требуется знать модельные ряды и их особенности. По другому, похоже, никак. Не получится со 100% вероятностью определить это и по заявленным характеристикам диска.
Но если диск уже попал к вам в руки, определить использование технологии SMR можно достаточно просто. Далее я расскажу о том, как это сделать.
В настоящий момент используется три подхода к реализации технологии SMR:
- Drive Managed SMR,
- Host Managed SMR,
- Host Aware SMR.
О различиях между ними, а также в целом о технологии SMR рассказано в недавно вышедшей на Хабре статье.
Совсем кратко об SMR, для тех, кому не хочется переходить по ссылке
Shingled Magnetic Recording — черепичная магнитная запись. На таких дисках данные хранятся в областях, называемых лентами, представляющих собой группы перекрывающихся подобно черепице треков.
Делается такое перекрытие для того, чтобы путём частичного наложения треков друг на друга уменьшить их ширину без изменения ширины головки записи. Это вынужденная мера, т.к. при дальнейшем уменьшении размера головки возникают сложности с созданием нужной для записи напряженности магнитного поля.
Плюс такого подхода — более высокая плотность записи. Минус — то, что при записи данных на какую-либо дорожку, затираются данные на соседней. Перезапись соседней вызовет повреждения данных на следующей. И так далее.
Поэтому, чтобы не требовалось перезаписывать диск до конца, перекрывающиеся дорожки разбиты на группы, называемые лентами. Причём особенность работы механизма позиционирования такова, что диск не может производить перезапись, например, с середины ленты до её конца. Возможна только запись всей ленты от начала до конца.
Для сохранения данных на конкретный трек, SMR диску может потребоваться выполнить в сотни раз больше операций, чем диску без технологии SMR. И это приведёт к многократному падению производительности.
Поэтому данные сначала кэшируются в специальные области, дорожки в которых не перекрывают друг друга (медиакэш). Там можно сохранять данные не затирая соседние треки. А потом уже в фоновом режиме диск сам раскладывает их по лентам.
Используемые алгоритмы распределения данных достаточно сложны, применяются всевозможные оптимизации. Ведь получается, что для того, чтобы перезаписать ленту, надо сначала куда-то сохранить с неё данные. А место под перенос тоже может потребоваться освободить. И куда-то деть данные уже оттуда. И так далее. И чем сложнее алгоритм, тем сложнее тщательно протестировать все возможные варианты. Отсюда баги.
Делается такое перекрытие для того, чтобы путём частичного наложения треков друг на друга уменьшить их ширину без изменения ширины головки записи. Это вынужденная мера, т.к. при дальнейшем уменьшении размера головки возникают сложности с созданием нужной для записи напряженности магнитного поля.
Плюс такого подхода — более высокая плотность записи. Минус — то, что при записи данных на какую-либо дорожку, затираются данные на соседней. Перезапись соседней вызовет повреждения данных на следующей. И так далее.
Поэтому, чтобы не требовалось перезаписывать диск до конца, перекрывающиеся дорожки разбиты на группы, называемые лентами. Причём особенность работы механизма позиционирования такова, что диск не может производить перезапись, например, с середины ленты до её конца. Возможна только запись всей ленты от начала до конца.
Для сохранения данных на конкретный трек, SMR диску может потребоваться выполнить в сотни раз больше операций, чем диску без технологии SMR. И это приведёт к многократному падению производительности.
Поэтому данные сначала кэшируются в специальные области, дорожки в которых не перекрывают друг друга (медиакэш). Там можно сохранять данные не затирая соседние треки. А потом уже в фоновом режиме диск сам раскладывает их по лентам.
Используемые алгоритмы распределения данных достаточно сложны, применяются всевозможные оптимизации. Ведь получается, что для того, чтобы перезаписать ленту, надо сначала куда-то сохранить с неё данные. А место под перенос тоже может потребоваться освободить. И куда-то деть данные уже оттуда. И так далее. И чем сложнее алгоритм, тем сложнее тщательно протестировать все возможные варианты. Отсюда баги.
С Host Managed SMR и Host Aware SMR в «обычной жизни» вы, вероятнее всего, не столкнётесь. В свободной продаже эти модификации не представлены или поставляются ограниченно и только под заказ. И в обычной ситуации у некорпоративного пользователя шанс столкнуться с такими дисками очень мал.
Поэтому далее речь пойдёт только о Drive Managed SMR дисках. Именно такой диск вы можете купить в магазине, не зная о том, что в нём используется SMR.
Быстрый способ определения применения SMR в HDD на основе информации о вендор-семействах
Если бы все производители жестких дисков придерживались стандарта в этом отношении, то ответ на вопрос об использовании SMR конкретным устройством мог бы быть получен очень просто. Достаточно было бы взглянуть на состояние соответствующего бита в паспорте накопителя:
![](https://habrastorage.org/webt/sc/b3/y4/scb3y4cdmet1imm2nqfgki9pek4.png)
Но на сегодняшний день только SATA-диски Toshiba официально сообщают в паспорте, что они SMR. Для этого в АТА-стандарте предусмотрены соответствующие биты в данных команды Identify Device. Все остальные производители стандарт игнорируют.
Единственный известный мне на данный момент способ «мгновенного» определения использования SMR основан на знаниях об особенностях вендор-семейств и определении принадлежности жесткого диска к конкретному семейству. Этот подход использует R.tester при установке соответствующего флага:
![](https://habrastorage.org/webt/7m/uy/qk/7muyqk9rzifbsgikycll4c5na7m.png)
Определение использования черепичной записи в жестком диске путём тестирования
Легко определить, что в жестком диске реализована технология SMR, увидев отражение её врождённых особенностей в результатах тестов чтения-записи. Об этом далее.
Тест чтения
Если диск занят данными частично, или пуст, на графике теста чтения можно увидеть картину, характерную исключительно для моделей с SMR. Прошивка «знает», что в запрошенный программой сектор ничего не писалось, и отдаёт нули, не выполняя чтения с поверхности. Отсюда этот скачок в скорости чтения, либо просто феноменальная скорость, если диск пустой:
![](https://habrastorage.org/webt/oj/nz/ok/ojnzokznkirp3nxdultlilcepzw.png)
Для экономии времени, простое линейное чтение можно заменить на чтение с прыжками. При этом каждый следующий блок читается начиная с адреса, превышающему адрес предыдущего чтения на длину прыжка.
Приведённый выше график как раз отражает результаты такого теста.
Тест записи
Самый наглядный способ проявить использование технологии SMR — подобрать такой режим записи, при котором кэш будет заполняться максимально быстро, а его раскладывание по лентам потребует от микропрограммы большого объёма работы.
Предполагаю, что для большинства моделей SMR-дисков и наиболее распространённых способов их подключения, это будет случайная запись блоков размером в 2048 секторов. Не сильно облегчит участь диска замена случайной записи на запись согласно любому правилу, по которому записываемые последовательно блоки будут попадать в разные ленты.
В качестве основного тестового алгоритма я выбрал линейную запись с прыжками. Аналогично чтению, при этом каждый следующий блок пишется по адресу, превышающему адрес предыдущей записи на длину прыжка.
Считаю график с результатами такого теста наиболее наглядным. Ведь при отображении зависимости от LBA, ось адресов является также осью времени, хоть и в нелинейном масштабе.
Длины прыжков подбирались таким образом, чтобы в каждую ленту попадало от одного до пяти блоков. Рекомендуемый согласно стандарту размер ленты — 524288 блоков. Производители эту рекомендацию чаще всего игнорируют, но в качестве ориентира для примерного определения длины прыжка его использовать можно.
Объём данных, который требуется записать для того, чтобы SMRность проявилась во всей красе, зависит от конструкции диска и реализации его микропрограммы. А также от заполнения диска и наличия в кэше неразложенных по лентам данных, полученных в предыдущий период времени. И может отличаться буквально на порядки. Один диск покажет кардинальное падение производительности после записи 3ГБ, другому потребуется 300ГБ.
Получающиеся в результате графики могут значительно отличаться даже для одного конкретного экземпляра диска, в зависимости от разных, на первый взгляд малозначительных мелочей. Например, может сильно влиять размер отступа от нулевого LBA перед началом записи.
И это не говоря уже о влиянии заполненности кэша, распределения данных по диску, и различиях между разными производителями и моделями.
Вот, к примеру, параметры теста не менялись, диск один и тот же. Каждый запуск — новая картина. Причём между запусками у диска каждый раз было достаточно времени для завершения фоновых процессов:
![](https://habrastorage.org/webt/g4/wa/nk/g4wankzidsho9lqesv8hds41nl4.png)
![](https://habrastorage.org/webt/a3/mv/w0/a3mvw0xspp3vjrlwccb5yo5n8cy.png)
![](https://habrastorage.org/webt/6k/x5/ec/6kx5ecqj57o4z7h21f1ynluy_cg.png)
И это исправный диск. Общий объём записи в процессе всего набора тестов из скрипта составил лишь 30 гигабайт!
Поэтому запоминать параметры конкретных тестов и сравнивать формы графиков с точки зрения определения применения SMR смысла нет. Достаточно представления об общей картине, которая качественно выглядит примерно одинаково для всех SMR дисков, которые мне попались в качестве испытуемых.
Вот ещё, для дополнения представления. Другая модель диска, снова одинаковые параметры теста:
![](https://habrastorage.org/webt/5f/ea/pk/5feapktcklmfsj7fr_crd1ly1zu.png)
![](https://habrastorage.org/webt/dz/mn/jj/dzmnjji4i7y2ieyqvd_wg1pjht4.png)
![](https://habrastorage.org/webt/42/t8/vl/42t8vlwpfmm11h-xx5xit3h9xog.png)
А теперь разные параметры:
![](https://habrastorage.org/webt/hx/oz/ao/hxozao8vmn4wsolnvevw9p13gl4.png)
![](https://habrastorage.org/webt/xn/tz/0c/xntz0cckgliqq23hoz06uebnmk4.png)
![](https://habrastorage.org/webt/dj/sy/z-/djsyz-tffxz51iuzlixbaoi7zfk.png)
Глядя на вышеприведённые графики, легко понять, какие характерные черты показывают, что диск использует SMR. Особенно, если знать, что результаты аналогичных тестов не-SMR устройств выглядят примерно так:
![](https://habrastorage.org/webt/qg/0z/ua/qg0zuata088-qkasmqwwmnu2s3u.png)
![](https://habrastorage.org/webt/j7/pp/id/j7ppiduxzfkopyesdbar3ctpufi.png)
Скорость немного падает по мере увеличения LBA.
Выше приведены графики скорости записи, поскольку этот параметр более понятен широкой аудитории. Примеры графиков времени доступа под спойлером, кому интересно. Там также наблюдается характерная картина и выражена она ещё заметнее.
Время доступа
Диск с SMR, последовательно три теста в процессе выполнения одного скрипта:
![](https://habrastorage.org/r/w1560/webt/rk/8e/1t/rk8e1t_r2cny3r25ohoph_osdlk.png)
![](https://habrastorage.org/r/w1560/webt/sq/3h/60/sq3h607uno5v49xrgobkhj2poj8.png)
![](https://habrastorage.org/r/w1560/webt/yv/88/7r/yv887rra40ox2i9j5u1qk12vl40.png)
Графики с исправных дисков без SMR намного однообразнее и выглядят примерно так:
![](https://habrastorage.org/r/w1560/webt/rf/nr/rn/rfnrrnqizvzxy_ijcyeipbkeetg.png)
![](https://habrastorage.org/webt/rk/8e/1t/rk8e1t_r2cny3r25ohoph_osdlk.png)
![](https://habrastorage.org/webt/sq/3h/60/sq3h607uno5v49xrgobkhj2poj8.png)
![](https://habrastorage.org/webt/yv/88/7r/yv887rra40ox2i9j5u1qk12vl40.png)
Графики с исправных дисков без SMR намного однообразнее и выглядят примерно так:
![](https://habrastorage.org/webt/rf/nr/rn/rfnrrnqizvzxy_ijcyeipbkeetg.png)
Тест чтения сразу после теста записи
Можно считать это ещё одним способом определения использования SMR. Сравните графики тестов чтения, полученные в процессе выполнения одного тестового скрипта. Один до выполнения записи (он же был приведён в разделе «Тест чтения»), другой — после. Параметры тестов одинаковы.
![](https://habrastorage.org/webt/oj/nz/ok/ojnzokznkirp3nxdultlilcepzw.png)
![](https://habrastorage.org/webt/e8/2x/k3/e82xk3anwx-cmo2xvhojbm3-j9i.png)
Дополнительная информация
На тему конструкции SMR дисков и особенностей их работы, мой коллега сделал ролик. Достаточно коряво получилось, но было решено, что лучше выложить в таком виде сейчас, чем в улучшенном в сильно отдалённом будущем.
Если вас интересуют детали тестов, значения конкретных параметров, полные наборы результатов — пишите, выложу. В статье эту информацию не размещал, поскольку целью было дать качественное представление о картине, сделав это лаконично.