Как стать автором
Обновить

Комментарии 37

Я не видел ни одной nvme, которая бы умела больше одной ns. И корпоративной тоже. Dell'овые топовые NVME тоже только 1 ns делают. Это нужно какому-то конкретному вендору для каких-то конкретных вопросов.


В целом, я
1) Не доверяю управление разделами фирмвари nvme.
2) Не доверяю шифрование фирмвари nvme
3) Не доверяю адекватность обработок ошибок thin provision nvme


Другими словами, я им не доверяю. Я им и байты-то с трудом доверяю, не то, что сложные вопросы.


Все эти технологии хорошо реализуются в софте. Поддержка нескольких контроллеров и всякие "фабрики nvme" безумно далеки от реального мира, так что вся вот эта красота — она просто для усложнения имени устройства.


Пользы от неё только в том, что для управления character device появился, вместо магических ioctl'ов во внутрь блочного устройства.


А из всего полезного в nvme (как утилите управления) — это format (позволяющий поменять размер сектора с 512 до 4к на некоторых моделях), да местный аналог smart'а.

Мне удалось создать больше одной NS на Micron 7300 (MTFDHBE960TDF), однако только private и без thin provision.

А с чем связано такое недоверие? Почему софт для вас софт лучше?

Сколько производителей фирмварей для nvme на рынке? Допустим, 500. У нас есть 500 проприетарных прошивок, для которых есть 500, коммерчески ограниченных QA-отделов и программистов для code review шифрования. Как выдумаете, сколько времени уделяется для конкретной прошивки конкретного вендора?


А теперь сравните с opensource реализацией в ядре. Сколько у нас пользователей для dmcrypt? Вроде, только на Андроиде 2.5 миллиардов. Ещё сервера. Очевидно, что dmcrypt тщательно вычитан и проверен. Это не означает, что в нём нет багов, но объём усилий по qa, объём пользовательской базы и срок жизни кода (кратно больший, чем время жизни фирмвари для конкретного контроллера), все вместе они делают уровень доверия несравнимым.


Если что, я прямо сейчас изучаю, казалось бы, простую задачу "вайпать диски". У меня в коллекции уже есть диск, который при попытке wipe'а делает power reset (не дотерев), диск, который не может закончить secure erase, диск, который делает blkdiscard, но оставляет данные доступными (что не баг, просто "фича").


Короче, авторы фирмварей — априори криворуки, и если на стандартные usecase'ы (читать/писать) можно хотя бы частично надеяться (потому что иначе они не смогут продавать устройства долго), то не стоит надеяться на тщательность реализации аппендикса 19 третьей ревизии стандарта, том 4, у которого есть 2.5 пользователя во всём мире.

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

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

Пока искал решение проблемы наткнулся еще на огромное количество различных багов. Один из забавных — вайп данных на Samsung 970 EVO происходит только после того, как переведешь ноутбук в suspend-режим и включишь его обратно.
Это не баг, а фича.
Modern computers will “freeze” the disk at boot. Press the sleep button to overcome this. The computer could be placed into a sleep mode to unfreeze them.

Состояние frozen предусмотрено стандартом.
Сколько производителей фирмварей для nvme на рынке? Допустим, 500

Допускайте сразу миллион, для красоты, чего уж там.
10 — гораздо более близкое к правде количество

https://market.yandex.ru/catalog--vnutrennie-tverdotelnye-nakopiteli-ssd/83821/filters?text=ssd&cpa=0&hid=16309373&onstock=0&local-offers-first=0


Ткните "показать ещё" в вендоры. Моя оценка ближе. Не путайте производителей чипов (их мало) и производителей SSD со своей фирмварей в чужих чипах (их много).

Вы сами этот список смотрели? Там 69 производителей. ВСЕХ SSD, а не только NVMe. Из них часть — безвестная кетайщина, которая уж точно ничего не пишет сама. Часть — просто перелицованные бренды, которые в фирмвари только информацию о модели меняют. Часть давно уже SSD не выпускает. А бОльшая часть от оставшейся части выпускает только SATA.
Ну и где "допустим 500"?
Я бы оценивал количество разработчиков по количеству производителей контроллеров (а их сколько актуальных? Штук 5?) умноженному на количество производителей чипов. И то это крайняя оценка. И также никакими пятистами не пахнет.

Почему вы считаете "производителя контроллера" равным "автору прошивки"? Чип контроллера один и тот же, секретный соус (код) у каждого свой. Вероятнее всего, часть использует откровенный whitelabel (тот же Dell использует и не стесняется), но часть пилит своё (на стандартном железе).


