[ Страница назад | Страница вперед | Содержание | Индекс | Библиотека | Юридическая информация | Поиск ]

Руководство по настройке производительности


Настройка производительности пула mbuf

Сетевая подсистема управляет памятью с помощью специальной утилиты, в которой первостепенную роль играет структура данных, называемая mbuf. Пулы mbuf в основном применяются для хранения данных исходящего и входящего сетевых потоков. При правильно выбранном размере пулов mbuf производительность сети значительно увеличивается. Напротив, неправильная настройка пулов mbuf может снизить производительность сети и системы. В AIX версии 4 параметры mbuf настраиваются автоматически в зависимости от конфигурации системы, в частности от количества адаптеров связи и требований, предъявляемых к сети.

Утилита управления пулами mbuf - Обзор

Утилита управления пулами mbuf контролирует размер пула, который может составлять от 32 до 16384 байт. Эти пулы формируются Администратором виртуальной памяти (VMM) из ячеек оперативной памяти системы при получении запроса на размещение. Для пулов выделены закрепленные страницы памяти ядра, то есть страницы виртуальной памяти, которые никогда не выгружаются на диск. В результате объем физической памяти, доступной для подкачки, уменьшается на объем, занимаемый пулами mbuf.

Сетевой пул памяти распределяется равномерно между всеми процессорами. Каждый субпул затем разбивается на блоки по 32-16384 байт. Каждый блок может "занимать" память у других блоков того же процессора, однако процессор не может "занимать" память у пула другого процессора. Когда сетевой службе требуется передать данные, она может вызвать службу ядра, например m_get(), для получения буфера памяти. Если буфер доступен и закреплен в памяти, он может быть предоставлен немедленно. Если буфер не закреплен в памяти и верхнее ограничение не достигнуто, то буфер выделяется и закрепляется. Будучи однажды закрепленной, память остается в этом состоянии, однако может быть освобождена для сетевого пула. Когда число свободных закрепленных буферов достигает порогового значения, некоторая их часть открепляется и возвращается системе. Такое открепление выполняется процессом ядра netm(). Инициатор функции m_get() может указать, следует ли ожидать сетевого буфера памяти. Если указано M_DONTWAIT (не ожидать) и доступных закрепленных буферов на момент вызова нет, то счетчик сбоев увеличивается на единицу. Если указано M_WAIT (ожидать), то процесс приостанавливается до тех пор, пока какой-либо буфер не будет выделен и закреплен.

Настройка сетевой памяти

Команда netstat -m позволяет обнаружить нехватку сетевой памяти (пулы mbuf/кластеры).

Объем RAM, который может быть выделен под сетевую память, ограничен сверху. Вы можете настроить это ограничение с помощью параметра maxmbuf или thewall. Единицей измерения для thewall служит 1 Кб, так что 16384 означает 16 Мб RAM.

Ниже указаны значения thewall по умолчанию в зависимости от версии операционной системы:

Максимальное значение thewall составляет 64 Мб в версиях до 4.3.0, 128 Мб в версиях 4.3.0 и 4.3.1 и 1 Гб в версиях 4.3.2 и выше (в системах с платформой, отличной от CHRP, ограничение составляет 256 Мб).

Значение maxmbuf также применяется для ограничения объема физической памяти, который может быть выделен подсистеме связи. Вы можете узнать это ограничение с помощью команды lsattr -E -l sys0. В AIX версии 4.2 и выше, если значение maxmbuf больше нуля (изменить его можно командой chdev или smitty), то оно применяется независимо от значения thewall. В AIX версий до 4.2 размер пулов mbufs ограничен сверху большим из значений maxmbuf и thewall.

В AIX версии 4.2 и выше значение maxmbuf равно нулю. Это означает, что должно применяться системное значение по умолчанию (thewall).

Кроме того, максимальный объем сетевой памяти (thewall или maxmbuf) применяется для ограничения объема памяти, выделяемого для обработки потоков. Настраиваемый параметр strthresh (по умолчанию равный 85 процентам значения thewall или maxmbuf) определяет, что как только общий объем выделенной памяти достигает 85 процентов, дальнейшее выделение памяти потокам прекращается.

Аналогично, другое пороговое значение, sockthresh (также по умолчанию равное 85 процентам), указывает, что как только общий объем выделенной памяти достигает 85 процентов значения thewall или maxmbuf, создание новых соединений сокетов прекращается (системные вызовы socket() и socketpair() возвращают значение ENOBUFS). Эти пороги можно настроить с помощью команды no.


[ Страница назад | Страница вперед | Содержание | Индекс | Библиотека | Юридическая информация | Поиск ]