Проблема с медленным allocate в libguestfs.

Понедельник, 17 октября 2011 г.

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

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

Поясню почему возникает проблема:

  • libguestfs проверяет наличие возможности использовать системный вызов fallocate.

    • Если такой вызов не поддерживается, то мы просто забиваем нолями нужный объём пространства.
    • Если поддерживается, то ядро говорит файловой системе - займи нужное пространство. В таком случае операция выполняется очень быстро.

В файловой системе ext2-3 поддержка fallocate не реализована. Можно использовать fallocate в файловых системах ext4, xfs, btrfs.

Надо бы ещё поисследовать то, как влияет размер inode файловой системы на производительность виртуалок.