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

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


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

Оптимальные значения параметров связи зависят от типа LAN, особенностей операций ввода-вывода главной системы и прикладной программы. В следующих разделах описаны основные принципы настройки соединений и приведены особые рекомендации для различных типов LAN.

Общие рекомендации

При настройке соединения может преследоваться одна из двух целей: повысить его пропускную способность или сократить расход памяти. Некоторые из приведенных рекомендаций относятся только к одной из этих задач, другие же - универсальны. Ниже указан рекомендуемый размер блока приложения для различных адаптеров:

Имя устройства Размер блока приложения
Ethernet Несколько блоков по 4096 Кб
Token-Ring (4 Мб) Несколько блоков по 4096 Кб
Token-Ring (16 Мб) Несколько блоков по 4096 Кб
FDDI (tcp) Несколько блоков по 4096 Кб
SOCC (tcp) 28672 байт
HIPPI 65536 байт
ATM Несколько блоков по 4096 Кб

Повышение пропускной способности

Ниже приведены некоторые рекомендации по повышению пропускной способности:

Протоколы типа "запрос-ответ"

Ниже приведены некоторые рекомендации:

Потоки данных

Ниже приведены некоторые рекомендации:

Уменьшение расхода памяти

Для минимизации требований к памяти воспользуйтесь следующими рекомендациями:

Настройка очередей приема и передачи на уровне адаптера

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

Ниже приведены некоторые рекомендации:

Очереди передачи

Некоторые драйверы устройств позволяют задать ограничение на размер очереди передачи. В зависимости от драйвера и адаптера, могут быть заданы ограничения на размер как аппаратной, так и программной очереди. У некоторых драйверов есть только аппаратная очередь, у других - как программная, так и аппаратная. Некоторые драйверы управляют аппаратной очередью самостоятельно и позволяют задать ограничение только для программной очереди. Обычно драйвер устройства помещает пакет непосредственно в аппаратную очередь адаптера. Если быстродействие CPU выше пропускной способности сети, пакеты для отправки будут быстро накапливаться. Это же относится к системам SMP. В этом случает аппаратная очередь переполнится. Для того чтобы этого избежать, некоторые драйверы после заполнения аппаратной очереди создают дополнительную программную очередь, в которую и помещаются следующие пакеты. После достижения максимального размера программной очереди все новые пакеты для передачи будут отбрасываться. Это приведет к снижению производительности, так как протоколу верхнего уровня придется повторно отправлять эти пакеты.

В версиях AIX младше 4.2.1 размер очереди передачи ограничивался значениями из диапазона 150-250, в зависимости от конкретного адаптера. По умолчанию устанавливалось небольшое значение, обычно - 30. В AIX 4.2.1 и выше ограничение на размер очереди передачи было увеличено для большинства драйверов устройств до 2048 буферов. Значение по умолчанию также было увеличено. Для большинства драйверов оно равно 512. Благодаря этому в системах с мощным процессором и системах SMP очереди не переполняются.

Ниже приведены возможные размеры очереди передачи адаптера MCA:

Адаптер MCA По умолчанию Диапазон
Ethernet 512 20 - 2048
10/100 Ethernet 64 16,32,64,128,256
Token-Ring 99 или 512 32 - 2048
FDDI 512 3 - 2048
ATM / 155 ATM 512 0 - 2048

Ниже приведены возможные размеры очереди передачи адаптера PCI:

Адаптер PCI По умолчанию Диапазон
Ethernet 64 16 - 256
10/100 Ethernet 256, 512 или 2048 16 -16384
Token-Ring 96, 512 или 2048 32 - 16384
FDDI 30 или 2048 3 - 16384
155 ATM 100 или 2048 0 - 16384

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

Очереди приема

Некоторые адаптеры позволяют изменить объем ресурсов, выделяемых для приема пакетов из сети. Это может быть число (и даже размер) буферов приема, или параметр очереди приема, косвенно определяющий число буферов приема.

Объем ресурсов, выделяемых для приема пакетов, требуется увеличить при максимальной нагрузке в сети. Получаемые пакеты помещаются драйвером сетевого интерфейса в очередь приема. Если очередь приема переполнена, пакеты теряются, что приводит к необходимости повторной передачи этих пакетов отправителем. Параметры очереди приема можно настроить с помощью команд SMIT или chdev (за дополнительной информацией обратитесь к разделу Выбор значений параметров). Для каждого типа адаптера задается максимальный размер очереди (см. Настройка адаптеров MCA и PCI).

Для всех адаптеров Microchannel и адаптеров PCI параметры очереди приема обычно задают число выделенных адаптеру буферов приема пакетов.

Буферы устройств

В AIX 4.1.4 и выше некоторым устройствам выделяются отдельные структуры mbuf. Это позволяет драйверу получить собственный набор буферов и выполнить их предварительную настройку для DMA. Такая настройка будет выполняться всего один раз, что позволит повысить производительность системы. Кроме того, адаптер может запросить буферы, размер которых соответствует значению его MTU. Например, для коммутаторов ATM, HIPPI и SP2 MTU равен 64 Kб. Максимальный размер mbuf системы - 16 Кб. Если адаптеру выделить буфер размером 64 Kб, то приложения смогут записывать более крупные порции данных (64 Kб) прямо в буфер адаптера. Иначе сообщение придется записать в несколько буферов размером 16 Кб, причем на выделение и освобождение лишних буферов потребуются дополнительные ресурсы системы.

Ниже перечислены адаптеры, применяющие собственные буферы mbuf:

