LINUX.ORG.RU

История изменений

Исправление anonymous-angler, (текущая версия) :

Продолжу свой монолог. Файловая система или том с CoW (Например ZFS) всегда будет проигрывать в производительности решению без такового (Например md + ext4). Для этого нужно просто понять как оно работает.

Без CoW

  1. Пишем блок данных поверх.
  2. Пишем блок метаданных поверх.

Порядок может меняться, может быть журнал для метаданных и т.д., это не имеет значения, потому что всё равно быстро.

С CoW

  1. Пишем блок данных. Поверх - нельзя, CoW же. Пишем в другое место. Теперь обновлённый кусок файла есть, но указатели в родительском узле дерева на него не указывают.
  2. Перезаписывать родительский узел дерева тоже нельзя. Пишем в другое место. Но теперь указатели в родительском узле родительского узла не указывают на нужный блок.
  3. Эта рекурсия будет повторяться до самого верха, где корневой узел просто имеет несколько копий в фиксированных местах диска.

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

Плюсов такого подхода как минимум 2:

  1. Моментальные снапшоты (Нужно просто где-то сохранить указатель на текущий корень датасета.
  2. Атомарность. Транзакция либо завершится целиком, либо целиком будет потеряна. Что соответствует фокусу на целостности данных.

Т.е. отвечая на вопрос из прошлого треда: нет, приблизить производительность ZFS к LVM (если там нет CoW) - невозможно.

Исправление anonymous-angler, :

Продолжу свой монолог. Файловая система или том с CoW (Например ZFS) всегда будет проигрывать в производительности решению без такового (Например md + ext4). Для этого нужно просто понять как оно работает.

Без CoW

  1. Пишем блок данных поверх.
  2. Пишем блок метаданных поверх.

Порядок может меняться, может быть журнал для метаданных и т.д., это не имеет значения, потому что всё равно быстро.

С CoW

  1. Пишем блок данных. Поверх - нельзя, CoW же. Пишем в другое место. Теперь обновлённый кусок файла есть, но указатели в родительском узле дерева на него не указывают.
  2. Перезаписывать родительский узел дерева тоже нельзя. Пишем в другое место. Но теперь указатели в родительском узле родительского узла не указывают на нужный блок.
  3. Эта рекурсия будет повторяться до самого верха, где корневой узел просто имеет несколько копий в фиксированных местах диска.

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

Плюсов такого подхода как минимум 2:

  1. Моментальные снапшоты (Нужно просто где-то сохранить указатель на текущий корень датасета.
  2. Атомарность. Транзакция либо завершится целиком, либо целиком будет потеряна. Что соответствует фокусу на целостности данных.

Т.е. отвечая на вопрос из прошлого треда: нет, приблизить производительность ZFS к LVM (если там нет CoW) - невозможно.

Исходная версия anonymous-angler, :

Продолжу свой монолог. Файловая система или том с CoW (Например ZFS) всегда будет проигрывать в производительности решению без такового (Например md + ext4). Для этого нужно просто понять как оно работает.

Без CoW

  1. Пишем блок данных поверх.
  2. Пишем блок метаданных поверх.

Порядок может меняться, может быть журнал для метаданных и т.д., это не имеет значения, потому что всё равно быстро.

С CoW

  1. Пишем блок данных. Поверх - нельзя, CoW же. Пишем в другое место. Теперь обновлённый кусок файла есть, но указатели в родительском узле дерева на него не указывают.
  2. Перезаписывать родительский узел дерева тоже нельзя. Пишем в другое место. Но теперь указатели в родительском узле родительского узла не указывают на нужный блок.
  3. Эта рекурсия будет повторяться до самого верха, где корневой узел просто имеет несколько копий в фиксированных местах диска.

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

Плюсов такого подхода 2:

  1. Моментальные снапшоты (Нужно просто где-то сохранить указатель на текущий корень датасета.
  2. Атомарность. Транзакция либо завершится целиком, либо целиком будет потеряна. Что соответствует фокусу на целостности данных.

Т.е. отвечая на вопрос из прошлого треда: нет, приблизить производительность ZFS к LVM (если там нет CoW) - невозможно.