- PVSM.RU - https://www.pvsm.ru -
В этой статье я хотел бы рассмотреть более узкую тему оптимизации RedHat/Oracle Linux (с виртуализацией и без) с использованием СХД NetApp FAS в среде SAN.
Для поиска и устранения узких мест в такой инфраструктуре, нужно опредилиться с компонентами инфраструктуры, среди которых их стоит искать. Разделим инфраструктуру на следующие компоненты:

Для поиска узкого места обычно выполняют методику последовательного исключения. Предлагаю перво-наперво начать с СХД [1] -> Сеть (Ethernet [2] / FC) -> Хост -> Приложение. Сейчас остановимся на Хосте.
В случае подключения Multipathing на гипервизоре [4].
Multipathing должен по-умолчанию использовать предпочтительные пути — пути к FCP Partner Path Misconfigured [5] будут говорить о неправильно настроенном [6] Red Hat Enterprise Linux / Oracle Enterprise Linux [7], Cent OS [8], SUSE Linux Enterprise [9]
В случае использования iSCSI крайне рекомендуется использовать Jumbo Frames в Ethernet со скоростью выше или равно 1Gb. Подробнее в статье про Ethernet с NetApp FAS [12].
ifconfig eth0 mtu 9000 up
echo MTU=9000 >> /etc/sysconfig/network-scripts/ifcfg-eth0
Также не забудьте что порт-группа установленная для виртуального сетевого адаптера вашей виртуальной машине должна быть подключена к виртуальному свичу с установленной настройкой MTU 9000 для всего свича.

Учитывая «универсальность» 10выгодно отличает протокол и коммутаторы [15] от FC таким образом предоставляя возможность «манёвра» и сохранения инвестиций в случае изменения бизнес потребностей.
Внутренние тестирования СХД NetApp (у других вендоров СХД эта ситуация может отличаться) FC8G и 10GBE iSCSI, CIFS и NFS показывают практически одинаковую производительность и латенси, характерным для OLTP и виртуализации серверов и десктопов, т.е. для нагрузок с мелкими блоками и случайным чтением записью.
Рекомендую ознакомится со стаьёй описывающей сходства, отличия и перспективы Ethernet & FC [15].
В случае когда инфраструктура заказчика подразумевает два коммутатора, то можно говорить об одинаковой сложности настройки как Wireshark [17]'ом трафик не «послушаешь».
Современные конвергентные коммутаторы, такие как Cisco Nexus 5500 способны коммутировать как трафик Ethernet так и FC позволяя иметь большую гибкость в будущем благодаря решению «два-в-одном».
В случае использования «файловых» протоколов механизм доступен для современных ОС [19]) происходит не «внутрь» того же NetApp Thin-Provisioned LUNs on RHEL 6.2 Deployment Guide [20].
Отдавать гостевой ОС все ресурсы сервера не стоит, во первых гипервизору нужно оставить минимум 4ГБ ОЗУ, во вторых иногда наблюдается обратный эффект при добавлении ресурсов гостевой ОС, это нужно подбирать эмпирическим путём.
Плагин NetApp VSC, который сам по себе является бесплатным ПО, устанавливает рекомендуемые настройки на ESXi хосте и HBA адаптере: очередь, задержки и другие. Сам плагин устанавливается в vCenter. Экономит время и устраняет во время теста человечиский фактор при настройке около двух десятков параметров на ESXi хосте для более эффективной работы с NetApp.

Хочу обратить ваше внимание на то, что в большинстве дистрибутивов Linux как в качестве виртуальной машины так и BareMetal параметр I/O scheduling установлен в значение не подходящее для FAS систем, это может приводить к высокой утилизации CPU.