Поддержка буферов конкретных устройств усложняет работу администратора. Для просмотра статистики, относящейся к буферам адаптеров, и изменения параметров адаптеров администратору придется применять команды конкретного устройства. Если согласно данным статистики некоторые пакеты были отклонены по причине нехватки ресурсов буферов, то следует увеличить размеры буферов.

Поскольку для каждого типа адаптера существуют свои утилиты для изменения параметров, они здесь не описаны. Параметры ATM MCA описаны в разделе Адаптер MCA. Для просмотра статистических данных о работе ATM предназначена команда atmstat -d atm0 (вместо нуля укажите номер своего интерфейса ATM).

В каких случаях нужно увеличить значения параметров очередей приема и передачи

Ниже описаны случаи, в которых рекомендуется увеличить значения параметров очередей приема и передачи:

  1. Если CPU работает намного быстрее, чем сеть, или по одной сети передают данные несколько приложений. Обычно это характерно для больших многопроцессорных систем (SMP).
  2. Если для параметров tcp_sendspace и tcp_recvspace установлены большие значения. Они могут быть установлены командой no или приложениями, которые посредством системных вызовов увеличивают объем буферов приема и передачи протокола TCP. В этом случае CPU может одновременно отправить адаптеру большое количество пакетов. Аналогичная ситуация может возникнуть при изменении параметров udp_sendspace и udp_recvspace протокола UDP.
  3. При резком возрастании плотности потока данных.
  4. При отправке небольших пакетов нагрузка на сеть выше, чем при отправке больших сообщений. Это связано с тем, что передача больших сообщений по сети занимает большее время. Соответственно, за единицу времени будет передаваться меньшее число сообщений.

Команды просмотра и изменения параметров очереди

С помощью нескольких утилит просмотра состояния можно просмотреть максимально возможную скорость передачи данных очередью и среднее число переполнений очереди. Для этого вызовите команду netstat -v или специальную команду для просмотра статистики адаптера: entstat для Ethernet, tokstat для Token-Ring, fddistat для FDDI, atmstat для ATM и т.д.

Пример вывода команды entstat приведен в разделе Команда entstat. Кроме того, эти значения можно узнать с помощью утилиты netstat -i. Если в выводе этой команды значение Oerrs для интерфейса отлично от нуля, то, скорее всего, очередь вывода переполнена.

Просмотр параметров

Для просмотра конфигурации адаптера вызовите команду lsattr -E -l имя-адаптера или команду SMIT smitty commodev.

С каждым адаптером связан свой набор переменных. Вот только некоторые примеры параметров, задающих длину очереди передачи: sw_txq_size, tx_que_size, xmt_que_size. Параметры длины очереди приема и/или пула буферов приема могут называться rec_que_size, rx_que_size или rv_buf4k_min.

Ниже приведен вывод команды lsattr -E -l atm0 для адаптера ATM 155 Мб/с IBM PCI. Здесь значение sw_txq_size равно 250, а значение rv_buf4K_min - x30.

# lsattr -E -l atm0
dma_mem        0x400000    НД                                           Ложь
regmem         0x1ff88000  Адрес шины памяти регистров адаптера         Ложь
virtmem        0x1ff90000  Адрес шины виртуальной памяти адаптера       Ложь
busintr        3           Уровень прерываний шины                      Ложь
intr_priority  3           Приоритет прерывания                         Ложь
use_alt_addr   нет         Разрешить альтернативный адрес ATM MAC       Истина
alt_addr       0x0         Альтернативный адрес ATM MAC (12 шестн.цифр) Истина
sw_txq_size  250         Размер программной очереди передачи          Истина
max_vc         1024        Максимальное число  необходимых VC           Истина
min_vc         32          Минимальное число поддерживаемых VC          Истина
rv_buf4k_min 0x30        Мин. число зарез. буферов приема по 4 Кб     Истина
interface_type 0           Интерфейс Sonet или SDH                      Истина
adapter_clock  1           Предоставление таймера SONET                 Истина
uni_vers       auto_detect НД                                           Истина

Ниже в качестве примера приведены параметры адаптера Micro 10/100 Ethernet, выданные командой lsattr -E -l ent0. Здесь оба значения tx_que_size и rx_que_size равны 256.

# lsattr -E -l ent0
bus_intr_lvl  11              Уровень прерываний шины            Ложь
intr_priority  3              Приоритет прерывания               Ложь
dma_bus_mem   0x7a0000        Адрес памяти шины использ. для DMA Ложь
bus_io_addr   0x2000          Адрес ввода-вывода шины            Ложь
dma_lvl       7               Уровень арбитража DMA              Ложь
tx_que_size 256             Размер очереди передачи            Истина
rx_que_size 256             Размер очереди приема              Истина
use_alt_addr  нет             Разрешить альтерн. адрес ETHERNET  Истина
alt_addr      0x              Альтернативный адрес ETHERNET      Истина
media_speed   100_Full_Duplex Быстродействие линии связи         Истина
ip_gap        96              Интервал между пакетами            Истина

Изменение параметров

Ниже перечислены некоторые из параметров, которые могут быть изменены пользователем:

Для изменения значений параметров выполните следующие действия:

  1. Отключите интерфейс с помощью следующей команды:

    # ifconfig en0 detach
    

    где en0 задает имя адаптера.

  2. Просмотрите параметры адаптера с помощью SMIT. Выберите Устройства -> Средства связи -> тип адаптера -> Изменить...
  3. Поместите курсор на поле, значение в котором нужно изменить, и нажмите F4. Появится диапазон или список допустимых значений.
  4. Выберите нужное значение и нажмите Enter. Значение параметра будет обновлено в базе данных ODM.
  5. Подключите адаптер с помощью следующей команды:

    # ifconfig en0 имя-хоста up
    

Кроме того, значения параметров можно изменить с помощью следующей команды:

