Різниця продуктивності між ramfs та tmpfs


23

Мені потрібно налаштувати в систему зберігання пам’яті близько 10 ГБ даних, що складається з багатьох одиночних файлів (зображень) 100 кб. Буде багато читань і досить періодичних записів (додавання нових файлів, видалення деяких старих).
Тепер я знаю, що tmpfs поводиться як звичайна файлова система, для якої ви можете, наприклад, перевірити вільний / використаний простір з df , що є приємною функцією. Однак мене цікавить, чи могли б ramfs запропонувати деякі переваги щодо швидкості операцій вводу- виводу. Я знаю, що я не можу контролювати об'єм споживаної пам'яті при використанні ramfs і що моя система може зависати, якщо вона повністю споживає безкоштовну оперативну пам'ять, але це не буде проблемою в цьому сценарії.

Підводячи підсумок, мені цікаво:
- ефективність роботи, яка швидша: ramfs або tmpfs (і, можливо, чому)?
- Коли tmpfs використовує своп-простір? Чи переміщує вже збережені дані для обміну (до вільної оперативної пам’яті для інших програм, які зараз працюють) або лише нових даних, якщо на той момент не залишилося вільної оперативної пам’яті?


Гм, скільки оперативної пам’яті на сервері?
ewwhite

1
Сервер має в цілому 16 ГБ оперативної пам’яті. Також варто відзначити, що у мене немає SSD-пам’яті, а одного жорсткого диска 7200 об / хв. Ось чому я розглядаю можливість використання певного типу оперативної пам’яті.
Іван Ковачевич

Відповіді:


21

Моя рекомендація:

Виміряйте та спостерігайте за реальною діяльністю у звичайних умовах.

Ці файли навряд чи ВСІ потрібні та обслуговуватимуться з кешу завжди. Але є приємний інструмент під назвою vmtouch, який може сказати вам, що є в кеші в даний момент. Ви також можете використовувати його для блокування певних каталогів або файлів у кеш. Тож подивіться, як виглядають речі після регулярного використання. Використання tmpfs та ramfs не потрібно для цієї ситуації.

Дивіться: http://hoytech.com/vmtouch/

Думаю, ви здивуєтеся, побачивши, що найактивніші файли, ймовірно, вже залишатимуться в кеші.


Що стосується tmpfs порівняно з ramfs, різниці в продуктивності не спостерігається. Є операційні відмінності. Випадок використання в реальному житті - це Oracle, де використовували ramfs, щоб дозволити Oracle управляти даними в оперативній пам’яті без ризику їх заміни. Дані tmpfs можуть бути замінені під тиском пам'яті. Існують також відмінності в зміні розміру та зміни параметрів під час руху.


1
Дивовижна маленька утиліта! +1
Janne Pikkarainen

1
@ewwhite Відмінна відповідь. В одному з наших випадків кілька років тому ми дійсно з'ясували, що використовувані файли вже є в кеші. Підказка: Файлові системи сьогодні набагато розумніші, ніж я думаю.
giannisapi

13

Не передумуйте це. Покладіть достатню кількість оперативної пам’яті у вашу систему і дозвольте дисковому кешу ядра подбати про вас. Таким чином ви отримуєте перевагу читання, що надходять безпосередньо з пам'яті, зберігаючи дані на диску.


1
Зараз у моїй системі є 16 ГБ оперативної пам’яті. Це звичайна установка Debian під управлінням Nginx для обслуговування цих зображень. У мене є мережеве підключення на 1 Гбіт, яке постійно буде навантажуватись під 100%, обслуговуючи ці зображення без особливого порядку. Ви думаєте, що ядро ​​все одно завантажить усі ці 10 гігів зображень у кеш у цьому сценарії?
Іван Ковачевич

3
Так, якщо в системі є достатня кількість оперативної пам’яті, а інші програми на сервері не конкурують за ресурси RAM, ці файли залишаться в кеші.
ЄЕАА

2
Я працюю в адміністрації Unix протягом ~ 15 років, і ніколи не стикався з ситуацією, коли tmpfs / ramfs забезпечив би будь-яку вигоду над власним кешем ядра fs. Це не означає, що там не існує ситуацій, де їх було б гарантовано, але вони досить рідкісні. Зазвичай, якщо вам потрібен кеш оперативної пам’яті для речей, використовується кеш-шар для складання цілей (Redis / Memcache / тощо).
EEAA

