TxFS даёт возможность выполнить атомарное применение сразу группы операций над файлами. Например, в рамках изолированной транзакции можно выполнить несколько операций записи в разные файлы, а затем атомарно применить все накопленные изменения, используя синтаксис begin/commit, похожий на транзакции в СУБД. Или можно откатить все внесённые в разные файлы изменения в случае, если в процессе обработки данных были выявлены какие-то проблемы.
Код:
ret = fs_tx_begin();
fd1 = open("file1.txt", O_RDWR | O_APPEND, 0644);
fd2 = open("file2.txt", O_RDWR | O_APPEND, 0644);
write(fd1, "foo\n", 4);
write(fd2, "bar\n", 4);
ret = fs_tx_commit(); // или fs_tx_abort() для отмены транзакции
ФС TxFS построена поверх штатной инфраструктуры журналирования jbd2 (Journaling block device) и файловой системы Ext4. Производительность системы сопоставима с производительностью обычной файловой системы Ext4. Реализация достаточно компактная и включает в себя всего 5200 строк кода, из которых 1300 составляет внутренний код (разрешение конфликтов, реализация системных вызовов), 1600 - изменения в VFS, 900 - изменения кода журналирования JBD2, 1200 - изменения в ext4 и 200 - изменения кода управления памятью. Помимо кода для расширения ext4 и jbd2 все остальные компоненты универсальны и в будущем могут быть использованы для адаптации TxFS для других ФС, таких как ZFS.
API для управления транзакциями реализован через надстройку над тремя новыми системными вызовами, обеспечивающими открытие, фиксацию и отмену транзакций. В настоящее время подготовлены порты SQLite и Git, использующие TxFS для обеспечения гарантированной устойчивости к сбоям. Благодаря упрощению логики обеспечения атомарности в приложениях и сокращению числа сбросов буферов через fsync(), порт SQLite на базе TxFS показал в тесте TPC-C увеличение производительности в 1.6 раза. Пропускная способность приложения Android Mail при использовании порта SQLite возросла в 2.3 раза. Порт Git продемонстрировал существенное увеличение надёжности и способность предотвращать повреждения данных и нарушения целостности при сбоях во время выполнения операций с репозиторием.
Источник: https://www.opennet.ru/opennews/art.shtml?num=48981
(opennet.ru, основная лента)