# chdev -l [имя-интерфейса] -a [имя-атрибута]=значение

Например, для того чтобы присвоить параметру tx_que_size интерфейса en0 значение 128, нужно вызвать приведенную ниже последовательность команд. Обратите внимание, что этот драйвер поддерживает очереди передачи только четырех размеров, поэтому для изменения этого параметра удобнее воспользоваться командой SMIT.

# ifconfig en0 detach
# chdev -l ent0 -a tx_que_size=128
# ifconfig en0 имя-хоста up

Настройка адаптеров MCA и PCI

Ниже описаны различные параметры адаптера. Указанные параметры поддерживаются в операционной системе AIX 4.3.1. Это описание позволяет составить более четкое представление об имеющихся параметрах. Кроме того, оно может применяться в том случае, если вы не можете просмотреть список параметров в системе.

Имена параметров, значения по умолчанию и списки допустимых значений были получены из базы данных ODM. В качестве комментария приведен вывод команды lsattr -E -l имя-интерфейса.

В поле Примечания указана дополнительная информация.

Адаптер MCA

Код:  2980
Высокопроизводительный LAN адаптер Ethernet (8ef5)
 
Параметр      По умолч.Диапазон  Комментарий                Примечания
------------- -------- -------- --------------------------- -----------------
xmt_que_size   512     20-2048   размер очереди передачи   программная очередь передачи
rec_que_size   30      20-150    размер очереди приема     Cм. примечание 1
rec_pool_size  37      16-64     разм. пула буферов приема На адаптере
 
 
Код: 2992
Высокопроизводительный LAN адаптер Ethernet (8f95)
 
Параметр      По умолч. Диапазон  Комментарий         Примечания
------------- --------- -------- -------------------  ----------
xmt_que_size   512      20-2048  разм. очер. передачи  программная очередь
 
 
Код: 2994
Адаптер Ethernet TX MCA 10/100 Мбит/с IBM (8f62)
 
Параметр      По умолч.   Диапазон          Комментарий         Примечания
------------- -------- ----------------  --------------------- -----------
tx_que_size   64       16,32,64,128,256  разм.очереди передачи аппаратная очередь
rx_que size   32       16,32,64,128,256  разм.очереди приема   аппаратная очередь
 
 
Код: 2970
Высокопроизводительный  адаптер Token-Ring (8fc8)
 
Параметр      По умолч. Диапазон   Комментарий            Примечания
------------- -------- --------  ---------------------  ------------
xmt_que_size  99       32-2048   разм очереди передачи  программная очередь
rec_que_size  30       20-150    размер очереди приема  См. примечание 1
 
 
Код: 2972
Высокопроизводительный  адаптер Token-Ring (8fa2)
 
Параметр      По умолч. Диапазон   Комментарий                 Примечания
------------- -------- -------- ----------------------------  ----------
xmt_que_size  512      32-2048  размер очереди передачи       программная очередь
rx_que_size   32       32-160   размер очереди приема         аппаратная очередь
 
 
Код: 2727
FDDI Primary Card, Single Ring Fiber
 
Параметр      По умолч. Диапазон  Комментарий                    Примечания
------------- -------- --------  ------------------------------ --------------------
tx_que_size   512      3-2048    Размер очер. передачи (в mbuf)
rcv_que_size  30       20-150    Очередь приема                 См. примечание 1
 
 
Код: 2984
Адаптер оптоволоконного ATM 100 Мбит/с (8f7f)
 
Параметр      По умолч.   Диапазон          Комментарий         Примечания
--------------- ----- --------- -------------------------- -----
sw_queue         512       0-2048                          Длина программной очереди передачи        Программная очередь
dma_bus_width   0x1000000 0x800000-0x40000000,0x100000  Объем памяти для DMA   См. примечание 3
max_sml_bufs    50    40-400    Макс. число мал.буф.ATM    Макс. число буферов по 256 байт
max_med_bufs     100       40-1000                         Максимальное число mbuf ATM               Макс. колич. буферов по 4 Кб
max_lrg_bufs    300   75-1000   Макс. число бол. буф. ATM  Макс. число буферов по 8 Кб  См. прим. 2
max_hug_bufs     50        0-400                           Макс. число крупных mbuf ATM              Макс. колич. буферов по 16 Кб
max_spec_bufs   4     0-400     Макс. число mbuf ATM MTB   Макс. размер max_spec_buf
spec_buf_size   64    32-1024   Макс. блок передачи (MTB) в Кб
sml_highwater   20    10-200    Мин. число мал. буф. ATM   Мин. число буферов по 256 байт
med_highwater   30    20-300    Мин. число ср. буф. ATM    Мин. число буферов по 4 Кб
lrg_highwater   70    65-400    Мин. число бол. буф. ATM   Мин. число буферов по 8 Кб
hug_highwater   10    4-300     Мин. число оч.бол.буф. ATM Мин. число буферов по 16 Кб
spec_highwater  20    0-300     Мин. число mbuf ATM MTB    Мин. число буферов по 64 Кб
best_peak_rate  1500  1-155000  Макс. скорость передачи по виртуальному контуру
 
 
Код: 2989
Адаптер оптоволоконного ATM 155 Мбит/с (8f67)
 
Параметр      По умолч. Диапазон  Комментарий Примечания
------------- --------  --------  ---------- -------
 (те же параметры, что и для адаптера ATM 100, описанного выше)

