Понимание теневого пейджинга и его отличие от журналирования файловых систем - PullRequest
2 голосов
/ 18 марта 2019

Я пытаюсь получить хорошее представление о теневой подкачке в Unix-подобных файловых системах; то, что вы можете увидеть в ZFS или WAFL . Кажется, что в теневой подкачке, когда кто-то хочет внести изменения в страницу, на другую страницу или «теневую страницу» записывается. По завершении операции (й), т.е. когда все зафиксировано, теневая страница записывается, заменяя старую страницу. Это правильное (хотя и высокоуровневое) понимание теневого пейджинга?

Чем теневая подкачка отличается от журналируемых файловых систем? Они кажутся довольно похожими.

Спасибо за ваше время!

1 Ответ

1 голос
/ 19 марта 2019

Обе системы позволяют обеспечить атомарность / согласованность с помощью различных механизмов:

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

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

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

Возможно,Самым большим недостатком копирования при записи, особенно для вращающихся дисков, является то, что он имеет тенденцию к «сырому» хранению ваших данных, в результате чего они становятся довольно фрагментированными и, следовательно, требуют большего количества обращений к диску во время больших последовательных чтений файлов, которые часто обновляются.У ZFS есть эта проблема, и я думаю, что некоторые более поздние системы копирования при записи работали над этим, имея некоторые промежуточные уровни, сопоставляющие адреса логических блоков с физическими адресами, чтобы позволить дефрагментации данных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...