Наши партнеры

UnixForum






Книги по Linux (с отзывами читателей)

Библиотека сайта rus-linux.net

На главную -> MyLDP -> Тематический каталог -> Настройка системы

Повышение производительности Linux-систем

Источник: CCC.ru Автор: Джереми Аймпсон

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

Cчитается, что ОС Linux более надежна, безопасна и эффективнее использует аппаратные ресурсы, нежели ОС Windows NT - лидер рынка Intel-совместимых систем. Все это замечательно, но как убедиться в том, что она в самом деле использует возможности аппаратуры, что называется, на полную катушку? Вот несколько советов по настройке параметров ОС Linux, которые помогут вам "выжать" все из своей системы.

Настройка системы ввода-вывода

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

Если вы используете Linux-систему в качестве Web- или файл-сервера, ее параметры настройки неизбежно будут отличаться от таковых ОС рабочей станции. На серверной стороне вы постараетесь повысить скорость работы системы за счет увеличения объема оперативной или дисковой памяти. И хотя рынок рабочих станций Linux уже существует, в данной статье мы ставим перед собой лишь задачу рассмотреть, как можно оптимизировать работу вашей Linux-системы в качестве сервера.

Сетевые настройки

Большинство параметров настройки ядра Linux хранятся в каталоге /proc вашей файловой системы. Существует множество сетевых настроек, и большинство из них вы должны оставить без изменения. В каталоге /proc/sys/net, и в частности в подкаталогах ipv4 и core, находится большое число файлов, содержащих данные о сетевых настройках ядра. Внося изменения в файлы, вы изменяете значения этих параметров. (Некоторая документация по указанным настройкам есть в файле Documentation/networking/ip-sysctl.txt, который можно найти в архиве исходных текстов ядра Linux.) Если вы обратитесь с вопросом: "Как настроить стек TCP/IP ОС Linux?" - к членам, входящим в список рассылки разработчиков ядра системы, то вам посоветуют оставить все как есть. Настройки по умолчанию обеспечивают максимальную производительность в большинстве ситуаций. Их значения изменяют в исключительных случаях: при настройке нестандартных сетевых узлов и при желании поэкспериментировать.

Стоит изменить значение только одного параметра - tcp_timestamps. В соответствии со спецификацией TCP отметки времени необязательны, поэтому отключение этой опции не помешает взаимодействию сетей. Отметки определяют время передачи и подтверждения приема пакетов, необходимое для работы алгоритмов, контролирующих загрузку сети. В вашей высокоскоростной локальной сети, не страдающей от перегрузок, они в основном не нужны. Выключение этого параметра уменьшает объем вычислений на вашем Linux-узле и уменьшает размер пакетов. В действительности же, выигрыш в производительности будет заметен лишь в том случае, если ваша система хронически перегружена; с этой точки зрения вам все равно придется задуматься о модернизации оборудования.

Гораздо более полезна опция Allow Large Windows. Она определяет объем передаваемых данных, буферизуемых до получения подтверждающей квитанции от противоположной стороны TCP-соединения. Для высокоскоростных соединений при больших расстояниях (когда и полоса пропускания, и задержка велики) вы сможете использовать преимущества широкой полосы пропускания сети. Для этого система должна иметь хотя бы 16 Мбайт оперативной памяти. Чтобы определить значение параметра буферизации, просто прочитайте файл /proc/sys/net/core/rmem_max (или /proc/sys/net/core/wmem_max). Если это значение равно 65535, значит, опция Allow Large Windows включена. В противном случае вы можете сами включить ее командой echo 65535 > /proc/sys/net/core/rmem_max. (Сделайте то же самое с файлами /proc/sys/net/core/wmem_max, /proc/sys/net/core/rmem_default и /proc/sys/net/ core/wmem_default.)

Цифры 65535 имеют всего лишь оценочный характер. При их увеличении (максимальное значение - 231-1) растет и риск нежелательных последствий, вызванных необходимостью повторной передачи слишком большого объема данных в случае потери хотя бы одного пакета. (Потребуется и больший объем оперативной памяти, так как нужно будет выделять по меньшей мере два участка памяти этого размера для каждого сетевого соединения.) Уменьшая же численное значение этого параметра, вы теряете возможность воспользоваться всеми преимуществами высокоскоростной сети.