Примечания:

  1. Программная очередь передачи применяется только для совместимости с приложениями операционной системы версии 3.2.х, которые напрямую считывают пакеты из очереди драйвера с помощью интерфейса драйвера сетевого устройства. Этот параметр ограничивает число пакетов для приложений, помещаемых в очередь. Он применяется только в том случае, если установлен пакет bos.compat.

    Эта очередь не применяется стандартным стеком протоколов TCP/IP.

  2. MCA ATM: Для приема данных также применяются большие буферы (размером 8 Кб). Функция приема данных применяет только такие буферы, поэтому если их число недостаточно, то скорость получения данных будет низкой.

    Все остальные размеры поддерживаются только буферами передачи.

  3. MCA ATM: Для того чтобы увеличить общее число буферов, может потребоваться изменить параметр dma_bus_width (= 0x1000000). Общим объемом памяти буферов ATM управляет параметр объема памяти DMA. Если при увеличении числа буферов или верхнего ограничения возникла ошибка, увеличьте значение этого параметра.

Адаптеры PCI

Код: 2985
Адаптер PCI Ethernet IBM (22100020)
 
Параметр      По умолч. Диапазон         Комментарий         Примечания
------------- -------- ----------------- ------------------- ---------
tx_que_size   64       16,32,64,128,256  разм.очер. передачи Аппаратные очереди
rx_que size   32       16,32,64,128,256  разм.очер. приема   Аппаратные очереди
 
 
Код: 2968
Адаптер Ethernet PCI 10/100 Мбит/с IBM (23100020)
 
Параметр      По умолч.   Диапазон         Комментарий           Примечания
---------------- ------- ---------------- --------------------- --------------------
tx_que_size      256     16,32,64,128,256  разм.очер. передачи   Аппаратная очередь Примечание 1
rx_que size      256     16,32,64,128,256  разм.очер. приема     Аппаратная очередь Примечание 2
rxbuf_pool_size  384     16-2048          число буферов приема в  Буферы для приема данных
                                          пуле                  Примечание 3
 
 
Код: 2969
Адаптер Gigabit Ethernet-SX PCI (14100401)
 
Параметр      По умолч.   Диапазон          Комментарий         Примечания
------------- ------- -------- ----------------------------------- ---------
tx_que_size    512       512-2048     Размер программной очереди передачи         Программная очередь
rx_que_size    512       512          Размер очереди приема                       Аппаратная очередь
receive_proc  6       0-128    Минимальное число дескрипторов буфера приема
 
 
Код: 2986
3Com 3C905-TX-IBM Fast EtherLink XL NIC
 
Параметр      По умолч.   Диапазон          Комментарий         Примечания
-------------- -------- ------ ---------------------------- ----------
tx_wait_q_size 32       4-128        Размер очереди передачи драйвера             Аппаратные очереди
rx_wait_q_size 32       4-128        Размер очереди приема драйвера               Аппаратные очереди
 
 
Код: 2742
Адаптер SysKonnect PCI FDDI (48110040)
 
Параметр      По умолч.   Диапазон          Комментарий         Примечания
------------- -------- -------- ------------------- ---------------
tx_queue_size 30       3-250          Размер очереди передачи                     Программная очередь
RX_buffer_cnt 42       1-128          Число полученных кадров                     Пул буферов приема
 
 
Код: 2979
Адаптер Token-Ring PCI IBM (14101800)
 
Параметр      По умолч.   Диапазон          Комментарий         Примечания
------------- -------- ------- --------------------------- --------
xmt_que_size  96        32-2048       Размер очереди передачи                     Программная очередь
rx_que_size   32       32-160         Размер очереди приема                       Аппаратная очередь
 
 
Код: 2979
Адаптер Token-Ring PCI IBM (14103e00)
 
Параметр      По умолч.   Диапазон          Комментарий         Примечания
------------- -------- -------- -------------------- --------
xmt_que_size  512      32-2048        Размер очереди передачи                     Программная очередь
rx_que_size   64       32-512         Размер очереди приема                       Аппаратная очередь
 
 
Код: 2988
Адаптер ATM 155 Мбит/с IBM PCI (14107c00)
 
Параметр      По умолч.   Диапазон          Комментарий         Примечания
------------- --------- ------------ -------------------------------- --------
sw_txq_size   100       0-4096        Размер очереди передачи    Программная очередь
rv_buf4k_min  48 (0x30) 0-512 (x200)  Мин. число зарезерв. буферов приема по 4 Кб

Примечания для адаптера IBM 10/100 Мб/с Ethernet PCI:

  1. В версиях AIX младше 4.3.2 значение по умолчанию параметра tx_queue_size равно 64.
  2. В версиях AIX младше 4.3.2 значение по умолчанию параметра rx_que_size равно 32.
  3. В AIX 4.3.2 и выше применяется новый параметр драйвера, задающий число буферов, выделенных для приема пакетов.

Применение нитей на уровне адаптеров LAN

По умолчанию драйверы напрямую вызывают уровень IP, который в режиме прерывания обращается к стеку протоколов для вызова уровня сокета. За счет этого сокращается число команд, но возрастает время обработки прерывания. В многопроцессорной системе один процессор может не справиться с обработкой принимаемых пакетов через адаптер с высокой скоростью передачи данных. В случае применения нитей драйвер помещает принятый пакет в очередь нити, а затем нить вызывает уровень IP, TCP или сокета. Такая нить может выполняться на других менее загруженных процессорах. В некоторых случаях применение нитей позволяет повысить пропускную способность системы.

Примечание: Эта функция не поддерживается в однопроцессорных системах, поскольку ее применение в таких системах приведет к снижению производительности за счет увеличения числа команд.

Эта функция может применяться адаптерами LAN при приеме данных. Ее можно включить для интерфейса с помощью команды ifconfig (ifconfigинтерфейс thread или ifconfig интерфейс имя-хоста up thread).

