Назад | Перейти на главную страницу

Настройка поведения кэширования дисков Linux для максимальной пропускной способности

У меня здесь проблема с максимальной пропускной способностью, и мне нужен совет, как настроить мои ручки. У нас есть файловый сервер 10 Гбит для распространения резервных копий. Это установка S-ATA2 с двумя дисками на контроллере LSI MegaRAID. Сервер также получил 24гиг памяти.

Нам необходимо зеркально отобразить нашу последнюю загруженную резервную копию с максимальной пропускной способностью.

RAID0 для наших «горячих» резервных копий дает нам около 260 МБ / с для записи и 275 МБ / с для чтения. Протестированный tmpfs размером 20 ГБ дает около 1 ГБ / сек. Такая пропускная способность - то, что нам нужно.

Теперь, как я могу настроить подсистему виртуальной памяти Linux так, чтобы последние загруженные файлы как можно дольше кэшировались в памяти, не записывая их на диск (или даже лучше: записывать на диск И сохранять их в памяти)?

Я установил следующие sysctl, но они не дают ожидаемой пропускной способности:

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

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

Нужна помощь или совет.

Судя по установленным вами переменным, кажется, что вы в основном озабочены производительностью записи и не заботитесь о возможных потерях данных из-за отключения электроэнергии.

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

В общем, вы должны взять некоторые метрики, чтобы увидеть, что происходит - видите ли вы, что ваш процесс копирования находится в состоянии «D», ожидая, пока pdflush выполнит работу ввода-вывода? Вы наблюдаете интенсивную синхронную запись на свои диски?

Если все остальное не помогает, вы можете настроить явную файловую систему tmpfs, в которую вы копируете свои резервные копии и просто синхронизируете данные с вашими дисками постфактум - даже автоматически с использованием inotify

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

Редактировать:

vm.dirty_ratio = 70

Теоретически это должно дать нам 16 ГБ для кэширования ввода-вывода и подождать несколько минут до его записи на диск.

Это не сильно повлияло бы на ваш сценарий тестирования, но в вашем понимании есть неправильное представление. Параметр dirty_ratio - это не процент от общей памяти вашей системы, а скорее ее свободно объем памяти.

Есть статья о Настройка для больших нагрузок при записи с более подробной информацией.

Или просто возьмите больше дисков ... Имеющаяся у вас конфигурация дискового массива не поддерживает все, что вам нужно. Это тот случай, когда решение необходимо изменить в соответствии с вашими реальными потребностями. Я понимаю, что это всего лишь резервная копия, но имеет смысл избегать беспорядочного исправления.

Использование кеша памяти может повлечь за собой потерю данных, поскольку если что-то пойдет не так, данные, которые находятся в памяти и не сохраняются на дисках, будут потеряны.

Тем не менее, необходимо выполнить настройку на уровне файловой системы.

Например, если вы использовали ext4, вы можете попробовать вариант монтирования:

барьер = 0

Это: "отключает использование барьеров записи в коде jbd. Барьеры записи обеспечивают надлежащий порядок журнальных коммитов на диске, что делает использование кэшей записи на энергозависимые диски безопасным, с некоторым снижением производительности. Если ваши диски имеют одноразовое питание от батареи или другое: отключение барьеров может безопасно улучшить производительность. Параметры монтирования «барьер» и «без барьера» также могут использоваться для включения или отключения барьеров для согласованности с другими параметрами монтирования ext4 ».

Больше на: http://www.mjmwired.net/kernel/Documentation/filesystems/ext4.txt