История изменений
Исправление
anonymous-angler,
(текущая версия)
:
Продолжу свой монолог. Файловая система или том с CoW (Например ZFS
) всегда будет проигрывать в производительности решению без такового (Например md
+ ext4
). Для этого нужно просто понять как оно работает.
Без CoW
- Пишем блок данных поверх.
- Пишем блок метаданных поверх.
Порядок может меняться, может быть журнал для метаданных и т.д., это не имеет значения, потому что всё равно быстро.
С CoW
- Пишем блок данных. Поверх - нельзя, CoW же. Пишем в другое место. Теперь обновлённый кусок файла есть, но указатели в родительском узле дерева на него не указывают.
- Перезаписывать родительский узел дерева тоже нельзя. Пишем в другое место. Но теперь указатели в родительском узле родительского узла не указывают на нужный блок.
- Эта рекурсия будет повторяться до самого верха, где корневой узел просто имеет несколько копий в фиксированных местах диска.
Думаю очевидно что деревья могут быть глубокими и таких записей будет много. У ZFS есть планировщик, который позволяет группировать такие перезаписи, но даже с ним алгоритмическая сложность ощутимо выше. Ну и такое копирование приводит к ужасному фрагментированию, и с этим ничего нельзя сделать.
Плюсов такого подхода как минимум 2:
- Моментальные снапшоты (Нужно просто где-то сохранить указатель на текущий корень датасета.
- Атомарность. Транзакция либо завершится целиком, либо целиком будет потеряна. Что соответствует фокусу на целостности данных.
Т.е. отвечая на вопрос из прошлого треда: нет, приблизить производительность ZFS к LVM (если там нет CoW) - невозможно.
Исправление
anonymous-angler,
:
Продолжу свой монолог. Файловая система или том с CoW (Например ZFS
) всегда будет проигрывать в производительности решению без такового (Например md
+ ext4
). Для этого нужно просто понять как оно работает.
Без CoW
- Пишем блок данных поверх.
- Пишем блок метаданных поверх.
Порядок может меняться, может быть журнал для метаданных и т.д., это не имеет значения, потому что всё равно быстро.
С CoW
- Пишем блок данных. Поверх - нельзя, CoW же. Пишем в другое место. Теперь обновлённый кусок файла есть, но указатели в родительском узле дерева на него не указывают.
- Перезаписывать родительский узел дерева тоже нельзя. Пишем в другое место. Но теперь указатели в родительском узле родительского узла не указывают на нужный блок.
- Эта рекурсия будет повторяться до самого верха, где корневой узел просто имеет несколько копий в фиксированных местах диска.
Думаю очевидно что деревья могут быть глубокими и таких записей будет много. У ZFS есть планировщик, который позволяет группировать такие перезаписи, но даже с ним алгоритмическая сложность ощутимо выше. Ну и такое копирование приводит к ужасному фрагментированию, и с этим ничего нельзя сделать.
Плюсов такого подхода как минимум 2:
- Моментальные снапшоты (Нужно просто где-то сохранить указатель на текущий корень датасета.
- Атомарность. Транзакция либо завершится целиком, либо целиком будет потеряна. Что соответствует фокусу на целостности данных.
Т.е. отвечая на вопрос из прошлого треда: нет, приблизить производительность ZFS к LVM (если там нет CoW) - невозможно.
Исходная версия
anonymous-angler,
:
Продолжу свой монолог. Файловая система или том с CoW (Например ZFS
) всегда будет проигрывать в производительности решению без такового (Например md
+ ext4
). Для этого нужно просто понять как оно работает.
Без CoW
- Пишем блок данных поверх.
- Пишем блок метаданных поверх.
Порядок может меняться, может быть журнал для метаданных и т.д., это не имеет значения, потому что всё равно быстро.
С CoW
- Пишем блок данных. Поверх - нельзя, CoW же. Пишем в другое место. Теперь обновлённый кусок файла есть, но указатели в родительском узле дерева на него не указывают.
- Перезаписывать родительский узел дерева тоже нельзя. Пишем в другое место. Но теперь указатели в родительском узле родительского узла не указывают на нужный блок.
- Эта рекурсия будет повторяться до самого верха, где корневой узел просто имеет несколько копий в фиксированных местах диска.
Думаю очевидно что деревья могут быть глубокими и таких записей будет много. У ZFS есть планировщик, который позволяет группировать такие перезаписи, но даже с ним алгоритмическая сложность ощутимо выше. Ну и такое копирование приводит к ужасному фрагментированию, и с этим ничего нельзя сделать.
Плюсов такого подхода 2:
- Моментальные снапшоты (Нужно просто где-то сохранить указатель на текущий корень датасета.
- Атомарность. Транзакция либо завершится целиком, либо целиком будет потеряна. Что соответствует фокусу на целостности данных.
Т.е. отвечая на вопрос из прошлого треда: нет, приблизить производительность ZFS к LVM (если там нет CoW) - невозможно.