Высокопроизводительная распределенная файловая система FastCFS 5.4 выпущена, в основном это улучшение производительности и исправление ошибок.
Улучшение производительности
libdiskallocator оптимизирован для faststore:
При возврате trunk для перемещения данных, объединяются соседние slice и уменьшается количество операций чтения данных;
Когда trunk пространство распределено и данные записаны, объединяются соседние slice для уменьшения их количества.
Мелкие улучшения
[libfastcommon] реализация функции shorten_path для /./ и /../
[libserverframe] sf_binlog_writer_rotate_file может пропускать пустые файлы
[fstore] storage.conf и dbstore.conf изменены для новой версии libdiskallocator
Исправление ошибок
[libserverframe] вызов flush_writer_files перед rotate file
[libdiskallocator] da_init_start разделен на две функции init и start
[libfdirstorage] корректное установление диапазона inode последнего сегмента
[libfdirstorage] корректное сохранение для обновления
[fdir] корректный вызов fdir_namespace_inc_alloc_bytes
Приглашаем всех тестировать и использовать версию V5.4, рекомендуем пользователям старых версий обновиться до последней. Любые вопросы и предложения приветствуются в нашем сообществе.
Выпуск FastCFS V5.3.2, включающий основательное исправление ошибок и небольшие улучшения.
История изменений:
[fstore] протокол ACTIVATE_SERVER не отвечает для RDMA
[fdir & fstore] исправлено: ОБЯЗАТЕЛЬНО разделите PD для сети RDMA
[fdir & fstore] проверка совпадения прослушиваемого порта с конфигурацией кластера
[fstore] исправлена типизация hash_code с uint32_t на uint64_t в функции fs_client_bs_operate
[fstore] возврат EINVAL при отсутствии принадлежности группы данных
[FastCFS] fcfs_fused.c: статистика пула соединений для отладки
[libfastcommon] оптимизация производительности пула соединений
[libserverframe] поддержка дополнительного аргумента в обратном вызове инициализации задач
[libserverframe] поле sf_context структуры добавлено для is_client для выделения PD в обратном вызове RDMA
[libfastrdma] глобальная инициализация использует блокировку безCAS для единичного экземпляра
Выпуск FastCFS V5.3, в котором были выполнены основные исправления ошибок и небольшие улучшения.
Журнал изменений:
[fdir & fstore] группы служб могут переопределять размер буфера (buffer_size)
[fdir & fstore] задержка версии вывода информации о состоянии службы (service status output version delay)
[все] лог квадратных закавыченных адресов IPv6
[fstore] исправление ошибки: установка флагов на FS_COMMON_PROTO_FLAGS_LAST_PKT для последнего пакета
Выпуск FastCFS V5.2, в котором были выполнены основные исправления ошибок.
Журнал изменений:
[fdir & fstore] вывод информации о состоянии пространства хранения для движка хранения
[fstore] удаление ограничения максимального количества групп данных на сервер
[fstore] исправление ошибки: правильное записывание бинлога реплики в файл при включении срезового движка хранения
[fstore] количество групп данных в cluster.conf нельзя изменять после первого запуска
[libdiskallocator] da_binlog_reader_load: чтение файла бинлога с фиксированного размера буфера
[libfdirstorage] массив inode уменьшен по обновленному счетчику
[libfsstorage] исправление ошибки: корректное уменьшение блока бинлога
После месяца разработки и тестирования выпущена версия FastCFS V5.1 с основными улучшениями: поддержка IPv6 и исправление ошибок.
Соответствующий git лог:
[fdir & fstore] автоматическая поддержка IPv6 через cluster.conf
[libdiskallocator] проверка повторяющихся путей хранения
[libdiskallocator] запуск задачи crontab trunk_index_dump в новом потоке
[libdiskallocator] оптимизация trunk_index_dump
[fstore] исправлен баг: binlog_check.[hc] правильно устанавливает ID группы данных реплик
[fstore] добавлена опция use_hash_func в cluster.conf для рассредоточивания распределения групп данных
Приветствуем вас при тестировании и использовании V5.1. Мы рекомендуем пользователям старых версий обновиться до последней версии. Любые вопросы и предложения приветствуются в нашем чате.
После более чем четырёх месяцев исследований, разработки и тестирования FastCFS 5.0 наконец-то доступна всем. Версия FastCFS 5.0 использует native ibverbs для адаптации RDMA сетей, что позволяет полностью использовать низкую задержку и высокую пропускную способность этих сетей. В особенности хотелось бы поблагодарить @Frank за предоставление серверов с высокими характеристиками для наших исследований; большое спасибо @yunqi за его терпеливое объяснение в области программирования ibverbs; огромное спасибо @AI墨墨 за предоставление удобной службы chatGPT, которая помогла мне ответить на множество вопросов.
Мы арендовали облачные серверы типа ECS g8 от Alibaba Cloud, используя их eRDMA возможности. При случайном чтении 4 КБ в режиме fuse производительность увеличилась на 50 % по сравнению с использованием сокетов. Мы также провели тестирование при вызове API (чистый пользовательский режим) fcfs_benchmark, где производительность без использования busy polling была выше на 80 %, а при активном использовании busy polling — на 110 %. В будущем мы планируем провести тестирование производительности в условиях IB сети, и ожидаем ещё большего повышения производительности.Активация busy polling происходит автоматически на стороне сервера в зависимости от конфигурации. Когда количество запросов в секунду (QPS — Queries Per Second) одного соединения превышает пороговое значение (например, 10240 запросов в секунду) в течение N секунд (например, 3 секунд), активируется режим busy polling. Если же QPS падает ниже этого значения в течение N секунд, то режим busy polling деактивируется.Примечание: Примеры конфигураций и их описание можно найти в файлах конфигурации в подкаталоге conf/full/ исходного кода.
Исправленные ошибки в версии V5.0:
[fdir] исправлена ошибка: корректное установление loaded_flags в dentry_create;
[fdir] исправлена ошибка: использование блока lock для db skiplist;
[libfdirstorage] исправлена ошибка: корректное установление переменной normal_update;
[libfsstorage] более надёжное освобождение сегмента.
FastCFS 5.0 прошёл полное тестирование, и мы рады видеть друзей с RDMA сетями для проведения тестирования производительности. Для пользователей старых версий FastCFS рекомендуется как можно скорее обновиться до последней версии. Любые вопросы и предложения могут быть отправлены через issue, также есть возможность присоединиться к группе для обсуждения.
После трёхнедельной разработки и тестирования был выпущен высокопроизводительный распределённый файловый систем FastCFS версии 4.3. В версии V4.3 включены два небольших улучшения и семь исправлений ошибок.
Два небольших улучшения следующие:
Релиз FastCFS V4.2, основные улучшения:
Исправленные ошибки:
Рекомендуется всем пользователям обновиться до версии V4.2 как для серверной, так и для клиентской части.
После четырёх месяцев интенсивной разработки FastCFS V4.0 наконец доступна. Основные улучшения в версии V4.0:
В faststore был внедрён плагин хранения, что позволяет узлам хранения поддерживать сотни терабайтов данных при использовании ограниченной памяти (например, 32 ГБ). Для поддержки петабайт данных одним узлом рекомендуется использовать как минимум 128 ГБ оперативной памяти с точки зрения соотношения цены и качества.
В FastCFS V4.0 была проведена реорганизация уровня хранения faststore, который теперь использует библиотеку libdiskallocator напрямую. Преимущества такого подхода заключаются в том, чтобы поддерживать единственный набор кода, что делает систему проще в обслуживании и снижает риск возникновения ошибок.
Хранение данных в faststore осуществляется блоками (фрагментами размером 4 МБ), каждый из которых имеет связанный с ним индекс слайса; когда память становится недоступной, блоки удаляются последовательно. FastCFS использует метод binlog слайсов + индекс блока для постоянного хранения, где индексация блока происходит асинхронно. Краткое сравнение использования плагина хранения против его отсутствия: без плагина используется только binlog слайсов; с плагином — binlog слайсов + индекс слайсов, организованный по блокам.Другие небольшие улучшения в V4.0:
Мы провели полные тесты согласованности данных, устойчивости системы и производительности на арендованных серверах ECS Alibaba Cloud с локальными SSD. Приглашаем всех попробовать и использовать новую версию. Мы настоятельно рекомендуем пользователям старых версий как можно скорее обновиться до самой свежей версии.
Релиз FastCFS v3.7.1, поддерживающий привязку пользователей к нескольким группам и полностью соответствующий стандарту POSIX. Обновление также решает проблемы с правами доступа при запуске NFS в клиенте fuse FastCFS.
Основные улучшения и исправленные ошибки:
[fdir]
version
, auth_enabled
и storage_engine
в service_stat
.. и ..
в списке dentry
.get_path_block_size
выполняется только при активированном read_direct_io
.dentry_remove
: корректная проверка POSIX ACL.[fstore]
version
в service_stat
и поддержка опций -G
и всех остальных.[libserverframe]
debug
для сбора хеш-входов.[libfastcommon]
parse_bytes
.fc_fallocate
переходит к использованию ftruncate
под Linux.FastCFS предоставляет rpm и deb пакеты для архитектур Intel и ARM соответственно. Приглашаем вас установить и протестировать новую версию.
Релиз FastCFS 3.7.0, в котором проведён тест на совместимость с POSIX и исправлено семь ошибок, повысил стабильность продукта.
Тест на совместимость с POSIX был выполнен с использованием открытого проекта pjdfstest, который включает более 8 тысяч тестовых случаев. Только небольшое количество тестов не прошло, среди которых 30 случаев открытия FIFO-файлов завершились неудачей. Эти вызовы открытия не передаются на уровень fuse, а зависят от реализации Linux-ядра.
Список исправленных ошибок в версии v3.7.0:
FastCFS предлагает rpm и deb пакеты для установки. Приглашаем всех попробовать новый релиз. Пользователям старых версий рекомендуется как можно скорее обновиться до последней версии.
После трёхнедельной разработки выпущена версия FastCFS v3.6, которая демонстрирует значительное повышение производительности чтения и записи файлов, особенно при последовательной записи, что должно приятно удивить наших пользователей. Для желающих можно протестировать с помощью команд dd или scp.
Для тестирования мы арендовали три сервера Alibaba Cloud Local SSD ECS и один обычный ECS в качестве клиента для нагрузочного тестирования. Два параллельных потока fio могут полностью использовать 3 ГБ сетевой пропускной способности (приблизительно 351 МБ/с), тогда как версия v2.2 при четырёх параллельных потоках достигает лишь 126 МБ/с.
Основные направления оптимизации производительности в версии v3.6 следующие:
1. Оптимизация fstore сервера
При записи файла был добавлен параметр write_to_cache со значением true по умолчанию, который позволяет выполнять асинхронную запись на диск для полного использования возможностей диска. Также была внедрена динамическая выделение буферов данных через пул памяти, чтобы минимизировать копирование данных из сети непосредственно в потоки записи на диск и синхронизации данных.Добавлен параметр read_direct_io
для конфигурации режима direct IO, который по умолчанию отключен (то есть используется системное кэширование). Для SATA или SAS жестких дисков рекомендуется использовать системное кэширование; для SSD дисков режим direct IO может использоваться в зависимости от конкретной ситуации.2. Оптимизация Fuse клиента
Поддерживается опция writeback_cache
для Fuse, которая сообщает Linux ядру о необходимости активации объединённого режима записи. Включение этой опции значительно увеличивает производительность при последовательной записи малых блоков данных (например, одновременная запись 4 КБ).
В конфигурационном файле fuse.conf
добавлен параметр kernel_cache
, который указывает на необходимость использования файлового кэша Linux ядра. Активация этого параметра эквивалентна включению файлового кэша на стороне клиента Fuse, что может существенно повысить производительность чтения файлов в некоторых случаях. Однако для сценариев работы с несколькими узлами, где данные являются общими, лучше всего не активировать параметр kernel_cache
.
Используя эти две опции Fuse, внутренние параметры были правильно настроены, что позволило достичь заметного повышения производительности чтения и записи файлов.
Список исправленных ошибок в версии v3.6:
[fstore] исправлена ошибка: НЕОБХОДИМО вызвать set_binlog_indexes
для установки начального индекса
[fuseclient] исправлена ошибка: write_to_pid_file
перемещено перед fcfs_api_start_ex
исправлена ошибка: базовый путь поддерживает относительный путь
Производительность чтения и записи файлов в версии FastCFS v3.6 значительно возросла, и мы рады видеть ваши отзывы и результаты тестирования.
После более чем месячной интенсивной разработки был выпущен FastCFS v3.5. В версии v3.5 были выполнены улучшения для обеспечения согласованности данных в случае возникновения ошибок: механизм записи данных использует консенсус большинства для гарантии согласованности и надёжности данных при высоких нагрузках и других неблагоприятных условиях; реализован автоматический процесс восстановления данных при расхождении (ранее версии продолжали выдавать ошибки), что включает следующие два пункта:
Другие небольшие улучшения:
Список исправленных багов:
[fdir] dentry_list_by_path должен вызывать dentry_check_load_children
[fdir & fstore] выбор лидера/мастера различается по количеству успешных попыток и активным соединениям
[fdir & fstore] получение my_self_in_cluster_cfg через сервис, кластер и порты реплик
[fstore] необходимо игнорировать errno EOPNOTSUPP при уведомлении лидераFastCFS v3.5 является важным шагом в обеспечении согласованности и надежности данных в экстремальных условиях. Приглашаем всех скачать и использовать этот продукт. Пользователям предыдущих версий рекомендуется своевременно обновиться до версии 3.5.
После полуторамесячной интенсивной разработки и тестирования был выпущен V3.4. Основные улучшения в V3.4:
Исправленные ошибки:
После полуторамесячной интенсивной разработки и тестирования был выпущен FastCFS V3.3. Версия V3.3 является знаковым выпуском, где система была тщательно протестирована в отношении нормального перезапуска и сильного завершения процесса kill -9, обеспечивая стабильность системы и согласованность данных. Основные улучшения включают:
Список исправленных багов:
После полуторамесячной разработки и тестирования FastCFS V3.2.0 был представлен. В этом выпуске основные улучшения включают:
Полный набор POSIX API, таких как open/fopen, write/fwrite, read/fread, close/fclose, readv, writev, что позволяет приложениям использовать FastCFS для хранения данных;
Поддержка LD_PRELOAD для реализации пользовательских виртуальных точек монтирования;
Для поддержки POSIX API были скорректированы и доработаны fdir, такие как поддержка flags в list/remove deny и get/list/remove xattr; libfastcommon и fstore поддерживают readv и writev;
fstore поддерживает очистку избыточных binlog данных после расширения кластера (перед запуском fs_serverd передайте параметр --migrate-clean).
Другие улучшения и исправления ошибок следуют ниже:
[fastcfs-csi] оптимизация конфигурации
[fstore] поддержка предварительной загрузки с автоматическим предварительным чтением
[fuseclient] добавление параметра xattr_enabled в fuse.conf
[fdir] исправлено: правильное обновление поля "mode"
[fdir] исправлено: серверное парсинг inode для обновления DENTRY_TYPE ДОЛЖЕН быть установлен
Краткое описание FastCFS POSIX API доступно на блоге: https://my.oschina.net/u/3334339/blog/5481119
Версия V3.1 внесла улучшения в FastDIR, реализовав алгоритм LRU для вытеснения данных, что позволяет поддерживать огромное количество файлов при ограниченном объеме памяти.
Другие улучшения и исправление ошибок представлены ниже:
После пяти месяцев интенсивной разработки FastCFS v3.0 наконец выпущен. Основные улучшения в FastCFS 3.0 следующие: основной компонент FastDIR реализован через плагины для хранения данных, использует binlog + плагины хранения, что позволяет загружать данные inode по мере необходимости. Одиночное устройство с ограниченным объёмом оперативной памяти (например, 64 ГБ) может поддерживать миллионы файлов.
Механизм записи binlog обеспечивает простое сохранение данных, при этом при перезапуске программы данные inode восстанавливаются из binlog. Однако такой подход имеет два существенных недостатка:
Введение плагинов хранения данных в версии 3.0 позволило решить эти две проблемы, возникающие при использовании только binlog для сохранения данных.
Кроме того, FastCFS 3.0 исправил три ошибки:
[fdir] увеличивает/уменьшает количество ссылок родителя при операциях переименования;
[fdir] правильно устанавливает счетчик dentry->kv_array->count равным нулю;
[fstore] следует инициализировать счетчик barray->count значением ноль.
Релиз FastCFS V2.3.0, основные улучшения:
Кроме того, в конфигурационных файлах разделы теперь используют дефисы для разделения имён секций, например: [pool-generate]
После примерно месяца разработки выпущена версия FastCFS V2.2.0 с основными улучшениями:
Кроме того, были одновременно выпущены инструмент управления кластером (fcfs.sh), разработанный sungness, и драйвер k8s (fastcfs-csi), созданный vazmin. Приглашаем всех к тестированию и использованию этих инструментов (ссылки доступны на странице проекта FastCFS).Версия FastCFS V2.2.0 использует асинхронное чтение и предварительное чтение, что значительно повысило производительность чтения. Теперь производительность IOPS FastCFS полностью превышает Ceph: последовательная запись быстрее в 6,5 раза, последовательное чтение в 2,5 раза, а случайная запись примерно в два раза выше по сравнению с Ceph. Подробные данные тестирования можно найти на официальном сайте проекта FastCFS: https://gitee.com/fastdfs100/FastCFSВерсия V2.2.0 является важным этапом развития FastCFS, и мы очень ценим вашу поддержку!