4
Кешування диска, безумовно, буде працювати в тому випадку, коли зображення потрібно прочитати, але tmpfs або ramfs все ще можуть бути корисними, якщо ви хочете прискорити багато випадкових / малих записів, але прив’язані до диска, який повільний із випадковим I / О. Майте на увазі, що якщо машина вийде з ладу або постраждає електроенергія, вміст tmpfs зникне з тих пір, де (лише) в пам'яті.
Martijn

1
@Martijn має рацію. tmpfs та ramfs дійсно корисні. Наприклад, я роблю інтенсивне перезапис (фільтр-гілка) сховища git. Робити це в пам’яті - це заробітки швидше, ніж це робити на моєму SSD. Кешування допомагає читати не пише, оскільки (як правило) Linux повинен відповідати деяким гарантіям щодо постійності операцій на диску.
Пол Дрейпер

7

1) Тест на ефективність.

Використовуючи цю сторінку в якості посилання, я здійснив порівняння вводу-виводу між tmpfs та ramfs, і результати полягають у тому, що вона майже однакова за показниками продуктивності:

# !mount
mount | grep -E "tmp|ram"
tmpfs on /dev/shm type tmpfs (rw)
ramfs on /mnt/ram type ramfs (rw,size=1G)

# dd bs=1M count=1024 if=/dev/zero of=/dev/shm/test conv=fdatasync
1024+0 records in
1024+0 records out
1073741824 bytes (1.1 GB) copied, 0.634054 s, 1.7 GB/s

# dd bs=1M count=1024 if=/dev/zero of=/mnt/ram/test conv=fdatasync
1024+0 records in
1024+0 records out
1073741824 bytes (1.1 GB) copied, 0.559557 s, 1.9 GB/s

# dd bs=1M count=4096 if=/dev/zero of=/dev/shm/test conv=fdatasync
4096+0 records in
4096+0 records out
4294967296 bytes (4.3 GB) copied, 2.5104 s, 1.7 GB/s

# dd bs=1M count=4096 if=/dev/zero of=/mnt/ram/test conv=fdatasync
4096+0 records in
4096+0 records out
4294967296 bytes (4.3 GB) copied, 2.36923 s, 1.8 GB/s

2) Відповідно до цієї сторінки , tmpfs використовує swap, а ramfs не використовує swap.


2
Ваша відповідь на вірному шляху. Однак я не погоджуюся з вашим висновком щодо продуктивності, ваші тести показують, що Є НАД різниці 0,2 ГБ / с і 0,1 ГБ / с на користь рамних плат. Я вважаю, що це слід перевірити ще більше, щоб отримати дійсну статистичну вибірку. Щодо 2) Так, це відомо, проте я хотів би, щоб я міг краще зрозуміти, коли саме використовується своп.
Іван Ковачевич

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

1
Як щодо випадку, коли у вас є купа невеликих файлів. Наприклад, запис мільйонів файлів 100-200 кб. Ви також отримуєте різницю 0,2 Гб / с неодноразово для одного і того ж розміру файлу? Що, безумовно, вказувало б на різницю продуктивності. Я, мабуть, сам це перевіряю, коли це в моєму графіку. Але тому я запитав тут, щоб я міг перекреслити його зі списку справ, якщо хтось уже це зробив.
Іван Ковачевич

так, єдиний спосіб точно знати - це робити тести.
Майкл Мартінес

1

Якщо у вас встановлена ​​достатня кількість оперативної пам’яті, щоб розмістити різні буфери ядра, стек додатків і купи, звичайний кеш файлової системи та всі файли, які ви збираєтеся вкласти в нього, ramfsніколи не повинен бути повільнішим, tmpfsоскільки не буде ризику фізичний введення / виведення за проектом. Фізичні введення-виведення, безсумнівно, є основною причиною погіршення продуктивності в цій галузі.

Однак якщо у вас не встановлена ​​кількість оперативної пам’яті, використання ramfsі, можливо, буде повільніше, ніж tmpfsостання використовує евристичну віртуальну пам’ять, щоб вирішити, що краще бути на диску (тобто в області swap) і що має бути в оперативній пам’яті. в той час як tmpfsдані вашої файлової системи застрягли в оперативній пам’яті, що може втратити ресурси.

Щоб відповісти на друге запитання, так, tmpfsперенесуть старі дані спочатку в область свопу, а не останню "гарячу".

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.