Большинство систем Linux, которыми я управляю, поддерживают аппаратные RAID-контроллеры (в основном HP Smart Array ). Они все используют RHEL или CentOS.
Я ищу реальные настраиваемые параметры, помогающие оптимизировать производительность для установок, которые включают аппаратные RAID-контроллеры с дисками SAS (Smart Array, Perc, LSI и т. Д.) И кэш-память с резервным питанием от батареи или флэш-память. Предположим, RAID 1 + 0 и несколько шпинделей (4+ дисков).
Я трачу значительное количество времени на настройку сетевых параметров Linux для приложений с низкой задержкой и финансовых торговых операций. Но многие из этих параметров хорошо документированы (изменение буфера отправки / получения, изменение настроек окна TCP и т. Д.). Что делают инженеры на стороне хранилища?
Исторически сложилось так , что я внес изменения в планировании лифта I / O , в последнее время выбирают для deadline
и noop
планировщики для повышения производительности в рамках своих приложений. По мере развития версий RHEL я также заметил, что скомпилированные значения по умолчанию для блочных устройств SCSI и CCISS также изменились. Это оказало влияние на рекомендуемые параметры подсистемы хранения с течением времени. Однако прошло некоторое время, так как я видел какие-то четкие рекомендации. И я знаю, что настройки ОС по умолчанию не оптимальны. Например, кажется, что буфер упреждающего чтения по умолчанию в 128 КБ чрезвычайно мал для развертывания на оборудовании серверного класса.
В следующих статьях рассматривается влияние на производительность изменения кэша упреждающего чтения и значений nr_requests в очередях блоков.
http://zackreed.me/articles/54-hp-smart-array-p410-controller-tuning
http://www.overclock.net/t/515068/tuning-a-hp-smart-array-p400-with -linux-почему-настройка-действительно-важно
http://yoshinorimatsunobu.blogspot.com/2009/04/linux-io-scheduler-queue-size-and.html
Например, предлагаются следующие изменения для RAID-контроллера HP Smart Array:
echo "noop" > /sys/block/cciss\!c0d0/queue/scheduler
blockdev --setra 65536 /dev/cciss/c0d0
echo 512 > /sys/block/cciss\!c0d0/queue/nr_requests
echo 2048 > /sys/block/cciss\!c0d0/queue/read_ahead_kb
Что еще можно надежно настроить для повышения производительности хранилища?
Я специально ищу варианты sysctl и sysfs в производственных сценариях.
Больше всего на свете все зависит от вашей рабочей нагрузки.
read_ahead_kb
может помочь вам, если действительно полезно заранее прочитать много данных из некоторого файла, например, при потоковой передаче видео. Иногда это может причинить тебе боль. Да, 128 КБ по умолчанию могут звучать как маленькие, но при достаточном параллелизме они начинают звучать как большие! С другой стороны, с таким сервером, как сервер кодирования видео, который конвертирует видео только из формата в другой, это может быть очень хорошей идеей для настройки.nr_requests
после перестройки может легко залить ваш RAID-контроллер, что опять-таки снижает производительность.В реальном мире вам нужно следить за задержками . Если вы подключены к SAN, посмотрите
iostat
,sar
что вы хотите использовать, и посмотрите, не истекло ли время обслуживания запросов ввода-вывода. Конечно, это помогает и с локальными дисками: если задержки очень и очень велики, рассмотрите возможность настройки параметров лифта ввода-вывода, уменьшив max_requests и другие параметры.источник
К вашему сведению,
read_ahead_kb
иblockdev --setra
это просто разные способы установки одинаковых настроек с использованием разных единиц измерения (кБ против секторов):Так что
в твоем примере не имеет эффекта.
источник