Моя программа создает много небольших недолговечных файлов. Как правило, они удаляются в течение секунды после создания. Файлы находятся в файловой системе ext4, поддерживаемой настоящим жестким диском. Я знаю, что Linux периодически сбрасывает ( pdflush
) грязные страницы на диск. Поскольку мои файлы недолговечны, скорее всего они не кэшируются pdflush
. У меня вопрос, вызывает ли моя программа много записей на диск? Моя забота - это жизнь моего жесткого диска.
Поскольку файлы небольшие, давайте предположим, что сумма их размеров меньше, чем dirty_bytes
и dirty_background_bytes
.
В Ext4 включен журнал по умолчанию, т.е. журнал метаданных. Я также хочу знать, записаны ли метаданные или данные на диск.
sync
опцией. Вы можете рассмотреть установленную по умолчанию Fedora, Debian или Ubuntu. Вы выбираете один. (2). Каждый файл составляет около 60 КБ. (3). Около 1000 файлов создаются и удаляются в секунду, но в любое время существует не более 10 файлов. Другими словами, пропускная способность ввода / вывода велика, но занимаемое пространство мало.Ответы:
Простой эксперимент с использованием ext4:
Создать изображение размером 100 МБ ...
Сделать это петлей устройства ...
Сделай файловую систему и смонтируй ...
Сделайте какой-нибудь запуск с недолговечными файлами. (Измените это на любой метод, который вы предпочитаете.)
Размонтировать, синхронизировать, разблокировать.
Проверьте содержимое изображения.
В моем случае он перечислил все имена файлов, но не содержимое файла. Так что только содержание не было написано.
источник
nbd
и регистрируйте трафик (или аналогичный метод отслеживания всех записей).Если вы не говорите о твердотельном накопителе, большое количество операций записи на диск не будет доминирующим фактором в долговечности накопителя.
Если вы действительно хотите избежать записи на диск, посмотрите tmpfs ,
источник
Как правило, нет, они не будут написаны. Это связано с тем, что кэш сбрасывает грязные страницы при выполнении одного из двух условий:
Данные устаревают после
/proc/sys/vm/dirty_writeback_centisecs
, по умолчанию 5 секунд.В кеше слишком мало памяти для хранения данных, больше, чем в
dirty_ratio
грязных страницах (по умолчанию 20%).Таким образом, в системе с большим количеством свободной памяти и небольшим трафиком записи, кроме небольших файлов, которые удаляются менее чем за 5 секунд, данные не будут сброшены.
источник
Возможность записи на диск недолговечных файлов зависит не только от поведения файлового кэша ядра по умолчанию, но также от деталей реализации драйвера файловой системы и параметров монтирования указанной файловой системы. Можно настроить систему таким образом, чтобы все всегда было немедленно записано на диск (по сути, DOS-подобное поведение).
Одна файловая система, в которой заметно интересующее вас поведение (так называемое «отложенное размещение») - это XFS. С его помощью вы можете быть более или менее уверены (если в другом месте нет забавных вариантов конфигурации), что блоки, принадлежащие только что удаленным файлам, будут повторно использоваться в памяти без промежуточного доступа к диску. XFS может по-прежнему хотеть обновить свой журнал метаданных (который будет записываться на диск довольно часто; тем не менее, учитывая, что журнал XFS является только метаданными, он достаточно мал, чтобы быть установленным на каком-то другом быстром устройстве, например, на найденном ОЗУ с резервным питанием от батареи). на многих RAID контроллерах).
Из-за этого поведения весьма часто можно найти полностью обнуленные, но в остальном законно выглядящие файлы (размер и другие метаданные без изменений) в файловой системе XFS после внезапного отключения питания. Такова стоимость поддержки быстрых «временных» файловых операций.
Немного теории
В общем, системный вызов, обращающийся к файловой системе, довольно быстро завершается в методе, определяемом драйвером файловой системы (присоединяется к «struct inode_operations» и «struct file_operations», когда VFS-драйвер зарегистрирован). То, что происходит после этого, остается исключительно на усмотрение реализации файловой системы. Обычно используется нечто похожее на следующий подход (этот простой пример взят из драйвера Linux FAT):
Если файловая система смонтирована в режиме синхронизации, все изменения немедленно отправляются на диск (в данном случае через fat_sync_inode ()). В противном случае блок помечается как «грязный» и остается в кэше памяти, пока не будет сброшен при некоторой разумной возможности.
Таким образом, невозможно предсказать поведение системы в отношении временных файлов без учета параметров монтирования файловой системы и проверки исходного кода ее реализации (это, конечно, в основном относится ко всем видам экзотических файловых систем, в основном находящихся во встроенном пространстве). ,
источник
sync
опцией. Я бы никогда этого не сделал.