В целом, моя предвзятость базируется на срачике с отделом разработки одного суперизвестного бренда второго эшелона, когда для ускорения устройства в моих бенчмарках он "посмотрел как сделал самсунг и сделал так же", заменил deterministic discard на non-deterministic. И это для прошивки для устройства в масс-продакшене!


Как можно доверять вендорам в таких ситуациях?

секретный соус (код)

Как вы говорите соус секретный и поэтому его рецепт не раскрывает, а только дает возможность некоторым образом изменить настройки работы контроллера. То есть сломать ничего нельзя. Код раскрывается лишь единицам, на поддержку которых вендорам не жалко ресурсов.
Почему вы считаете «производителя контроллера» равным «автору прошивки»?
А почему я не могу так считать? :)

секретный соус (код) у каждого свой
Соус (код) чего именно? И почему он должен быть секретным? С большой (хоть и не 100%) уверенностью предполагаю, что с контроллерами производителям передают открытый типа-SDK, в котором нет смысла (хоть и есть возможность) что-то менять кроме конкретных параметров для конкретных чипов памяти.

В целом, моя предвзятость базируется на срачике с отделом разработки одного суперизвестного бренда
Как можно доверять вендорам в таких ситуациях?

Так дискуссия-то не про ваше доверие кому-то, а про то, с чего вдруг количество производителей фирмвари NVMe SSD «допустим 500»?
Я не видел ни одной nvme, которая бы умела больше одной ns. И корпоративной тоже. Dell'овые топовые NVME тоже только 1 ns делают. Это нужно какому-то конкретному вендору для каких-то конкретных вопросов.

Enterprise SSD PE80 серии от Hynix умеют до 128 неймспейсов. Другое дело что заказчик определяет сколько их будет в прошивке.

В целом, я
1) Не доверяю управление разделами фирмвари nvme.

Фирмварь NVMe диска не управляет разделами. NVMe Namespace — это и есть сам диск. И на уровне протокола он выглядит для хоста изолированным устройством, как и обычный HDD. То, что несколько дисков находятся физически на одном устройстве — следствие растущей производительности и емкости NVMe накопителей.

2) Не доверяю шифрование фирмвари nvme

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

3) Не доверяю адекватность обработок ошибок thin provision nvme

Не совсем понимаю о каких ошибках идет речь. Thin Provisioning вообще очень специфичная функция и ее очень мало кто требует.

Другими словами, я им не доверяю. Я им и байты-то с трудом доверяю, не то, что сложные вопросы.

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

Поддержка нескольких контроллеров и всякие «фабрики nvme» безумно далеки от реального мира, так что вся вот эта красота — она просто для усложнения имени устройства.

Вся эта красота — для упрощения. Упрощения создания облачных хранилищ, обеспечения безопасности доступа к данными. Один современный NVMe накопитель с несколькими неймспейсами и виртуальными контроллерами уже на уровне протокола позволяет безопасно и изолированно друг от друга хранить данные NN (Number of Namespaces) облачных серверов. Весь NamespaceManagement писался под сервера. И это уже становится востребованным.
Enterprise SSD PE80 серии от Hynix умеют до 128 неймспейсов. Другое дело что заказчик определяет сколько их будет в прошивке.

Комментом ниже — тестировал, только на серии PE81.

Enterprise SSD PE80 серии от Hynix


Ура. Мы нашли 1 пользователя namespace'ов. Осталось найти ещё 1.5 штуки и список будет закрыт.


namespace в nvme — это партиционирование силами устройства. Это не partition table и не gpt, разумеется, но это партиционирование.


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


На нормальном сервере управлять партиционированием устройства удобнее с помощью LVM (который, в отличие от linux-raid, на nvme скорости сильно не роняет).


Насчёт того, что это "безопасно и изолировано" — это ваш QA отдел сказал. Один из (условных) 500, каждый из которых уверен, что безопасно и изолировано. А на выходе я сижу и чешу репу, что каждый вендор имеет сломанную фирмварь в очередном новом месте.

Вот именно про nvme format --lbaf=1 для переключения с 512-байтных секторов на 4К и хотелось бы видеть в статье хотя бы кратенькое дополнение.

>>По какой-то причине нумерация контроллеров начинается с 1, то есть контроллер /dev/nvme0 имеет идентификатор 1, который и указывается в аргументе --controllers.
Потому что nsid=0 зарезервированно для внутренних нужд. Говорю, как разработчик хостовой части фирмвари :)
В целом по статье — всё отлично. Единственное — доступность более чем одного NS задаётся в прошивке, и это бывает относительно редко. Зависит от требований заказчика. В потребительском сегменте это большая редкость вообще, потому что без этой подсистемы сама прошивка значительно компактнее и проще выходит.
Только, наверное, не nsid, а какой-нибудь ctrlid? Ведь речь идет о нумерации контроллеров)

