Чи стикаються на диск короткочасні файли?


9

Моя програма створює багато невеликих короткочасних файлів. Зазвичай вони видаляються протягом секунди після створення. Файли знаходяться у файловій системі ext4, підкріпленій реальним жорстким диском. Я знаю, що Linux періодично видаляє ( pdflush) брудні сторінки на диск. Оскільки мої файли недовговічні, швидше за все, вони не кешовані pdflush. Моє запитання полягає в тому, чи викликає моя програма багато записів на диску? Мене хвилює життя мого жорсткого диска.

Оскільки файлів мало, припустимо, сума їх розміру менша за dirty_bytesі dirty_background_bytes.

У Ext4 увімкнено журнал за замовчуванням, тобто журнал метаданих. Я також хочу знати, чи записуються метадані або дані на диск.


> Моя програма створює багато невеликих короткотривалих файлів, скільки "багато"? Ви видаляєте ці файли чи переписуєте файли? > Я також хочу знати, чи записуються метадані або дані на диск. Я вважаю, що режим метаданих за замовчуванням впорядкований, тобто метадані здійснюються до запису даних на диск. Звичайно, ви можете додати параметри кріплення, щоб змінити це. > Моє запитання, чи викликає моя програма багато записів на диску? на це важко реагувати, враховуючи надану вами інформацію. Чи обдумали ви використовувати такі інструменти, як iotop та sysstat для моніторингу вводу диска?
AngryWombat

ReiserFS краще для крихітних файлів, якщо ви дійсно хочете, щоб вони потрапили на диск коли-небудь tmpfs, це добре, якщо вам все одно
xenoterracide

Деякі роз’яснення: (1). файлова система ext4 не змонтована з syncопцією. Ви можете вважати встановленими за замовчуванням fedora, debian або ubuntu. Ви вибираєте один. (2). Кожен файл становить близько 60 КБ. (3). Близько 1000 файлів створюються та видаляються за секунду, але в будь-який момент існує не більше 10 файлів. Іншими словами, пропускна здатність вводу / виводу велика, але займаний простір невеликий.
Ву Йончжен

Відповіді:


5

Простий експеримент з використанням ext4:

Створіть зображення 100 Мб ...

# dd if=/dev/zero of=image bs=1M count=100
100+0 records in
100+0 records out
104857600 bytes (105 MB) copied, 0.0533049 s, 2.0 GB/s

Зробіть це петлевим пристроєм ...

# losetup -f --show image
/dev/loop0

Зробіть файлову систему та змонтуйте ...

# mkfs.ext4 /dev/loop0
# mount /dev/loop0 /mnt/tmp

Зробіть якийсь запуск з недовговічними файлами. (Змініть це на будь-який спосіб, який ви бажаєте.)

for ((x=0; x<1000; x++))
do
    (echo short-lived-content-$x > /mnt/tmp/short-lived-file-$x
     sleep 1
     rm /mnt/tmp/short-lived-file-$x ) &
done

Umount, sync, unloop.

# umount /mnt/tmp
# sync
# losetup -d /dev/loop0

Перевірте вміст зображення.

# strings image | grep short-lived-file | tail -n 3
short-lived-file-266
short-lived-file-895
short-lived-file-909
# strings image | grep short-lived-content | tail -n 3

У моєму випадку він перераховував усі назви файлів, але жодне із вмісту файлу. Тож лише вміст не писався.


Хороша спроба. Тепер я переконаний. Я також спробував ext2 і отримав такий же результат, як і ви. Я змінив ваше паралельне завантаження вводу-виводу на послідовне і отримав один короткочасний файл-999 та 8 короткотривалих вмісту- *. Хтось має пояснення?
Ву Йончжен

@msw: відредаговано у випадку, якщо це було незрозуміло. В іншому випадку, будь ласка, детальніше.
frostschutz

Це просто нерозумно. Файли існують одночасно, перезаписувати нічого не можна, а файлові системи не перезаписують вміст видалених файлів, оскільки це може зашкодити продуктивності. Але в будь-якому випадку використовуйте nbdі записуйте трафік (або подібний метод відстеження всіх записів).
frostschutz

7

Якщо ви не говорите про твердотільний накопичувач, велика кількість записів дисків не стане домінуючим фактором довговічності диска.

Якщо ви дійсно хочете взагалі уникати запису на диск, подивіться на tmpfs ,


2
tmpfs справді добре підходить для цього випадку, але я все ж хочу знати, як загальне питання операційної системи, чи записуються на диск дані (без необхідності)?
Ву Йончжен

Ваше запитання повинно бути набагато конкретнішим, ніж ви, ймовірно, можете сформулювати, щоб отримати остаточну відповідь. Буферний кеш опосередковує складний компроміс між продуктивністю та стійкістю, на який неможливо відповісти абстрактно. Використовуючи перелічені інструменти @AngryWombat, ви можете виміряти фактичну запис у вашому конкретному додатку, але існує так багато факторів, які можуть змусити її змінюватись від запуску до запуску.
msw

