У меня здесь проблема с максимальной пропускной способностью, и мне нужен совет, как настроить мои ручки. У нас есть файловый сервер 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