Налаштування поведінки кешування диска Linux для максимальної пропускної здатності


12

Я зіткнувся з проблемою максимальної пропускної здатності тут, і мені потрібна порада щодо способу налаштування ручок. У нас працює 10Gbit файловий сервер для розподілу резервних копій. Це налаштування двох дискових S-ATA2 на контролері LSI MegaRAID. Сервер також отримав 24 гг пам'яті.

У нас є потреба відобразити нашу останню завантажену резервну копію з максимальною пропускною здатністю.

RAID0 для наших "гарячих" резервних копій дає нам близько 260 Мб / сек запису та 275 Мб / сек читання. Тестований tmpfs розміром 20 ГБ дає нам близько 1 Гб / сек. Цей вид пропускної спроможності - це те, що нам потрібно.

Тепер, як я можу налаштувати підсистему віртуальної пам'яті Linux, щоб кешувати останні завантажені файли якомога довше в пам'яті, не записуючи їх на диск (а ще краще: запис на диск І збереження їх у пам'яті)?

Я встановлюю наступні sysctls, але вони не дають нам пропускної здатності, яку ми очікуємо:

# VM pressure fixes
vm.swappiness = 20
vm.dirty_ratio = 70
vm.dirty_background_ratio = 30
vm.dirty_writeback_centisecs = 60000

Теоретично це повинно дати нам 16 ГБ для кешування вводу-виводу та зачекайте кілька хвилин, поки його записувати на диск. Тим не менше, коли я орієнтирую сервер, я не бачу впливу на запис, пропускна здатність не збільшується.

Потрібна допомога чи порада.


Чи не було б більше сенсу почати писати якомога швидше? В іншому випадку він досягає максимального розміру буфера і раптом припиняється. Якщо вона писала весь час, це дає вам більше часу.
Zan Lynx

У мене є 20 ГБ пам'яті лише для буферів, оскільки мої програми (базовий Linux + vsftpd) використовують менше 4 ГБ (всього 24 ГБ). Мої резервні копії - 20 Гб. Якщо я можу їх записати в буфер і потім виписати на диск послідовно після запуску резервної копії, це значно скоротить час простою мого резервного джерела (віртуальних серверів). PS: Сервер може зупинитися після цього, немає проблем. На відновлення у нього було 30 хвилин :)
Пітер Мейєр

Це здається, що будь-яка програма, яку ви використовуєте для передачі даних по мережі, синхронізує їх на диск. Ви хочете зробити це не так, щоб дані могли просто сидіти в кеш-пам'яті, хоча я сумніваюся, чому ви хочете мати можливість обробляти багато подібних даних швидше, ніж диски можуть тримати. Це десь вказує на недолік дизайну.
psusi

Це звучить як недолік: ваше рішення для резервного копіювання не повинно вимагати закриття сервера весь час.
psusi

1
@PeterMeyer: Навіть якщо у вас багато оперативної пам’яті, все одно помилка чекати початку запису. Єдиний сенс, який взагалі має сенс - це якщо ви збираєтеся редагувати чи видаляти файли (як тимчасовий файл), перш ніж він потрапить на диск. Резервне копіювання цього не робить. Ви хочете якнайшвидше розпочати фонове записування. Встановіть background_ratio на 1 або 2.
Zan Lynx

Відповіді:


6

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

Ви тільки коли-небудь отримаєте можливість для ледачих записів та використання кешу зворотного запису з асинхронними операціями запису. Операції синхронного запису вимагають приєднання до диска і не будуть ледачими. Ваша файлова система може спричиняти часті розгортання сторінок і синхронні записи (як правило, через журнали, особливо з ext3 в режимі data = journal). Крім того, навіть "фонова" сторінка змивання буде заважати не збереженим читанням та синхронним записам , тим самим уповільнюючи їх.

Загалом, вам слід скористатись деякими показниками, щоб побачити, що відбувається - чи бачите ви процес копіювання, поставлений у стан "D", очікуючи, що робота вводу / виводу буде виконана програмою pdflush? Чи бачите сильну синхронну активність запису на своїх дисках?

Якщо все інше не вдається, ви можете встановити явну файлову систему tmpfs, куди ви копіюєте резервні копії та просто синхронізуєте дані з дисками після факту - навіть автоматично використовуючи ініціювати

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

Редагувати:

vm.dirty_ratio = 70

Теоретично це повинно дати нам 16 ГБ для кешування вводу-виводу та зачекайте кілька хвилин, поки його записувати на диск.

Це не вплинуло б на ваш сценарій тестування, але існує неправильне уявлення про ваше розуміння. Параметр dirty_ratio - це не відсоток від загальної пам'яті вашої системи, а швидше вільної пам'яті вашої системи .

Існує стаття про Налаштування навантажувальних навантажень з більш детальною інформацією.


Так, я після виконання запису. Час, необхідний для роздуття резервного копіювання на рабів резервного копіювання, не викликає жодних проблем. У мене також є сценарій для повторної передачі, якщо основний сервер резервного копіювання не вдасться і резервні копії не потрапляють до резервних серверів. PS Я вже прочитав посилання та налаштувався відповідно. Вибачте за помилку щодо вільного проти буферного проти загального.
Пітер Мейєр

3

Або просто отримайте більше дисків ... Наявна у вас конфігурація масиву дисків не підтримує потрібну вам інформацію. Це випадок, коли рішення слід переосмислити для задоволення ваших реальних потреб. Я розумію, що це лише резервне копіювання, але є сенс уникати хитких виправлень.


Домовились. Немає можливості, щоб пара накопичувачів SATA ( SATA ? Серйозно?) Підтримувала 275 Мб / с, і ми навіть не говоримо про безглузді ВГД, які ви отримаєте від них.
адаптор

1
Я бачу, куди він прямує - оскільки це лише місце резервного копіювання даних, його не хвилює можливість періодичної втрати даних через відключення електроенергії. І він хоче мінімізувати час, необхідний для вікна резервного копіювання, забезпечуючи максимальну доступну пропускну здатність - таким чином, 20 ГБ даних можна записати за 30 секунд. Якщо резервні копії з якихось причин спричиняють час простою або службового впливу, 30 секунд, безсумнівно, простіше отримати понад 20 хвилин.
the wabbit

ТОТАЛЬНО право. Я синхронізую зображення віртуальних машин (дуже маленькі для обчислювальних вузлів), які вниз синхронізуються. Додаток працює як смола | ssh, але за допомогою ftp. І добре, моделювання потрібно запустити ... :)
Пітер Мейєр