Добре, якщо після видалення файлу з'явиться pdflush . Писати це було б зайвим.
Ву Йончжен

1

Як правило, ні, вони не будуть написані. Це відбувається тому, що кеш обмиває брудні сторінки, коли виконується одна з двох умов:

  1. Дані старіють після /proc/sys/vm/dirty_writeback_centisecs, що за замовчуванням становить 5 секунд.

  2. Забагато пам'яті для кешу, щоб зберігати дані, більше ніж dirty_ratioбрудні сторінки в кеші (за замовчуванням до 20%).

Тож у системі з великою кількістю вільної пам’яті та мало трафіку запису, окрім ваших невеликих файлів, які видаляються менше ніж за 5 секунд, дані не будуть видалені.


0

Будь короткотривалі файли записуються на диск чи ні, залежить не тільки від поведінки кешу файлу ядра за замовчуванням, але і від деталей реалізації драйвера файлової системи та параметрів монтажу зазначеної файлової системи. Можна налаштувати систему таким чином, що все завжди буде негайно записано на диск (по суті, DOS-подібне поведінка).

Однією з файлових систем, що характеризується поведінкою, яка вас зацікавила (так зване "відкладене розподілення"), є XFS. З його допомогою ви можете бути більш-менш впевнені (якщо не бути смішними параметрами конфігурації в іншому місці), що блоки, що належать тільки що видаленим файлам, будуть повторно використані в пам'яті без проміжного доступу до диска. XFS все ще може оновити свій журнал метаданих (який буде записуватися на диск досить часто; проте, враховуючи, що журнал XFS є лише метаданими, він досить малий, щоб його встановити на якомусь іншому, швидкому пристрої, наприклад, знайденій операційній пам'яті, що підтримується акумулятором. на багатьох контролерах RAID).

Через таку поведінку нечасто знайти абсолютно нульові, але в іншому випадку легально шукати файли (розмір та інші метадані недоторкані) у файловій системі XFS після раптового переривання живлення. Такі кошти на підтримку швидких "напівчасових" файлових операцій.

Деяка теорія

Взагалі системний виклик, що здійснює доступ до файлової системи, закінчується досить швидко, визначеним драйвером файлової системи (додається до "struct inode_operations" та "struct file_operations", коли драйвер VFS зареєстрований). Що після цього залишається виключно на розсуд щодо реалізації файлової системи. Зазвичай використовується щось, що нагадує такий підхід (цей простий приклад - з драйвера FAT Linux):

if (IS_DIRSYNC(dir))
    (void)fat_sync_inode(dir);
else
    mark_inode_dirty(dir);

Якщо файлова система встановлена ​​в режимі «синхронізації», всі зміни негайно переходять на диск (через fat_sync_inode () у цьому випадку). В іншому випадку блок позначається як "брудний" і залишається в кеш-пам'яті до тих пір, поки не змиється за певної розумної можливості.

Таким чином, неможливо передбачити поведінку системи щодо перехідних файлів, не враховуючи параметри кріплення файлової системи та не перевіряючи вихідний код її реалізації (це, звичайно, стосується в основному всіх видів екзотичних файлових систем, що знаходяться в основному у вбудованому просторі) .


Дякую за вашу відповідь. Здається, ext4 також має затримку розподілу. Чи означає це, що моя відповідь "НІ"? (в інших місцях не вказано смішних параметрів конфігурації). Це також означає, що моя відповідь ТАК, якщо використовується ext2?
Ву Йончжен

Я думаю, що навіть при ext2 на сучасному ядрі відповідь буде НІ. Про цю конкретну проблему багато обговорювалося, і короткий погляд на джерело ядра показує, що драйвер ext2 в основному покладається на операції з ядром "за замовчуванням" для виконання своїх завдань (таким чином, все затримується кеш-блоком). Я думаю, я повинен оновити свою відповідь, щоб включити додаткову інформацію.
oakad

Мій ext4, очевидно, не змонтований sync. Я б ніколи цього не робив.
Ву Йончжен

Під час маркування inode брудною, я вважаю, що файлова система відповідає за маркування відповідної сторінки брудною. Пізніше, коли inode буде видалений, чи файлова система очищає брудну сторінку? Якщо ні, дані будуть видалятися на диск без необхідності.
Ву Йончжен

2
Невикористані блоки даних "вивільняються", таким чином вони перестають забруднюватися. Якщо ви написали якийсь файл у файл, а потім обрізали його до вимивання, мотлох повз EOF просто зникає (начебто). З метаданими це може бути не так просто, оскільки можуть бути різні компроміси щодо цілісності структур даних файлової системи. До речі, з вашого питання не очевидно, що ви завжди очікуєте, що будете повністю контролювати свою платформу - більшість додатків зазвичай працюють на машинах невідомої конфігурації, подалі від розробника.
oakad
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.