Изменение поведения инода - PullRequest
1 голос
/ 06 декабря 2010

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

Я взял исходный код ядра, скомпилировал его, прочитал кучу об inode и посмотрел файл inode.c в подкаталоге fs.Тем не менее, я просто не уверен, каким образом я могу гарантировать, что любой новый создаваемый файл и индекс для этого файла могут быть сохранены в тех же или смежных блоках.Любая помощь или указатели для дальнейшего чтения будут оценены.Спасибо!

Ответы [ 2 ]

0 голосов
/ 11 декабря 2010

Спасибо за разработку дизайна файловой системы!

Во-первых, несколько советов по проектированию, прежде чем вы углубитесь во взлом: сделайте копию дерева ext3 и переименуйте файловую систему во что-то другое.Я обнаружил, что при внесении экспериментальных изменений в файловую систему вы действительно не хотите, чтобы она использовалась для вашей основной системы.Ваша система должна по-прежнему загружаться, даже если вы введете ошибку, которая случайным образом теряет файлы (это в конечном итоге произойдет).Вам также нужно будет разветвлять инструменты пользовательского пространства ext3 для работы с вашей новой системой.

Во-вторых, получите копию Понимание ядра Linux, 3-е изд. от Bovet и Cesati.Он представляет организованный взгляд на подсистемы ядра, и я нашел его объяснения стоящими.Он написан для более старого ядра (2.6. x для некоторых x <15; я точно забыл), но во многих местах он все еще точен.Прочитайте его описания файловых систем.Я полагаю, что он охватывает ext3. </p>

В-третьих, в отношении вашего реального проекта вы не предлагаете простую модификацию ext3.Эта файловая система имеет довольно простой способ сопоставления номера инода с дисковым блоком.Вам нужно будет найти новый способ сделать это отображение.Я бы не ожидал каких-либо изменений в остальной части ext3.Решение этой проблемы может быть одним из ключевых моментов проектирования вашей архитектуры.Обратите внимание, что хранение большого массива карт inode -> дисковых блоков не решит вашу проблему: вероятно, не лучше, чем существующий ext3.

0 голосов
/ 06 декабря 2010

Интересная идея.

Я не очень хорошо знаком с ext3, но могу дать вам несколько общих указателей.

В настоящее время ext3 хранит inode в предопределенных местах.Каждая группа блоков имеет свою собственную таблицу inode, массив inode.Поэтому, когда у вас есть номер инода (т. Е. В результате поиска имени файла в каталоге), вы можете найти соответствующий инод на диске, сначала используя номер инода, чтобы выбрать правильную группу блоков, а затем проиндексировать этот блок.таблица индексов группы.

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

Чтобы что-то подобное произошло, создание нового файла (т. Е. Выделение индекса) должно работать совсем иначе, чем в текущей файловой системе ext3.Вместо использования растрового изображения для поиска неиспользуемого, предварительно выделенного и предварительно инициализированного inode, вам придется выделить пустой блок и инициализировать его самостоятельно.Итак, вы, вероятно, захотите взглянуть на то, как файловая система распределяет блоки при записи в файл, а затем имитировать это для выделения инода.

Альтернативная схема состояла бы в том, чтобы хранить индекс внутри каталог.Таким образом, вы сохраняете ввод / вывод не потому, что индекс находится рядом с его данными, а потому, что при поиске имени файла вы также читаете индекс.Это было сделано еще в 90-х годах в качестве эксперимента в файловой системе FFS BSD и было написано в превосходной USENIX Paper .Эти идеи никогда не превращались в FFS или в любую другую файловую систему основного потока, о которой я знаю, поэтому может быть интересно посмотреть, как они работают в ext3.

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

Удачи!Звучит как забавный проект.

...