Для выключения этой функции вызовите команду ifconfig интерфейс -thread.

Ниже приведены некоторые рекомендации по применению нитей:

Настройка максимального размера сегмента TCP

Протокол TCP позволяет согласовать значение максимального размера сегмента (MSS) обоим участникам соединения. Каждая сторона указывает предлагаемый размер MSS в поле ОПЦИИ заголовка пакета TCP. Будет принято наименьшее из двух значений.

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

При выборе значения MSS, предлагаемого уровнем TCP при настройке соединения, учитывается то, в какой сети расположена целевая система: в той же физической сети (в этом случае у систем совпадает адрес сети) или в другой сети (удаленной сети).

Локальная сеть

Если целевая система подключена к той же локальной сети, то уровень TCP выбирает значение MSS с учетом текущего значения MTU, установленного для сетевого интерфейса:

TCP MSS = MTU - размер заголовка TCP - размер заголовка IP.

Поскольку это максимальный размер MSS, при котором уровень IP не выполняет фрагментацию пакета, это значение является оптимальным. Следовательно, в локальных сетях изменять значение MSS не нужно.

Удаленная сеть

Если целевая система расположена в удаленной сети, то уровень TCP данной операционной системы предлагает установить MSS, равный 512 байт. Это значение выбирается исходя из того, что все IP-маршрутизаторы должны поддерживать MTU не меньше 576 байт.

Оптимальное значение MSS при передаче данных в удаленную систему выбирается исходя из наименьшего MTU, поддерживаемого всеми промежуточными сетями на пути между конечными системами. Это динамическая величина и ее можно вычислить только на основе информации о маршруте блока передачи. По умолчанию протокол TCP не поддерживает вычисление MTU маршрута, поэтому для MSS предлагается установить такое маленькое значение. Однако вы можете включить вычисление MTU маршрута TCP с помощью следующей команды:

# no -o tcp_pmtu_discover=1

Функция вычисления MTU маршрута поддерживается в AIX, начиная с версии 4.2.1, однако по умолчанию она выключена. В AIX 4.3.3 и выше эта функция по умолчанию включена.

Побочным эффектом при этом является увеличение объема таблицы маршрутизации (для каждого активного соединения TCP добавляется одна новая запись). С помощью команды no присвойте параметру route_expire ненулевое значение, для того чтобы все неиспользуемые записи удалялись из таблицы по истечении интервала route_expire.

Хотя при работе в сети Internet значение по умолчанию оправданно низкое, оно слишком мало, если вы работаете во внутренней корпоративной сети. Поскольку в этом случае можно узнать, какие значения MTU применяются в промежуточных физических сетях, администратор может вычислить минимальное значение MTU и оптимальный размер MSS. В операционной системе предусмотрено несколько средств для изменения значения MSS, применяемого протоколом TCP. Необходимо, чтобы эти функции поддерживали и исходный, и целевой хост. В неоднородных сетях нужно выбрать ту функцию, которая есть в обеих системах.

Статические маршруты

Для того чтобы переопределить значение по умолчанию для параметра MSS (512 байт), можно задать статический маршрут к удаленной сети. Размер MTU для этого маршрута задается в опции -mtu команды route. Укажите в этом параметре фактический минимальный MTU маршрута. На его основе будет автоматически вычислен оптимальный размер MSS.

Такой способ выбора оптимального MSS для конкретных маршрутов между сетями рекомендуется применять в среде с постоянной конфигурацией. Ниже перечислены недостатки такого подхода:

Применение опции tcp_mssdflt команды no

С помощью этого параметра можно задать максимальный размер пакета для соединений с удаленными сетями. Если в системе есть несколько адаптеров с различными значениями MTU, то это значение будет действовать для всех адаптеров. Значение по умолчанию (512), которое применяется протоколом TCP при подключении к удаленным сетям, можно изменить с помощью команды no. В этом случае новое значение MSS будет установлено для всех соединений с удаленными сетями.

Для того чтобы переопределить значение MSS по умолчанию, укажите значение, равное минимальному из значений MTU минус 40 (вычитается стандартный размер заголовков TCP и IP).

При работе в локальной сети значение MSS имеет тот же смысл, что и значение MTU, за исключением того, что tcp_mssdflt определяет размер данных в пакете. Выбирая значение tcp_mssdflt, вычтите из значения MTU суммарный размер всех заголовков. В противном случае пакет будет разделен на два фрагмента. Подсчитайте значение MSS по следующей формуле:

MTU интерфейса - размер заголовка TCP - размер заголовка IP - размер заголовка rfc1323

Это равно:

MTU - 20 - 20 - 12 или MTU - 52

Если это значение будет равно (MTU - 52), то во всех возможных случаях будут отправляться полные пакеты.

Если размер MTU в сети превосходит значение по умолчанию, то вам не потребуется изменять MSS для этой сети. Однако у такого способа вычисления MSS есть и некоторые недостатки:

Создание подсетей и опция subnetsarelocal команды no

Подсетями называются физические сети, которым присвоен общий адрес сети. С помощью опции subnetsarelocal команды no можно установить системную переменную, указывающую, каким образом должны рассматриваться подсети: как локальные или как удаленные сети. Если будет вызвана команда no -o subnetsarelocal=1 (такое значение применяется по умолчанию), то хост A из подсети 1 будет считать, что хост B из подсети 2 расположен в той же физической сети.

В результате при установлении соединения между хостами A и B значение MSS будет выбираться исходя из того, что они расположены в одной сети. Каждый из хостов предложит значение MSS, вычисленное на основании MTU своего сетевого интерфейса, и будет пытаться установить оптимальное значение MSS.

Ниже перечислены преимущества такого подхода:

У такого подхода есть и некоторые недостатки:

Настройка буфера сокета UDP

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

udp_sendspace

Присвойте этому параметру значение 65536. Применять большие значения не рекомендуется. Поскольку UDP передает пакет без всякой обработки, а на уровне IP для размера пакета установлено ограничение в 65536 байт, пакеты большего размера могут быть отброшены на уровне IP. При необходимости протокол IP поделит дейтаграмму на пакеты меньшего размера с учетом значения MTU, установленного для интерфейса, через который будет отправлен пакет. Например, дейтаграмма размером 8 Кб будет разбита на уровне IP на пакеты размером 1500 байт, если она будет передана по сети Ethernet. Поскольку UDP не поддерживает средства управления потоком, все пакеты, полученные UDP, передаются на уровень IP (где они могут быть фрагментированы), а затем помещаются сразу в очередь передачи драйвера устройства.

udp_recvspace

В целевой системе полученная дейтаграмма (или ее фрагмент, если размер дейтаграммы больше MTU) помещается в буфер драйвера устройства. Обычно размер этого буфера достаточен для хранения максимального пакета, который может быть получен через данное устройство.

Значение udp_recvspace сложнее выбрать, так как оно зависит от типа сетевого адаптера, параметров UDP и числа дейтаграмм, находящихся в очереди сокета. Рекомендуется, чтобы значение udp_recvspace было несколько больше, чем требуется, потому что если размер буфера будет недостаточен для размещения пакета, то пакет будет отброшен.

Например, в Ethernet размер буфера приема обычно составляет порядка 2 Кб. Даже если будет получен пакет, размер которого совпадает с размером MTU (1500 байт), то он займет только 73 процентов буфера. Фрагменты будут накапливаться на уровне IP до тех пор, пока не будет получена вся дейтаграмма UDP. После этого она будет передана на уровень UDP. UDP поместит полученную дейтаграмму в буфер сокета получателя. Однако если объем памяти, выделенный для буфера сокета, превышает udp_recvspace, то вся дейтаграмма будет отброшена. В этом случае будет увеличено значение счетчика число отброшенных пакетов из-за переполнения буфера сокета, значение которого можно узнать с помощью команды netstat -s.

При настройке udp_recvspace следует учитывать, что подсистема связи подсчитывает объем памяти, занятый буферами, а не их содержимым. В предыдущем примере дейтаграмма размером 8 Кб будет разбита на 6 пакетов, для размещения которых потребуется 6 буферов приема. В сети Ethernet размер буфера составляет 2048 байт. Следовательно, общий объем памяти, занятый буферами сокета, содержащими дейтаграмму размером 8 Кб, составляет

6*2048=12288 байт

Следовательно, значение udp_recvspace нужно выбирать и с учетом размера буферов приема. Этот размер зависит от размера дейтаграммы и типа драйвера устройства. Для размещения дейтаграммы размером 64 байта потребуется буфер размером 2 Кб.

Кроме того, нужно учесть число дейтаграмм, которые могут быть помещены в очередь сокета. Например, сервер NFS получает пакеты UDP от всех клиентов через стандартный сокет. Если размер очереди сокета может достигать 30 пакетов, и размер дейтаграммы NFS составляет 8 Кб, то параметру udp_recvspace нужно присвоить значение 30 * 12288 = 368640. В NFS версии 3 поддерживаются дейтаграммы размером до 32 Кб.

Вначале параметру udp_recvspace рекомендуется присвоить значение, в десять раз превышающее значение udp_sendspace, так как UDP не может отправить пакет приложению до тех пор, пока не был получен предыдущий пакет. Кроме того, хост может получить пакеты сразу от нескольких узлов сети. Такое значение обеспечивает некоторый запас памяти: пакеты начнут отбрасываться, только когда длина очереди достигнет 10 пакетов. Для приложений, выполняющих большое число параллельных операций и применяющих UDP, это значение должно быть еще больше.

Примечание: Значение sb_max, устанавливающее ограничение на размер всех буферов сокета, должно быть как минимум в два раза больше размера максимального из буферов приема и передачи TCP и UDP.

Настройка буфера сокета TCP

В приведенной ниже таблице перечислены минимальные рекомендуемые значения для размеров буферов сокета в зависимости от типа адаптера и размера MTU. Обратите внимание, что выбор слишком больших значений может привести к снижению производительности. Кроме того, если размеры буферов приема и передачи TCP выбраны неправильно, то может возникнуть ошибка Nagle Black hole, приводящая к резкому снижению пропускной способности адаптеров с большими значениями MTU, например, адаптеров ATM.

Устройство Скорость передачи данных MTU tcp_sendspace tcp_recvspace sb_max rfc1323
Ethernet 10 Мбит/с 1500 16384 16384 32768 0
Ethernet 100 Мбит/с 1500 16384 16384 32768 0
Ethernet Гигабитный 1500 65535 16384 131072 0
Ethernet Гигабитный 9000 131072 65535 (Примечание 1) 262144 0
Ethernet Гигабитный 9000 131072 92160 (Примечание 1) 262144 1
ATM 155 Мбит/с 1500 16384 16384 131072 0
ATM 155 Мбит/с 9180 65535 65535 (Примечание 2) 131072 0
ATM 155 Мбит/с 65527 655360 655360 (Примечание 3) 1310720 1
FDDI 100 Мбит/с 4352 45056 45056 90012 0

Примечание 1:
При работе с гигабитным Ethernet, в котором размер MTU составляет 9000 байт, производительность при работе с обоими наборами буферов одинаковая.

