> просто добавил добавил CoW от Охада Родеха.Ну тогда Форд просто добавил к производству автомобилей конвейер.
> the day, Chris worked on Reiserfs, where he learned a lot
> about what to do and what not to do in a file system.
> Reiserfs had some cool features - small file packing,
> btrees for fast lookup, flexible layout - but the implementation tended
> to be haphazard and ad hoc
И если копнуть то и Рейзер, возможно, половину из этого придумал не сам - основная часть этих фич и структур на момент дизайна btrfs была общеизвестной уже. Так что Мэйсон лишь удачно скомбинировал имеющиеся технологии.
B-деревья измененные под CoW - да это первое их применение и было. Теоретические рассуждизмы не в счет. И таки как оказалось - с этим на самом деле есть кое-какие проблемы. Они не фатальные, но местами это все же приходится учитывать. Особенно на скоростных накопителях.
Если кому интересно - может найти на гитхабе нехилый овервью как там и чего, драфт extent tree v2, по итогам проблематики с первой версией дизайна.
Если копнуть чуть дальше можно набрести на нечто от Кент Оверстрит, по мотивам все той же идеи, но с куда более серьезным учетом аспектов типа оверхеда. Это не было проблемой в 2007, но сейчас есть такие штуки как Оптан. А вон там кернел делает 15M IOPS на 1 процессорное ядро. И вот тут уже оверхед операций - не пустой звук.
> The leaves of the btree contain items, which are a combination of
> keys and data. Similarly to reiserfs, the items and data are
> packed in extremely space-efficient way:
Сейчас все примерно это делают, btrfs по сравнению с ними особенный в основном CoW и адаптацией к нему B-деревьев. И вообще очень таким фундаментальным CoW довольно симметрично применяемым к данным и метаданным.
Это выглядит как улучшение и доработка паттерна, свежие файлухи типа hammer и bcachefs обезьянят этот дизайн. С своими видоизменениями, нацеленными на то чтобы оставить свойства которые им нравятся, но уменьшить оверхед, сгладить острые углы и обойти проблемы всплывшие в более ранних итерациях. Нормальный подход - итеративно дизайнить.
Да даже майкрософт в ReFS что-то подобное обезьянить пытался. Но видимо пороху не хватило, получилось обкоцано и странно.
> headers and data grow towards each other, as shown in the diagram to the right.
Я в курсе структуры btrfs, спасибо кэп.