Блокировать перераспределение
Подраспределение блоков — это функция некоторых компьютерных файловых систем , которая позволяет использовать большие блоки или единицы выделения , одновременно эффективно используя пустое пространство в конце больших файлов, пространство, которое в противном случае было бы потеряно для другого использования из-за внутренней фрагментации . [1]
В файловых системах, которые не поддерживают фрагменты, эта функция также называется объединением хвостов или упаковкой хвостов , поскольку обычно она осуществляется путем упаковки «хвоста» или последнего частичного блока нескольких файлов в один блок.
Обоснование
[ редактировать ]Файловые системы традиционно делят диск на блоки одинакового размера, чтобы упростить их конструкцию и ограничить фрагментацию в худшем случае . Размеры блоков обычно кратны 512 байтам из-за размера секторов жесткого диска . Когда файлы распределяются с помощью некоторых традиционных файловых систем, отдельным файлам могут быть выделены только целые блоки. Но поскольку размеры файлов часто не кратны размеру блока файловой системы, такая конструкция по своей сути приводит к тому, что последние блоки файлов (называемые хвостами ) занимают только часть блока, что приводит к так называемой внутренней фрагментации (не путать с внешняя фрагментация ). Эта трата пространства может быть значительной, если файловая система хранит много маленьких файлов, и может стать критической при попытке использовать блоки большего размера для повышения производительности. UFS и другие производные файловые системы UNIX поддерживают фрагменты. [ нужна ссылка ] что значительно смягчает этот эффект.
Схемы субраспределения
[ редактировать ]Подраспределение блоков решает эту проблему, разделяя хвостовой блок каким-либо образом, чтобы в нем можно было хранить фрагменты из других файлов.
Некоторые схемы подраспределения блоков могут выполнять выделение на уровне байтов; большинство, однако, просто делят блок на более мелкие (делитель обычно равен некоторой степени 2). Например, если файл размером 38 КиБ должен храниться в файловой системе с использованием блоков по 32 КиБ, для хранения файл обычно занимает два блока или 64 КиБ; оставшиеся 26 КиБ второго блока становятся неиспользуемым свободным пространством. Однако при дополнительном распределении блока размером 8 КиБ файл будет занимать всего 6 КиБ второго блока, оставлять 2 КиБ (из блока субраспределения 8 КиБ) свободными и освобождать остальные 24 КиБ блока для других файлов.
Упаковка хвоста
[ редактировать ]С тех пор некоторые файловые системы были разработаны с учетом использования этого неиспользуемого пространства и могут упаковывать хвосты нескольких файлов в один общий хвостовой блок. Хотя на первый взгляд может показаться, что это значительно увеличит фрагментацию файловой системы, негативный эффект можно смягчить с помощью функций упреждающего чтения в современных операционных системах — при работе с короткими файлами несколько хвостов могут быть достаточно близко друг к другу, чтобы их можно было прочитать вместе. , поэтому поиск по диску не вводится. Такие файловые системы часто используют эвристику , чтобы определить, стоит ли упаковывать хвосты в данной ситуации. а программное обеспечение для дефрагментации может использовать более развитую эвристику.
Эффективность
[ редактировать ]В некоторых сценариях, когда большинство файлов короче половины размера блока, например в папке с небольшими файлами исходного кода или небольшими растровыми изображениями, хвостовая упаковка может повысить эффективность хранения даже более чем в два раза по сравнению с файловыми системами без хвостовой упаковки. [2]
Это не только приводит к экономии дискового пространства, но также может привести к увеличению производительности, поскольку из-за более высокой локальности ссылок необходимо читать меньше данных, что также приводит к более высокой страничного кэша эффективности . Однако эти преимущества могут быть сведены на нет возросшей сложностью реализации . [3]
По состоянию на 2015 год [update]Наиболее широко используемые файловые системы для чтения и записи с поддержкой подраспределения блоков — это Btrfs и FreeBSD UFS2. [4] (где это называется « фрагментация на уровне блоков »). ReiserFS и Reiser4 также поддерживают упаковку хвостов.
Некоторые файловые системы, доступные только для чтения, вообще не используют блоки и, таким образом, неявно используют пространство так же эффективно, как и файловые системы с субраспределением; такие файловые системы служат форматами архивов .
См. также
[ редактировать ]Ссылки
[ редактировать ]- ^ Патент США 6 041 407 (фундаментальный патент).
- ^ Ганс Райзер (2001). «Использование жесткого диска, ReiserFS и Ext2fs» . Архивировано из оригинала 13 ноября 2006 года . Проверено 14 декабря 2006 г.
- ^ Ганс Райзер (2001). «Проектирование файловой системы ReiserFS» . Архивировано из оригинала 13 ноября 2006 года . Проверено 14 декабря 2006 г.
- ^ Херви, Аллен (20 июня 2005 г.). «Введение во FreeBSD, семинар PacNOG I, дополнительные темы, UFS2 и программные обновления составляют мощную комбинацию» (PDF) . ПакНОГ I. п. 23 . Проверено 22 июля 2012 г.
- Дэниел Роббинс (1 августа 2001 г.). «Руководство по внедрению расширенной файловой системы, часть 2» . Общие темы, IBM . Проверено 14 декабря 2006 г.