Операции дискового ввода-вывода

Дисковая подсистема ядра Linux в работе очень "консервативна". Если она "не уверена" в том, что какой-то диск поддерживает определенные возможности (например, Ultra DMA или IDE Block Mode), она установит для него параметры по умолчанию, которые уж точно не приведут к потере данных. Посредством утилиты hdparm вы можете изменить настройки и оценить степень надежности подсистемы еще до использования ее в конкретной рабочей среде. (В действительности утилита hdparm в основном применяется только при работе с дисками IDE. Она поддерживает лишь очень небольшое число дисков SCSI.) На нашей тестовой машине включением опции поддержки Ultra DMA (с помощью команды hdparm -d1 /dev/hda) мы добились увеличения скорости чтения данных с 2,17 до 11,19 Мбайт/с. Скорость записи увеличивается примерно в такой же степени. На другой, значительно более старой машине изменений в скорости мы не заметили.

Единственным ограничением является небольшая вероятность того, что очень старое оборудование "не умеет" правильно работать в режиме Ultra DMA. Установка на нашем тестовом компьютере режима IDE Block Mode (известного еще как Multiple Sector Mode) командой hdparm -m16 /dev/hda на самом деле только замедлила работу. Включение 32-битового режима передачи (командой hdparm -c1 /dev/hda) привело к небольшому росту быстродействия, но в сочетании с Ultra DMA никак не повлияло на результаты тестов. Дополнительная информация по использованию утилиты hdparm содержится в документации (man hdparm).

Поэкспериментировав со значениями этих трех параметров, вы можете настроить вашу систему на оптимальное быстродействие. Большую роль тут играют тип диска и набор микросхем конкретной материнской платы. Просмотрите файл /var/log/messages, и, если вы увидите сообщение "DMA disabled" или что-нибудь в этом роде, значит, драйвер IDE испытывает проблемы с режимом Ultra DMA и отключил его ради безопасности ваших данных. В случае, когда вам действительно необходимо увеличение быстродействия, вам может понадобиться приобрести другой жесткий диск.

С помощью утилиты hdparm с опцией -a вы также можете изменить значение буфера опережающего считывания. С одной стороны, значение 8 Кбайт, устанавливаемое по умолчанию, хорошо для тех систем, в которых файлы считываются целиком, с другой - в системах, где считываются разные части файла (например, в СУБД), уменьшение этого параметра приводит к росту производительности, так как в данной ситуации считывание таких больших частей файла непродуктивно.

В соответствии со стандартом файловой системы Linux, основой которой является Unix, файлы регистрации событий приложений размещаются в каталоге /var/log, поэтому лучше выделите для него отдельный диск, особенно если эти приложения часто обращаются к основному диску; такими приложениями являются, например, базы данных. Еще лучше подключить диски к разным контроллерам, максимальный эффект будет достигнут в случае с IDE-дисками. (Это справедливо для любой операционной системы.)

Вы можете увеличить кэш файловой системы простым увеличением объема оперативной памяти. Свободная память - это расточительство, поэтому Linux использует ее в качестве кэша при операциях чтения и записи. Иногда приходится слышать жалобы пользователей на то, что используется вся оперативная память, в то время как система "ничего не делает". Поясняем: эта память используется для буферов. Если приложениям нужна оперативная память, содержимое буферов сбрасывается на диск и освобождается для приложений.

Разговаривая об оперативной памяти, вспомним о свопинге (подкачке). Пространство свопинга - это место на диске, выделяемое для сбрасывания страниц памяти, когда оперативная память нужна для других целей. Содержимое области памяти, используемой одним приложением, временно сбрасывается на диск, чтобы освободить место другому активному приложению. В идеале система никогда не должна совершать эту процедуру, так как обратное считывание данных с диска в оперативную память требует определенного количества времени. Linux поддерживает возможность создания файлов подкачки, за исключением динамических. Использовать файлы подкачки, вообще-то, не рекомендуется из-за необходимости в процессе свопинга сначала обращаться к коду файловой системы. Более эффективным будет применение выделенного раздела. Еще лучше использовать два и более раздела подкачки, чтобы ядро могло распределять нагрузку между ними.

