Что лучше, чтобы избежать фрагментации SSD?
Учитывая, что я хочу создать свое собственное хранилище базы данных, какого размера должны быть файлы, чтобы избежать фрагментации и издержек файловой системы, особенно в свете "новых" твердотельных накопителей?
Будет ли хорошо, например, много файлов размером 64 Кбайт? Или это будет использовать записи файла (inode) с пугающей скоростью?
Лучше использовать огромный файл и обращаться к нему только в пределах 64 Кбайт?
(Я использую 64 кбайт в качестве примера. Может быть, 4 кбайт - это магический размер? Также скажите мне, если я болтаю или я высказал свою точку зрения.)
2 ответа
Хорошие вопросы
Флэш-память в современных SSD обычно (!) Структурирована следующим образом: размер страницы 2K или 4K, чем может быть записано, и 256K блоков стирания. Страница не может быть перезаписана без предварительного удаления. Но операция стирания работает только на полных блоках стирания. Однако каждая операция удаления занимает много времени (в отличие от других операций ввода-вывода) и медленно изнашивает SSD.
Компонент контроллера SSD под названием FTL (Flash Transition Layer) используется для того, чтобы создать иллюзию блочного устройства, подобного жесткому диску, в семантике флэш-памяти. SSD можно использовать как HDD, но для получения максимальной отдачи от него (и для этого в течение длительного времени) лучше всего подходит программный дизайн ввода-вывода, включающий знание хранилища.
Однако логика контроллера SSD обычно не известна. Так что он может отличаться от SSD к SSD, но вот несколько практических правил:
Если возможно, я бы выровнял свой шаблон ввода-вывода и размеры файлов для блоков полного стирания (или их кратных). Таким образом, запись файла размером 256 КБ использует полный блок стирания без какой-либо внутренней фрагментации. Меньшие файлы, такие как 64 КБ, будут использовать только его часть. Запись данных в оставшуюся часть блока может привести к циклу чтения-изменения-записи. Это означает, что полный блок считывается, изменяется и затем записывается в другое место. Очень дорого.
Это не проблема, когда твердотельный накопитель пуст (потому что контроллер имеет достаточно неиспользуемых блоков), но может стать проблемой, если твердотельный накопитель заполнен и также интенсивно используется. Или, если шаблон ввода-вывода обычно очень маленькие записи, и SSD становится фрагментированным. Так что FTL труднее найти последовательные бесплатные флеш-страницы.
В качестве примечания: системный администратор должен выровнять файловую систему по границам стираемых блоков SSD, это действительно важно.
Это стало еще хуже, поскольку представление системы любого современного диска не соответствует фактическому расположению на физическом устройстве. Современные диски, как твердотельные, так и вращающиеся, располагают сектора там, где они хотят.
Поскольку твердотельные накопители имеют сектор 27 выравнивания износа, он может не находиться где-нибудь близко к сектору 28, и даже если они начинали "близко" друг к другу, они могут быть не близко после небольшой записи. Плюс, конечно, концепция "закрыть" с SSD является своего рода странным понятием, поскольку нет времени поиска.
Я бы отказался от любого дизайна, который имеет множество загрузок файлов, если бы дизайн был таким же простым с меньшим количеством больших файлов. Если, с другой стороны, вы сами пишете, что составляет файловую систему для сопоставления с блоками в одном большом файле, тогда, если ваша проблема не имеет очень специфических особенностей, вероятно, лучше использовать все время и мысли это вошло в существующие конструкции файловой системы.