Гунька. Лог-структурированная запись

Продолжение увекательных аналитичеких постов на основе персонажей Н.Носова. Предыдущий пост можно найти тут 

На Гуньку управа нашлась давно, еще в 1988 году, когда были придуманы лог-структурированные файловые системы.

Смысл лог-структурированной записи — давайте никогда не перезаписывать данные и все писать в конец.

1

Лог-структурированная запись (Гепард) и обычная запись (Черепаха) на СХД

Писать надо сразу большими блоками ( т.е. Пончиками). Для этого надо всех приходящих Гунек объединить в один Пончик и сделать стек из Пончиков.

Пончик_Ест_пончики

Почему лог-структурированная запись не панацея и почему с ней надо быть осторожным?

Существуют следующие часто встречающиеся ситуации:

  1. Превращение Знайки в Незнайку (со всеми вытекающими последствиями)

Кейс — многопоточная последовательная запись. Пишем в большое количество последовательных потоков, т.е. Пончиками, в логе они перемешиваются, значит будущее чтение уже не будет последовательным.

                                    N

                                    Превращение Знайки в Незнайку

  1. Незнайка и Гунька не могут поделить место

Кейс — часто изменяющийся файл.  Часто перезаписывая один и тот же файл, получаем «дырки» из неактуальной информации. Как следствие — последующая фрагментация свободного места и деградация производительности. Проблема актуальна, когда нет «сборки мусора».

спорят

Незнайка и Гунька не могут поделить место

А теперь изложим все это по-научному

автор: Евгений Анастасиев

Лог-структурированная запись — это метод записи, при котором все изменения пишутся непрерывным (или почти непрерывным) журналом. Таким образом, любая случайная запись преобразуется в последовательную. Получающаяся при многократной перезаписи «каша» из свободных и занятых сегментов на блочном устройстве впоследствии дефрагментируется. В настоящее время лог-структурированная запись реализована, в основном, на уровне файловых систем (ФС).

LSF

LSF или лог-структурированные файловые системы представляют собой большой журнал, в котором записаны все изменения. Запись изменений существующих файлов и инодов (говоря по-простому, указателей на файлы и каталоги) выполняется в режиме копирования при записи (Сopy-On-Write) — пространство, занятое старой версией, помечается как свободное, а новая версия дописывается в конец занятого пространства.

Блоки

 

Логика работы в режиме копирования при записи

Такие файловые системы основаны на предположении, что файлы кэшируются в оперативной памяти и, что с увеличением объёма памяти кэш будет всё более эффективно удовлетворять запросы на чтение. В результате в дисковом трафике будут преобладать операции записи.

На сегодняшний день такие ФС используются, в основном, на одиночных SSD, а также на встроенной флеш-памяти мобильных устройств. Использовать для лог-структурированной записи именно LSF вовсе не обязательно, такую запись вполне можно организовать и на блочном уровне, что отчасти сделано в Random Write Cache: непоследовательные запросы перенаправляются на отдельный том, на котором осуществляется лог-структурированная блочная запись. В определенные моменты информация оттуда копируется в нужные lba (адреса запроса) на основной том.

SSD и HDD

В этом разделе кратко описаны принципиальные отличия HDD от SSD, которые важны

в контексте рассмотрения лог-структурированной записи.

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

С твердотельными накопителями ситуация иная. На таких накопителях непоследовательные запросы не снижают производительность очень сильно. Однако у SSD существует явление износа, что влечет за собой необходимость выравнивать запись на накопитель. Кроме того, устройство SSD подразумевает периодическую «сборку мусора» — процесс, влекущий изрядную деградацию производительности.

Все это означает, что для SSD в плане производительности лучше всего ситуация, когда «сборка мусора» — процесс более или менее контролируемый, а запись осуществляется с учетом особенностей накопителя.

Блоки_2

 

Процесс «сборки мусора»