В системной архитектуре уровень файловой системы располагается между уровнем физического диска и уровнем приложений. Файловая система Linux по умолчанию называется Second Extended File System (ext2fs). При создании файловой системы на диске вы можете уменьшить общее время чтения, увеличив размер блока файловой системы. (В файловой системе размер блока - это минимальная величина дисковой памяти, которая может быть выделена файлу.) Сделав это, вы уменьшите общее число обращений к диску для считывания файла.

В ext2fs размер блока по умолчанию равен 1024 байт, а максимальный размер может достигать 4096 байт. Оборотной стороной увеличения размера блока является повышение фрагментации. Любой файл использует, как минимум, один блок. Если файл меньше 4096 байт, он все равно будет занимать целый блок, таким образом, используя, как минимум, 4096 байт. Сейчас дисковая память дешевеет, поэтому смело задействуйте максимальный размер блока - конечно, кроме случаев, когда вы уверены, что средний размер файла значительно меньше 4096 байт.

Другой небольшой совет по увеличению быстродействия на уровне файловой системы: отключите запись метаданных времени доступа (atime), которые помещаются на диск каждый раз при обращении к файлу. Обычно эти данные не нужны и предотвращение их записи особенно полезно для Web- или файл-серверов. Вы можете отключить запись данных времени доступа для всей файловой системы, установив значение noatime в файле /etc/fstab; для отдельного файла либо каталога - это можно сделать командой chattr.

Работая с клиентом NFS (Network File System) в Linux, обратите внимание на размер блоков чтения и записи, которые он использует для связи с сервером NFS. Общеизвестно, что, когда Linux-клиент устанавливает соединение с сервером NFS на базе ОС Solaris фирмы Sun Microsystems, размер блока должен составлять 8192 байт. Отредактируйте файл /ets/fstab, установив в четвертой колонке соответствующей строки значения rsize = 8192, wsize = 8192.

На размер блоков чтения и записи также могут повлиять другие факторы, например особенности конкретной сетевой карты, загруженность сети, программное обеспечение, установленное на клиенте и сервере. (См. "Словарь" для дополнительной информации об утилите анализа NFS-установок nfspmon.)

Linux и программный RAID

RAID - средство для повышения производительности (Level 0) или производительности и избыточности (Level 5 и др.). Аппаратные реализации RAID наиболее просты, но и довольно дороги. Linux позволяет создавать программный RAID. Не нужно никакого дополнительного оборудования, кроме достаточного числа дисков и контроллеров. Программная реализация RAID 0 уступает по производительности аппаратному решению, однако она предпочтительнее, чем использование каждого диска в качестве отдельной файловой системы, так как позволяет равномерно распределить операции чтения и записи между всеми дисками. RAID 5 или RAID 10 также обеспечивают и избыточность.

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

Одна из задач разработчиков ядра Linux - избавиться от необходимости преодолевать трудности настройки Linux. Линус Торвальдс и другие программисты, работающие над ядром системы, стараются сделать его уже заранее настроенным на максимальную производительность. Не нужны будут более никакие трюки. Разработчики намерены добиться этого, используя самонастраивающиеся алгоритмы, способные находить и устранять узкие места в системе, ими ведется большая работа по улучшению подсистемы управления памятью. Благодаря высокопроизводительным файловым системам специальные Web- и файл-серверы смогут обслуживать запросы значительно быстрее.

Производительность решений Open Source

Безусловно, имея деньги на покупку дополнительного или просто лучшего оборудования, можно решить почти любую проблему. Но при этом узкие места никуда не исчезают - просто "русла", по которым "течет" информация, становятся шире и мы перестаем испытывать неудобства. Но есть и другой способ потратить деньги, чтобы повысить производительность Linux-систем. Так как Linux является операционной системой с открытым исходным кодом, вы можете изменять последний так, как считаете нужным. Например, нанять программистов - даже программистов ядра Linux - и c их помощью решить проблему производительности или же сделать это самостоятельно.