1
Не має значення, яка вона порода SATA. Непідприємницькі диски 7200RPM просто не можуть гарантувати пропускну здатність або затримку.
адаптор

1
@adaptr, резервна копія буде послідовною записом.
psusi

1

Використання кеш-пам’яті може означати втрату даних, ніби щось піде не так, дані, що знаходяться в пам’яті та не збережені на дисках, будуть втрачені.

Однак, налаштування потрібно виконати на рівні файлової системи.

Наприклад, якщо ви використовували ext4, ви можете спробувати варіант монтажу:

бар'єр = 0

Це: "вимикає використання бар'єрів для запису в jbd-коді. Бар'єри для запису забезпечують належне впорядкування на диску на журналі, роблячи кеши для запису на непостійний диск безпечними для використання, з певною мірою покарання продуктивності. Якщо ваші диски захищені акумулятором одним способом або інше, відключення бар'єрів може безпечно підвищити продуктивність. Параметри кріплення "бар'єр" і "нобар'єр" можуть також використовуватися для включення або відключення бар'єрів для узгодження з іншими параметрами кріплення ext4 ".

Більше за адресою: http://www.mjmwired.net/kernel/Documentation/filesystems/ext4.txt


Я використовую сильно налаштований XFS. Більше про те, що стосується його настрою в коментарі вище :)
Пітер Мейєр

Файлова система була створена з mkfs.xfs -l lazy-count = 1, версія = 2, розмір = 256 м -i attr = 2 -d sunit = 512, swidth = 1024 і монтується з: rw, noatime, logbufs = 8, logbsize = 256k, osyncisdsync, delaylog, attr2, nobarrier, allocsize = 256k
Пітер Мейєр
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.