Примечание 2:
При некоторых размерах буферов приема и передачи TCP пропускная способность очень маленькая (около 1 Мбит/с или меньше). Эта проблема подробно описана в публикациях How a Large ATM MTU Causes Deadlocks in TCP Data Transfers , IEEE/ACM Transactions on Networking, том 3, номер 4 (август 1995 года) и TCP Buffering and Performance over an ATM Network, Internetworking: Research and Experience, том 6 1-13, 1995.
Для того чтобы эта проблема не возникала, размер tcp_sendspace должен как минимум в три раза превосходить размер MTU, либо должен быть не меньше tcp_recvspace целевой системы. Например, если в сети ATM с MTU=9180 параметр tcp_sendspace будет равен 16384, а параметр tcp_recvspace - 32768 или 65536, то скорость передачи данных будет очень низкой. Однако если оба значения будут равны 65536, то пропускная способность станет очень высокой. Если оба значения будут равны 16384, то пропускная способность будет средней (в этом случае размер буфера передачи равен размеру буфера приема).

Примечание 3:
Размер окна TCP должен быть не более чем 16-разрядным значением. Другими словами, максимальный размер окна может составлять 65536 байт. В результате при работе с адаптерами с большими значениями MTU (32 Кб или 64 Кб) эффективность передачи данных по соединению TCP будет очень низкой. Например, если размер MTU устройства равен 64 Кб, и параметр tcp_recvspace равен 64 Кб, то окно будет закрыто после отправки первого из пакетов. Следующий пакет будет отправлен только после получения подтверждения от целевой системы. Существует два способа решения этой проблемы:

 
Первый из них заключается в применении rfc1323. Эта опция расширяет возможности TCP, разрешая применять окно, размер которого превышает 64 Кб. В этом случае можно установить большое значение tcp_recvspace, например, в десять раз превосходящее размер MTU. Это позволит TCP передавать данные в виде потока, что приведет к повышению производительности.

 
Второй способ заключается в уменьшении размера MTU адаптера. Например, с помощью команды ifconfig at0 mtu 16384 можно установить размер MTU в сети ATM равным 16 Кб. В результате будет установлен MSS меньшего размера. Если размер MTU равен 16 Кб, а размер окна - 64 Кб, то TCP может отправить 4 пакета, не дожидаясь получения подтверждения.

Ниже приведены некоторые рекомендации:

Примерами приложений TCP, производительность которых может значительно повыситься после настройки параметров tcp_sendspace и tcp_recvspace, могут служить команды ftp и rcp.

tcp_sendspace

Размер буфера передачи TCP ограничивает объем данных, после отправки которых приложение переводится в состояние ожидания. Данные приложения размещаются в буфере передачи сокета TCP перед их отправкой на уровни, расположенные ниже уровня сокета и уровня TCP. При этом они хранятся в структурах mbuf и кластерах в области памяти ядра. Размер буфера по умолчанию определяется параметром tcp_sendspace. Его можно переопределить с помощью функции setsockopt().

Если объем данных, отправляемых приложением, меньше размера буфера передачи и максимального размера сегмента, и опция TCP_NODELAY не установлена, то TCP задержит отправку данных (но не более чем на 200 мс), дожидаясь, пока не будет заполнен буфер передачи или пока размер данных не станет больше максимального размера сегмента.

Если опция TCP_NODELAY установлена, то данные будут отправлены немедленно после их получения от приложения (эту опцию рекомендуется устанавливать для приложений, работающих по схеме "вопрос-ответ"). Если размер буфера передачи меньше максимального размера сегмента или равен ему (в сетях ATM и SP Switch размер MTU может составлять 64 Кб), то данные приложения будут отправлены немедленно, но приложению придется дожидаться получения подтверждения перед отправкой следующего пакета (в результате данные не будут передаваться в виде потока и производительность понизится).

Примечание: Для того чтобы пакеты передавались в виде непрерывного потока, увеличьте размер буфера передачи сокета так, чтобы он был больше MTU (в качестве начального рекомендуется выбрать значение, в 3-10 раз превышающее размер MTU).

Если выполняется ввод-вывод без блокировки приложения (для сокета установлена опция O_NDELAY или O_NONBLOCK), то в случае переполнения буфера передачи приложению будет отправлен код ошибки EWOULDBLOCK/EAGAIN, однако оно не будет переведено в состояние ожидания. В приложении должен быть предусмотрен обработчик таких ошибок (рекомендуется, чтобы приложение на небольшое время переводилось в состояние ожидания, а затем повторяло попытку передачи данных).

В некоторых случаях после изменения размера буфера приема или передачи требуется перезапустить процесс inetd. Для этого нужно вызвать следующие команды:

# stopsrc -s inetd; startsrc -s inetd

tcp_recvspace

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

rfc1323

Максимальный размер окна TCP по умолчанию составляет 65536 байт (64 Кб), однако если опция rfc1323 равна 1, то размер окна может превосходить это значение. Если вы планируете, что значение параметра tcp_recvspace будет больше 65536, то установите опцию rfc1323=1 в обеих конечных системах. Если хотя бы в одной из систем опция rfc1323 не будет включена, то фактически значение tcp_recvspace будет равно 65536.

При передаче данных через адаптер с большим значением MTU (32 или 64 Кб), то эффективность передачи данных не будет оптимальной. Это связано с тем, что после отправки одного или нескольких пакетов отправитель вынужден будет дожидаться получения подтверждения о доставке этих пакетов. Если вы включите опцию rfc1323 с помощью команды no -o rfc1323=1, то для размера окна TCP можно будет установить любое значение вплоть до 4 Гб. Однако производительность может резко снизиться, если применяется адаптер с MTU больше либо равным 64 Кб, а буфер приема может хранить не более 64 Кб данных. Если получатель не поддерживает rfc1323, то для повышения производительности рекомендуется уменьшить размер MTU.

