Ветеран
Сообщения: 2029
Благодарности: 704
|
Профиль
|
Отправить PM
| Цитировать
P.S. Если кому-нибудь будет интересно, я могу рассказать о том, что из себя представляет фрагментация на SSD, чем она принципиально отличается от фрагментации файлов в файловой системе, почему она приводит к снижению (иногда очень значительному) производительности диска и почему стандартные средства ОС успешно устраняют фрагментацию файлов в файловой системе, но только увеличивают степень внутриблоковой фрагментации.
Как всем хорошо известно, SSD имеет минимально адресуемую единицу данных - страницу, размер которой в большинстве случаев составляет 4096 байт полезной информации (плюс служебная, которая пользователю не видна. так же, как и на жестких дисках). Кроме страницы, существует блок - минимальная единица данных к которой применима операция стирания (erase).
Блок чаще всего состоит из 128 страниц и имеет, таким образом, величину в 512к.
Примечание: иногда в англоязычной литературе вместо термина "страница" используется термин "блок", "блок" называют "сектором", а потом еще просят не путать его с сектором на HDD, который синонимичен блоку и аналогичен странице SSD. Единственной целью такого разъяснения, как мне кажется, является желание окончательно запутать читателя.
Прошу прощения за то, что повторяю всем известные азы, но возможно кто-нибудь из уважаемых участников форума уже успел это позабыть.
Пользователю твердотельный диск представляется непрерывной последовательностью логических блоков, начиная с 0. Эти блоки должны иметь взаимно однозначное отображение на физические страницы диска. Каждой странице должно соответствовать 8 512-тибайтных логических блоков.
А физическому блоку SSD, который имеет размер 512к, и с которым я вас, надеюсь, окончательно сбил с толку, должно соответствовать 1024 512-ти байтных логических блоков. Причем адреса этих логических блоков должны быть строго последовательны, то есть не иметь нарушений последовательности, дырок, смещений и тому подобное.
Блок содержащий логические блоки "0, 1, 2, 3 ... 1023" не фрагментирован. А блок "8, 9, 10, 11, 12, 13, 14, 15, 0, 1, 2, 3... 1023", как легко видеть, фрагментирован.
Если количество фрагментированных блоков достигает определенного, относительно небольшого предела, контроллер, которому некуда будет записывать новый фрагментированный блок, приступит к процедуре "объединения" (merging), которая, в худшем случае, потребует 128 операций чтения, 128 операций записи и 2 операции стирания.
Понятно, что на производительности диска это скажется самым не лучшим образом.
Примечание: в данном случае, как легко видеть, я предполагаю, что контроллер использует какой-то из гибридных алгоритмов FTL. К примеру, FAST. Во всех известных мне SSD реализован какой-то из гибридных алгоритмов (их несколько и все они служат одной цели - уменьшить количество операций объединения).
Но если, к примеру, производитель решил воспользоваться каким-то другим типом алгоритма преобразования логических номеров секторов в физические, к примеру DFTL (FTL on demand), результат будет тем же, только механизм немного другой.
Да, кстати. На всякий случай напомню: FTL - это аббревиатура от "flash translation layer". Промежуточное ПО, которое выполняет три задачи. Кроме собственно преобразования адресов оно занимается еще сборкой мусора (блоков, помеченных на удаление, но не удаленных) и тем самым wear leveling о котором так много любят говорить, когда речь заходит о flash-памяти. Конечно, забота о переназначении дефектных блоков лежит на нем же, но вряд ли имеет смысл выделять его в отдельную задачу - ведь это всё та же трансляция адресов.
|