Обратите внимание на вывод команды top, на высокую утилизацию CPU вызванную процессом dd, который в общем-то должен генерировать нагрузку только на систему хранения.
Теперь посмотрим на состояние системы хранения
iostat -dx 2
Device: rrqm/s wrqm/s r/s w/s rsec/s wsec/s avgrq-sz avgqu-sz await svctm %util
sda 0.00 0.00 0.00 454.00 0.00 464896.00 1024.00 67.42 150.26 2.20 100.00
Обратите внимание на высокое значение wait. Эти два косвенных признака, высокая утилизация CPU и высокие задержки, могут нам подсказывать, что необходимо более оптимально настроить ОС и СХД для взаимодействия. Проверить стоит, к примеру: адекватность работы мультипасинга, ALUA, предпочтительных путей и очередей на HBA.
Теперь про значения для elevator/scheduler [23]:
По-умолчанию оно установлено в значение cfq или deadline:
cat /sys/block/sda/queue/scheduler
noop anticipatory deadline [cfq]
Рекомендуется устанавливать его в значение noop:
echo noop > /sys/block/sda/queue/scheduler
cd /sys/block/sda/queue
grep .* *
scheduler:[noop] deadline cfq
Для того, чтобы настройки были постоянными, добавьте “elevator=noop” в параметры загрузки ядра в файле /etc/grub.conf, они будут применены ко всем блочным устройствам. Или добавьте соответствующий скрипт в /etc/rc.local, для того, чтобы гибко устанавливать настрйки для каждого отдельного блочного устройства.
cat /etc/rc.local | grep -iv "^exit" > /tmp/temp
echo -e "echo noop > /sys/block/sdb/queue/schedulernexit 0" >> /tmp/temp
cat /tmp/temp > /etc/rc.local; rm /tmp/temp
Стоит опытным путём подобрать наиболее оптимальные значения работы виртуальной памяти ОС — параметры sysctl: vm.dirty_background_ratio, vm.dirty_ratio и vm.swappiness.
sysctl -a | grep dirty
vm.dirty_background_bytes = 0
vm.dirty_background_ratio = 10
vm.dirty_bytes = 0
vm.dirty_expire_centisecs = 3000
vm.dirty_ratio = 20
vm.dirty_writeback_centisecs = 500
sysctl -a | grep swappiness
vm.swappiness = 60
Так у одного заказчика наиболее оптимальными значениями для RedHat Enterprice Linux 6 с здесь [25]. В случае использования оптимальным для таких задач [26].
sysctl -w vm.dirty_background_ratio=1
sysctl -w vm.dirty_ratio=2
echo vm.dirty_background_ratio=1 >> /etc/sysctl.conf
echo vm.dirty_ratio=2 >> /etc/sysctl.conf
#for Guest VMs or Oracle DB
sysctl -w vm.swappiness=0
echo vm.swappiness=0 >> /etc/sysctl.conf
#Reload data from /etc/sysctl.conf
sudo sysctl –p
Значение по-умолчанию обычно 128, его нужно подбирать вручную. Увеличение длинны очереди имеет смысл при случайных операциях ввода-вывода, генерирующих множество операций disk seek на дисковой подсистеме. Изменяем так:
echo 100000 > /sys/block/[DEVICE]/queue/nr_requests
Иногда изменение этого параметра может не давать результатов [28], к примеру в случае с InnoDB (из-за особенностей работы этого приложения, которое само оптимизирует данные перед их записью) или в случае увеличения параметра выше дефолтного при работе с SSD дисками (так как в них нет операций disk seek).
В некоторых случаях VMFS показывает лучшую производительность по сравнению с RDM. Так в некоторых тестах c FC4G можно получить 300 MByte/sec при использовании VMFS и около 200 MByte/sec с RDM.
ФС может вносить существенные коррективы при тестировании производительности.
Размер блока ФС должен быть кратным 4КБ. К примеру, если мы запускаем синтетическую нагрузку подобную генерируемой OLTP, где размер оперируемого блока в среднем равен 8КБ, то ставим 8КБ. Хочу также обратить внимание что как сама ФС, её реализация для конкретной ОС и версия может очень сильно влиять на общую картину производительности. Так для при записи 10 МБ блоками в 100 потоков командой dd файлов от БД на ФС UFS расположенной на LUN отданный по FC4G с СХД FAS 2240 и 21+2 дисками SAS 600 10k в одном агрегате показывал скорость 150 МБ/сек, тогда как та же конфигурация но с ФС ZFS показывала в два раза больше (приближаясь к теоретическому максимуму сетевого канала), а параметр Noatime вообще никак не влиял на ситуацию.
На уровне файловой системы можно настроить параметр при монтрировании noatime и nodiratime, который не даст обновлять время доступа к файлам, что часто очень положительно сказывается на производительности. Для таких ФС как UFS, EXT3 и др. У одного из заказчиков установка noatime при монтировании файловой системы ext3 на Red Hat Enterprise Linux 6 сильно уменьшило нагрузку на CPU хоста.
Для Linux машин нужно при создании выбрать геометрию диска [33]: "linux" (для машин без xen) или "xen" в случае если на этот лун будет установлен Linux LVM с Dom0.
Для любой ос нужно при создании выполнив на системе хранения команду lun stats [35].
Не игнорируйте этот пункт. Набор утилит устанавливает правильные задержки, размер очереди на HBA и другие настройки на хосте. Отображает подключённые LUN и их детальную информацию со стороны СХД. Набор утилит бесплатный и может быть скачан с сайта техподдержки нетапа. После установки запустите утилиту
host_config <-setup> <-protocol fcp|iscsi|mixed> <-multipath mpxio|dmp|non> [-noalua]
Она находиться
/opt/netapp/santools/
После чего, скорее всего, понадобится перезапустить хост.
iostat -xn 1
top
| Iostat | Windows, аналог |
|---|---|
| rrqm/s (The,number of merged read requests queued per second.) read I/O per second | LogicalDisk(*)Disk Transfers/sec = rrqm/s+wrqm/s., Для,Linux машин добавить колонку rrqm/s, а LogicalDisk(*)Disk Transfers/sec пропускать |
| wrqm/s (The number of merged write requests,queued per second.) write I/O per second | LogicalDisk(*)Disk Transfers/sec = rrqm/s+wrqm/s., Для,Linux машин добавить колонку wrqm/s, а LogicalDisk(*)Disk Transfers/sec пропускать |
| r/s (The number of read requests sent to the device per,second.) | Disk,reads/sec |
| w/s (The number of write requests sent to the device per,second.) | Disk,writes/sec |
| rsec/s (The number of sectors read per second.) нужно знать размер сектора, обычно,512 байт. | rsec/s*512=,"LogicalDisk(*)Disk,Read Bytes/sec", |
| wsec/s (The number of sectors written per second.) нужно знать размер сектора, обычно,512 байт. | wsec/s*512=,"LogicalDisk(*)Disk Write Bytes/sec", |
| avgrq-sz (The request size in sectors.) нужно знать размер сектора, обычно 512 байт. | avgrq-sz — средний размер оперируемого блока — нужен. Добавить колонку, в Windows он высчитывается из других параметров. |
| avgqu-sz (The number of,requests waiting in the device’s queue.) | "LogicalDisk(*)Avg.,Disk Queue Length". Отдельно по Read и Write получается нет, но этого, достаточно. Соотношение чтение записи будет высчитываться по «rrqm/s» с «wrqm/s» или «r/s» с «w/s»., Т.е., для Linux пропускать:,LogicalDisk(*)Avg.,Disk Read Queue Length,LogicalDisk(_Total)Avg.,Disk Write Queue Length. |
| await (The number of milliseconds required to respond to,requests) | Среднее,Latency, в Windows это значение не выдаёт, высчитывается из других, пареметров, добавить колонку, параметр нужен. |
| svctm (The number of milliseconds spent servicing,requests, from beginning to end) | Время, выполнения запроса. Добавить отдельную колонку для Linux машин, пригодится |
| %util (The percentage of CPU time during which requests were,issued) | "Processor(_total)%,Processor Time", нагрузка на CPU пускай будет (добавить колонку), из неё косвенно понятно перегруз дисковой подсистемы. |
В зависимости от конфигурации, протоколов, нагрузок и инфраструктуры ваши приложения могут иметь различные рекомендации настройки и тонкого тюнинга. Для этого обращайтесь за Best Practice Guide для соответствующих приложений для вашей конфигурации. Самыми распространёнными могут быть
Не забудьте установить драйвера для вашего Qlogic HBA серии 8100 [58].
Не секрет что далеко не всё всегда 100% совместимо, хотя казалось бы все протоколы, разъёмы, API приложений стандартизированы, что ещё нужно для нормальной работы инфраструктуры ЦОД? Даже если иметь два компонента взаимодействующих друг с другом, произведённых одним производителем само по себе работать оно не обязано, если туда не залить точно проверенные именно для вашего случая прошивки и соответствующе не настроено. Все производители имеют матрицу совместимости, где собрано множество оттестированных комбинаций оборудования, их прошивок, подключений и приложений. Настройка ЦОД'ов далеко не тривиальный процесс и для его упрощения рекомендуется во-первых следовать лучшим практикам, во-вторых пользоваться матрицей совместимости, которые уменьшают количество потенциально проблемных мест. Так использование проверенных и оттестированых конфигураций упрощает и ускоряет процесс запуска и эксплуатации ЦОД, уменьшает фактор человеческой ошибки. Широко применяйте этот подход [60] в вашей практике для уменьшения потенциальных проблем в инфрастурктуре ЦОД.
Уверен, что со временем мне будет что добавить в эту статью по оптимизации Linux хоста, спустя время, так что заглядывайте сюда время от времени.
Замечания по ошибкам в тексте и предложения прошу направлять в ЛС.
Автор: bbk
Источник [61]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/linux/76741
Ссылки в тексте:
[1] СХД: http://habrahabr.ru/post/243045/
[2] Ethernet: http://habrahabr.ru/post/243119/
[3] SAN Multipathing: #SAN_Multipathing
[4] Multipathing на гипервизоре: #ESXi_host
[5] FCP Partner Path Misconfigured: http://blog.aboutnetapp.ru/archives/971
[6] неправильно настроенном: http://blog.aboutnetapp.ru/archives/631
[7] Red Hat Enterprise Linux / Oracle Enterprise Linux: https://library.netapp.com/ecmdocs/ECMP1217221/html/GUID-00B5045F-F8A0-4163-AF13-A9464BD86E74.html
[8] Cent OS: https://linux.netapp.com/node/56
[9] SUSE Linux Enterprise: https://library.netapp.com/ecmdocs/ECMP1217221/html/GUID-CC8795C3-9E21-4EA8-B269-0F203F7AC58B.html
[10] Ethernet: #Ethernet
[11] Jumbo frames: #Jumbo_frames
[12] Ethernet с NetApp FAS: http://habrahabr.ru/post/243119/#jumboframe
[13] ESXi & MTU9000: #ESXi_and_MTU9000
[14] Converged Network: #converged_network
[15] выгодно отличает протокол и коммутаторы: http://habrahabr.ru/post/224869/
[16] FC8 vs 10GBE: iSCSI, CIFS, NFS: #FC8vs10GBE_iSCSI_CIFS_NFS
[17] Wireshark: http://www.wireshark.org
[18] Thin Provitioning: #Thin_Provitioning
[19] механизм доступен для современных ОС: http://habrahabr.ru/post/224869/#functionality_adoption
[20] NetApp Thin-Provisioned LUNs on RHEL 6.2 Deployment Guide: http://www.netapp.com/us/system/pdf-reader.aspx?pdfuri=tcm:10-60697-16&m=tr-4046.pdf
[21] Гостевая ОС так и хост BareMetal Linux: #Host_OS_and_BareMetal
[22] Linux elevator: #Linux_elevator
[23] elevator/scheduler: http://lonesysadmin.net/2008/02/21/elevatornoop/
[24] Настройки Sysctl с работой Virtual Memory: #Sysctl_Virtual_Memory
[25] здесь: http://lonesysadmin.net/2013/12/22/better-linux-disk-caching-performance-vm-dirty_ratio/
[26] оптимальным для таких задач: http://labite.wordpress.com/2012/08/31/tuning-linux-server-for-oracle-database/
[27] I/O queue size или длинна очереди ввода-вывода на HBA: #HBA_IO_queue_size
[28] изменение этого параметра может не давать результатов: http://yoshinorimatsunobu.blogspot.com/2009/04/linux-io-scheduler-queue-size-and.html
[29] Гостевая ОС: #Guest_OS
[30] Файловая система: #FS
[31] Noatime на Хосте: #Noatime_on_host
[32] Таблица загрузки: #Boot_record_table
[33] выбрать геометрию диска: https://library.netapp.com/ecmdocs/ECMP1196995/html/GUID-7D4DD6E3-DB77-4671-BDA2-E393002E9EB2.html
[34] Misalignment : #Misalignment
[35] выполнив на системе хранения команду lun stats: http://habrahabr.ru/post/243045/#Misalignment
[36] NetApp Host Utilities: #Host_Utilities
[37] Сбор статистики на хосте: #Statistics
[38] Linux и другие Unix-like: #linux_statistics
[39] здесь: http://cherry.world.edoors.com/Cdx6RbRHlOjQ
[40] Приложения: #Apps
[41] NetApp SnapManager for Oracle & SAN сеть: http://habrahabr.ru/post/230191/
[42] Oracle DB on Clustered ONTAP: http://www.netapp.com/us/system/pdf-reader.aspx?pdfuri=tcm:10-120865-16&m=tr-4249.pdf
[43] NetApp for Oracle Database: http://www.netapp.com/us/system/pdf-reader.aspx?pdfuri=tcm:10-59709-16&m=nva-0002.pdf
[44] Best Practices for Oracle Databases on NetApp Storage: http://www.netapp.com/us/system/pdf-reader.aspx?pdfuri=tcm:10-60340-16&m=tr-3633.pdf
[45] SnapManager for Oracle: http://www.netapp.com/us/system/pdf-reader.aspx?pdfuri=tcm:10-61351-16&m=tr-3761.pdf
[46] Oracle VM: http://www.netapp.com/us/system/pdf-reader.aspx?pdfuri=tcm:10-60848-16&m=tr-3712.pdf
[47] DB2: http://www.netapp.com/us/system/pdf-reader.aspx?pdfuri=tcm:10-59920-16&m=tr-3272.pdf
[48] DB2 and FlexClone: http://www.netapp.com/us/system/pdf-reader.aspx?pdfuri=tcm:10-61521-16&m=tr-3460.pdf
[49] Deploying an IBM DB2 Multipartition Database: http://www.netapp.com/us/system/pdf-reader.aspx?pdfuri=tcm:10-60443-16&m=tr-3988.pdf
[50] MySQL: http://www.netapp.com/us/system/pdf-reader.aspx?pdfuri=tcm:10-60997-16&m=mysqlperformance-5.pdf
[51] Infrastructure for Web 2.0/LAMP Applications powered by NetApp and MySQL: http://www.netapp.com/us/system/pdf-reader.aspx?pdfuri=tcm:10-61402-16&m=mysql-wp.pdf
[52] Red Hat Enterprise Linux 6, KVM: http://www.netapp.com/us/system/pdf-reader.aspx?pdfuri=tcm:10-101510-16&m=tr-4104.pdf
[53] Lotus Domino 8.5 for Linux: http://www.netapp.com/us/system/pdf-reader.aspx?pdfuri=tcm:10-60965-16&m=tr-3691.pdf
[54] Citrix XenServer: http://www.netapp.com/us/system/pdf-reader.aspx?pdfuri=tcm:10-104657-16&m=tr-3732.pdf
[55] Deploying Red Hat Enterprise Linux OpenStack Platform 4 on NetApp Clustered Data ONTAP: http://www.netapp.com/us/system/pdf-reader.aspx?pdfuri=tcm:10-121372-16&m=tr-4284.pdf
[56] и др.: http://www.netapp.com/us/library/
[57] Драйвера: #drivers
[58] Qlogic HBA серии 8100: http://www.netapp.com/us/system/pdf-reader.aspx?m=TR-3800.pdf&cc=us
[59] Совместимость: #compatibility
[60] применяйте этот подход: http://habrahabr.ru/post/209422/#Matrix
[61] Источник: http://habrahabr.ru/post/245357/
Нажмите здесь для печати.