Если параметр rfc1323 равен 1, то можно значительно увеличить значение параметра tcp_recvspace, например, присвоить ему значение, в 10 раз превосходящее значение MTU.

sb_max

Этот параметр указывает, какой объем памяти был выделен для буферов сокета отправителя или сокета получателя. Это значение вычисляется исходя из размера буфера, а не размера его содержимого.

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

Поскольку существует много различных драйверов устройств, значение sb_max должно быть намного больше максимального размера буфера сокета TCP или UDP. После того как общее число структур mbuf и кластеров сокета достигает ограничения sb_max, данные перестают помещаться в очередь сокета до тех пор, пока приложение не считает данные.

Примечание: Если был выбран размер буфера больше 64 Кб, то увеличьте значение sb_max, которое устанавливает ограничение на размер всех буферов сокета.

Рекомендуется, чтобы это значение в два раза превосходило размер самого большого буфера приема TCP или UDP.

Параметры сетевых интерфейсов (ISNO)

В AIX 4.3.3 появился набор параметров (ISNO), позволяющих пользователю изменить свойства отдельного интерфейса IP, влияющие на его производительность. Значения этих параметров переопределяют значения параметров системы, заданных с помощью команды no. Применение таких параметров можно разрешить или запретить с помощью опции use_isno команды no. По умолчанию параметры отдельных интерфейсов настраивать разрешено. Опция, запрещающая применение ISNO, может применяться системным администратором в качестве средства диагностики для обнаружения ошибок в конфигурации.

Обратите внимание, что значения параметров ISNO, установленные для сокета, можно узнать (то есть считать с помощью функции getsockopt()) только после установления соединения TCP. Интерфейс, с которым будет связан сокет, выбирается только при установлении соединения, поэтому до этого момента для сокета указываются значения по умолчанию, установленные с помощью команды no. После установления соединения вступают в силу значения параметров ISNO.

К параметрам сетевого интерфейса было добавлено еще пять параметров:

Значения этих параметров переопределяют значения соответствующих опций команды no, действующих для всей системы. Эти параметры поддерживаются всеми основными интерфейсами TCP/IP (Token-Ring, FDDI, 10/100 Ethernet и гигабитным Ethernet), за исключением интерфейса IP css # коммутатора SP. Пользователи коммутатора SP могут настроить необходимые параметры на уровне системы с помощью команды no, а затем изменить значения для других сетевых интерфейсов с помощью параметров ISNO. ATM поддерживается в AIX 4.3.3 (после установки обновления) и более старших версиях.

Данные параметры устанавливаются для интерфейса TCP/IP (например, en0 или tr0), а не для сетевого адаптера (ent0 или tok0).

Параметры ISNO нельзя просмотреть и изменить с помощью SMIT. Ниже перечислены команды, с помощью которых можно убедиться, что применение этих параметров разрешено на уровне системы и интерфейса, и изменить значения параметров.

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

На уровне IP предусмотрен только параметр ipqmaxlen, который задает размер очереди приема IP (за дополнительной информацией обратитесь к разделу Уровень IP). В AIX версии 4 интерфейсы, как правило, не применяют очередь данных. Если пакеты поступают очень быстро, то очередь приема IP может переполниться. Для того чтобы узнать число переполнений, вызовите команду netstat -s или netstat -p ip (поле число переполнений ipintrq).

Если значение больше нуля, значит очередь переполнялась. В этом случае установите максимальный размер очереди с помощью команды no. Например:

# no -o ipqmaxlen=100

В данном примере очередь может содержать до 100 пакетов. Оптимальное значение нужно выбрать исходя из максимальной скорости поступления пакетов. Если такой информации нет, увеличьте длину очереди исходя из числа переполнений. При увеличении длины очереди дополнительная память не расходуется. Однако увеличение размера очереди может привести к увеличению времени, которое затрачивается на обработку прерываний, так как уровню IP потребуется обработать больше пакетов из очереди. Это может замедлить работу других процессов, которым также требуется CPU. Таким образом, вы можете сократить число отбрасываемых пакетов за счет уменьшения доли процессорного времени, доступного другим процессам. Если другие приложения также должны выполняться довольно быстро, то рекомендуется увеличивать значение ipqmaxlen путем добавления небольших приращений.

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

Протокол Ethernet участвует в выборе MTU по алгоритму "наименьший общий знаменатель". Если среда состоит из сетей Ethernet и других LAN, которые активно обмениваются данными, то рекомендуется во всех сетях установить MTU равным 1500 байт, чтобы избежать фрагментации пакетов, поступающих в сеть Ethernet. Ниже приведены некоторые рекомендации:

Рекомендации по настройке производительности Token-Ring (4 Мб)

Значение MTU, применяемое по умолчанию, (1492 байт) подходит для сетей Token-Ring, которые взаимодействуют с сетями Ethernet или неоднородными сетями, размер MTU которых неизвестен. Ниже приведены некоторые рекомендации:

Рекомендации по настройке производительности Token-Ring (16 Мб)

Значение MTU, применяемое по умолчанию, (1492 байт) подходит для сетей Token-Ring, которые взаимодействуют с сетями Ethernet или неоднородными сетями, размер MTU которых неизвестен. Ниже приведены некоторые рекомендации:

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

Несмотря на довольно маленький MTU, производительность этой высокоскоростной среды остается высокой за счет значительного размера буфера сокета. Ниже приведены некоторые рекомендации:

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

Ниже приведены некоторые рекомендации:

Рекомендации по повышению производительности SOCC

Ниже приведены некоторые рекомендации:

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

Ниже приведены некоторые рекомендации:


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