Прототипирование файловой системы - PullRequest
3 голосов
/ 27 июля 2010

Каковы некоторые рекомендации по созданию прототипа файловой системы?

Я пытался в Python использовать fusepy , и теперь мне интересно:

  • В долгосрочной перспективе респектабельная реализация файловой системы быть в C? Не будет в C мешать портативность, или в конечном итоге вызвать проблемы с производительностью?
  • Существуют ли другие реализации, такие как FUSE
  • Очевидно, что технология ядра файловой системы движется медленно (fat32, ext3, ntfs, все остальное - мелкая рыба), какие методы отладки используются?
  • Каков общий курс разработки файловой системы для достижения высокооптимизированной, полностью поддерживаемой реализации в основных ОС?

Ответы [ 4 ]

4 голосов
/ 27 июля 2010

Файловая система, которая живет в пользовательском пространстве (будь то в FUSE или его версии для Mac), очень удобная вещь, но не будет иметь такую ​​же производительность, как традиционная, которая живет в пространстве ядра (и, следовательно, должна быть в C).).Вы могли бы сказать, что именно по этой причине микроядерные системы (где файловые системы и другие объекты живут в пользовательском пространстве) никогда не "оставляли монолитные ядра в пыли", как так уверенно заявил А. Таненбаум, когда он атаковал Linux в известной публикации в списке рассылки MinixДвадцать лет назад (как профессор CS, он сказал, что не сможет Линуса выбрать монолитную архитектуру для своей ОС - Линус, конечно же, ответил энергично, и весь обмен теперь довольно известен и его можно найти во многих местах в Интернете; -).

Переносимость на самом деле не проблема, если, возможно, вы не ориентируетесь на «встроенные» устройства с очень ограниченным объемом памяти - за исключением таких устройств, вы можете запустить Python, где вы можете запустить C(во всяком случае, ограничивает доступность FUSE, а не среда исполнения Python).Но производительность определенно может быть.

2 голосов
/ 27 июля 2010

В долгосрочной перспективе, должна ли любая уважаемая реализация файловой системы быть на C?Не будет ли на C затруднение переносимости или, в конечном итоге, проблемы с производительностью?

Не обязательно, что существует множество языков, отличных от C (O'Caml, C ++ - первое, что приходит на ум.)На самом деле, я ожидаю, что NTFS будет написана на C ++.Похоже, вы пришли из Linux, и, поскольку ядро ​​Linux написано на C, любая файловая система с надеждами на объединение с ядром также должна быть написана на C.

Есть ли другие реализации, такие как FUSE?

Есть пара для Windows, например, http://code.google.com/p/winflux/ и http://dokan -dev.net / ru / в различныхуровни зрелости

Очевидно, что технология базовой файловой системы движется медленно (fat32, ext3, ntfs, все остальное - мелкая рыба), какие методы отладки используются?в основном это верно для Windows, в Solaris у вас есть ZFS , а в Linux ext4 и btrfs .Методы отладки обычно включают в себя выключение машин во время различных операций и просмотр состояния оставшихся данных, сохранение огромных объемов данных и производительность.

Каков общий курс разработки файловой системы при получениив высокооптимизированной, полностью поддерживаемой реализации в основных ОС?

Опять же, это зависит от того, какая ОС, но требует значительного количества тестирования, особенно чтобы убедиться, что сбои не потеряют данные.

1 голос
/ 04 августа 2010

Я рекомендую вам создать макет объекта для уровня API блочного устройства ядра.Поддельный слой должен использовать файл mmap 'd в качестве резервного хранилища для файловой системы.Для этого есть много преимуществ:

  1. Чрезвычайно высокая производительность FS для выполнения юнит-тестов.
  2. Возможность вставлять отладочный код / ​​точки останова в слой mock для проверкиусловия отказа.
  3. Простое сохранение нескольких копий состояния файловой системы для изучения или выполнения контрольных примеров.
  4. Возможность детерминистически вносить ошибки блочного устройства или другие системные события, которые файловой системе придется делатьручка.
0 голосов
/ 04 августа 2010

Респектабельные файловые системы будут быстрыми и эффективными.Для Linux это в основном будет означать написание на C, потому что вас не воспримут всерьез, если вы не распространяете ядро.

Что касается других инструментов, таких как Fuse, есть MacFUSE , что позволит вам использовать тот же код на Mac, а также Linux.

...