Смысл в том, что в devfs нумерация контроллеров начинается с 0. Например /dev/nvme0, а вот в аргументе нужно указывать 1.
Да, там чуть иначе. «NSID=NSIDX+1» — примерно так идёт во всей прошивке. Это применимо как к пространствам имён, так и к самим устройствам. Откуда это пошло — я не в курсе, к сожалению. Возможно, это некое наследие больного прошлого…
В любом случае загадка решена!

Спасибо за информацию)
Да, там чуть иначе. «NSID=NSIDX+1» — примерно так идёт во всей прошивке.

Ну это смотря как писать)

Это применимо как к пространствам имён, так и к самим устройствам. Откуда это пошло — я не в курсе, к сожалению. Возможно, это некое наследие больного прошлого…

NSID=0 зарезервировано потому что 0 — пустое значение для любого поля в NVMe CommandEntry. Если бы можно было создать нулевой неймспейс, то любая команда от хоста, специфичная для неймспейсов, и содержащая пустой NSID, предназначалась бы для этого злосчастного неймспейса. Ведь порядок назначения NSID для создаваемых неймспейсов определен в стандарте, по возрастанию от наименьшего незанятого значения. А так 0 — это или «команда не использует NSID», или «Invalid NS or Format» если использует.

А что касается --controlers=1 у автора, то я не помню что бы CNTID или CNTLID не могли быть равны 0. NVMe 1.3c раздел 7.11:
Возможно, это сделано для того, чтобы логика сохранялась. Или просто зависит от вендора.
Поясните, пожалуйста, доступ к пространству NS B имеют два хоста одновременно?
Именно так. Пример для чего это может быть нужно — шаренное хранилище образов для развертывания виртуальных серверов.
При этом можно не только присоединить его «только для чтения», но и на уровне протокола защитить диапазоны адресов от конкурентного доступа (группа команд Reservation в протоколе).
Что из себя представляет механизм конкурентного доступа к одному и тому же полю для записи?
Представим что два хоста одновременно решили обновить один и тот же (или пересекающийся) диапазон LBA. С точки зрения NVMe устройства данные останутся консистентными т.к. оно просто последовательно обработало несколько операций записи в одни и те же LBA. Но с точки зрения одного из хостов, перезаписанные LBA имеют ошибочное значение.
Но с точки зрения одного из хостов, перезаписанные LBA имеют ошибочное значение.

И что из этого следует?
И что из этого следует?

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

Для безопасной записи в шаренный неймспейс, хост может временно запросить привилегированный доступ на запись или запись и чтение командой Reservation Acquire. По окончании работы, отпустить неймспейс командой Reservation Release. И тогда всем будет хорошо.
В общем то меня вторая часть ответа интересовала. Спасибо.
Зависит от хотелок. Можно создать публичное пространство и закрепить его за разными NVMe-контроллерами, подключенным к разным хостам. Таким образом, у разных хостов появится возможность использовать это пространство. А можно изолировать NS так, чтобы только один хост его использовал.
Очень интересно было тестировать у себя такой функционал — требовалось проверить работу 128 виртуальных функций вкупе с управлением пространствами имён. В итоге каждой функции назначил свой NS, за которым был некий кусочек общего пространства диска. Пришлось писать свой модуль для NVME-CLI, но он только для внутреннего использования — сильно специфичен. Заодно пришлось лезть в отладку ядра Linux и узнать много нового о внутренней кухне :)

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

Увы, оно пригодно только для серверных дисков - в простых клиентских таких фич нету. Ну и реализует неколько кастомных команд. Потому тула только на работе хранится...

Почему ресурс перезаписи (tbw) у NVMe дисков ниже, чем у SATA SSD?

гхм, а с чего вы это взяли?

из datasheet к конкретным дискам

ресурс зависит от используемой flash-памяти, её размера, алгоритмов контроллера в конце концов, а никак не от интерфейса.


вот вам контрпример:
https://ark.intel.com/content/www/ru/ru/ark/products/134918/intel-ssd-d3-s4610-series-7-68tb-2-5in-sata-6gb-s-3d2-tlc.html
https://ark.intel.com/content/www/ru/ru/ark/products/140107/intel-ssd-dc-p4610-series-7-6tb-2-5in-pcie-3-1-x4-3d2-tlc.html

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