Оптимальные значения параметров связи зависят от типа LAN, особенностей операций ввода-вывода главной системы и прикладной программы. В следующих разделах описаны основные принципы настройки соединений и приведены особые рекомендации для различных типов LAN.
При настройке соединения может преследоваться одна из двух целей:
повысить его пропускную способность или сократить расход памяти.
Некоторые из приведенных рекомендаций относятся только к одной из этих задач,
другие же - универсальны. Ниже указан рекомендуемый размер блока
приложения для различных адаптеров:
Имя устройства | Размер блока приложения |
Ethernet | Несколько блоков по 4096 Кб |
Token-Ring (4 Мб) | Несколько блоков по 4096 Кб |
Token-Ring (16 Мб) | Несколько блоков по 4096 Кб |
FDDI (tcp) | Несколько блоков по 4096 Кб |
SOCC (tcp) | 28672 байт |
HIPPI | 65536 байт |
ATM | Несколько блоков по 4096 Кб |
Ниже приведены некоторые рекомендации по повышению пропускной способности:
Ниже приведены некоторые рекомендации:
(общий размер нескольких блоков MTU за исключением 28 байт для стандартных заголовков IP и UDP).
Ниже приведены некоторые рекомендации:
Для минимизации требований к памяти воспользуйтесь следующими рекомендациями:
или
Если приложения применяли протокол TCP, то это приводило к излишнему расходу памяти и потере времени. Протокол TCP отправляет пакеты данных, размер которых равен MTU. Если MTU в данной локальной сети больше 14976 байт, то нить отправки будет простаивать до тех пор, пока не будет достигнуто значение tcp_sendspace. Данные принудительно записываются только в том случае, если возникает тайм-аут получения подтверждения от получателя.
Большинство драйверов связи позволяют изменить параметры, связанные с приемом и отправкой данных. Обычно эти параметры задают ограничения на размер очередей приема и передачи, и, кроме того, могут задавать число и размер буферов и прочих ресурсов. Эти параметры ограничивают число буферов или пакетов в очереди передачи и число доступных буферов приема. Необходимо установить такой размер очередей, чтобы даже при максимальной нагрузке адаптер справлялся с обработкой пакетов, поступающих из системы или сети.
Ниже приведены некоторые рекомендации:
Некоторые драйверы устройств позволяют задать ограничение на размер очереди передачи. В зависимости от драйвера и адаптера, могут быть заданы ограничения на размер как аппаратной, так и программной очереди. У некоторых драйверов есть только аппаратная очередь, у других - как программная, так и аппаратная. Некоторые драйверы управляют аппаратной очередью самостоятельно и позволяют задать ограничение только для программной очереди. Обычно драйвер устройства помещает пакет непосредственно в аппаратную очередь адаптера. Если быстродействие 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).
Ниже описаны случаи, в которых рекомендуется увеличить значения параметров очередей приема и передачи:
С помощью нескольких утилит просмотра состояния можно просмотреть максимально возможную скорость передачи данных очередью и среднее число переполнений очереди. Для этого вызовите команду 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 Интервал между пакетами Истина
Ниже перечислены некоторые из параметров, которые могут быть изменены пользователем:
Драйвер может работать с очередью передачи, размер которой задан пользователем. Это будет очередь адаптера, а не ее расширение. Ее размер может быть равен 16, 32, 64, 128 или 256; по умолчанию он равен 256.
Поскольку можно изменить размер аппаратной очереди адаптера, драйвер не поддерживает программную очередь.
Драйвер позволяет изменять размер очереди приема. Это будет очередь адаптера, а не ее расширение. Ее размер может быть равен 16, 32, 64, 128 или 256; по умолчанию он равен 256.
Драйвер устройства разрешает изменить размер пула буферов приема. Это значение задает число структур mbuf, зарезервированных для приема пакетов. Минимальный размер буфера равен размеру очереди приема, а максимальный размер составляет 2 Кб (значение по умолчанию - 384).
Драйвер устройства поддерживает следующие скорости передачи данных: 10 (10 Мб/с, полудуплекс), 20 (10 Мб/с, дуплекс), 100 (100 Мб/с, полудуплекс), 200 (100 Мб/с, дуплекс), а также автоматический выбор скорости передачи данных в случае витой пары. При работе с портом AUI драйвер устройства поддерживает скорость передачи данных 10 (10 Мб/с, полудуплекс) и 20 (10 Мб/с, дуплекс). При работе с портом BNC поддерживается только значение 10 (10 Мб/с, полудуплекс). Это значение можно изменить. При работе с витой парой скорость передачи данных по умолчанию выбирается автоматически.
Для драйвера устройства предусмотрен параметр, разрешающий применять альтернативный сетевой адрес. Допустимы значения yes и no. Значение по умолчанию равно no. Если этот параметр равен yes, то применяется адрес, заданный в параметре alt_addr.
В качестве сетевого адреса драйвер устройства применяет аппаратный адрес адаптера или указанный альтернативный сетевой адрес. Если параметр use_alt_addr равен yes, то применяется альтернативный адрес. Можно указать любой адрес узла сети. Групповые адреса указывать нельзя.
Интервал между пакетами (IPG) определяет уровень активности адаптера в сети. Чем меньше это значение, тем активнее адаптер. Если в статистической информации о работе адаптера указано большое число конфликтов и задержек, то увеличьте это значение. Допустимы значения от 94 до 252, кратные четырем. Значение по умолчанию равно 96. Оно означает, что в сети со скоростью передачи данных 10 Мб/с значение IPG будет равно 9,6 мс, а в сети со скоростью передачи данных 100 Мб/с - 0,96 мс. В сети со скоростью передачи данных 10 Мб/с значение IPG умножается на 100 наносекунд, а в сети со скоростью передачи данных 100 Мб/с - на 10 наносекунд.
Для изменения значений параметров выполните следующие действия:
# ifconfig en0 detach
где en0 задает имя адаптера.
# 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
Ниже описаны различные параметры адаптера. Указанные параметры поддерживаются в операционной системе AIX 4.3.1. Это описание позволяет составить более четкое представление об имеющихся параметрах. Кроме того, оно может применяться в том случае, если вы не можете просмотреть список параметров в системе.
Имена параметров, значения по умолчанию и списки допустимых значений были получены из базы данных ODM. В качестве комментария приведен вывод команды lsattr -E -l имя-интерфейса.
В поле Примечания указана дополнительная информация.
Код: 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, описанного выше)
Примечания:
Эта очередь не применяется стандартным стеком протоколов TCP/IP.
Все остальные размеры поддерживаются только буферами передачи.
Код: 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:
По умолчанию драйверы напрямую вызывают уровень IP, который в режиме прерывания обращается к стеку протоколов для вызова уровня сокета. За счет этого сокращается число команд, но возрастает время обработки прерывания. В многопроцессорной системе один процессор может не справиться с обработкой принимаемых пакетов через адаптер с высокой скоростью передачи данных. В случае применения нитей драйвер помещает принятый пакет в очередь нити, а затем нить вызывает уровень IP, TCP или сокета. Такая нить может выполняться на других менее загруженных процессорах. В некоторых случаях применение нитей позволяет повысить пропускную способность системы.
Примечание: Эта функция не поддерживается в однопроцессорных системах, поскольку ее применение в таких системах приведет к снижению производительности за счет увеличения числа команд.
Эта функция может применяться адаптерами LAN при приеме данных. Ее можно включить для интерфейса с помощью команды ifconfig (ifconfigинтерфейс thread или ifconfig интерфейс имя-хоста up thread).
Для выключения этой функции вызовите команду ifconfig интерфейс -thread.
Ниже приведены некоторые рекомендации по применению нитей:
Нити работают эффективнее, если их очередь все время заполнена, и им не нужно переходить в состояние ожидания получения ввода. В этом случае будут сэкономлены ресурсы, затрачиваемые драйвером на активизацию нитей и их передачу на выполнение.
Протокол 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 для конкретных маршрутов между сетями рекомендуется применять в среде с постоянной конфигурацией. Ниже перечислены недостатки такого подхода:
С помощью этого параметра можно задать максимальный размер пакета для соединений с удаленными сетями. Если в системе есть несколько адаптеров с различными значениями 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 можно установить системную переменную, указывающую, каким образом должны рассматриваться подсети: как локальные или как удаленные сети. Если будет вызвана команда no -o subnetsarelocal=1 (такое значение применяется по умолчанию), то хост A из подсети 1 будет считать, что хост B из подсети 2 расположен в той же физической сети.
В результате при установлении соединения между хостами A и B значение MSS будет выбираться исходя из того, что они расположены в одной сети. Каждый из хостов предложит значение MSS, вычисленное на основании MTU своего сетевого интерфейса, и будет пытаться установить оптимальное значение MSS.
Ниже перечислены преимущества такого подхода:
У такого подхода есть и некоторые недостатки:
Рис. 9-3. Фрагментация при передаче данных между подсетями. На этом рисунке показан маршрут передачи данных от хоста A. Он проходит через сеть FDDI с MTU=4352, маршрутизатор 1 и сеть Ethernet с MTU=1500. После этого данные передаются через маршрутизатор 2 в сеть FDDI с MTU=4352, в которой расположен целевой хост B. Ниже описано, каким образом в данном случае выполняется фрагментация.
UDP - это протокол передачи дейтаграмм. При отправке дейтаграммы все сообщение должно быть скопировано в область памяти ядра за одну атомарную операцию. В связи с этим максимальный объем данных, который может быть отправлен UDP за одну операцию, ограничен размером буфера памяти, выделенного сокету UDP, а также максимальным размером пакета, установленным на уровне IP.
Присвойте этому параметру значение 65536. Применять большие значения не рекомендуется. Поскольку UDP передает пакет без всякой обработки, а на уровне IP для размера пакета установлено ограничение в 65536 байт, пакеты большего размера могут быть отброшены на уровне IP. При необходимости протокол IP поделит дейтаграмму на пакеты меньшего размера с учетом значения MTU, установленного для интерфейса, через который будет отправлен пакет. Например, дейтаграмма размером 8 Кб будет разбита на уровне IP на пакеты размером 1500 байт, если она будет передана по сети Ethernet. Поскольку UDP не поддерживает средства управления потоком, все пакеты, полученные UDP, передаются на уровень IP (где они могут быть фрагментированы), а затем помещаются сразу в очередь передачи драйвера устройства.
В целевой системе полученная дейтаграмма (или ее фрагмент, если размер дейтаграммы больше 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.
В приведенной ниже таблице перечислены минимальные рекомендуемые
значения для размеров буферов сокета в зависимости от типа адаптера и размера
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 |
Первый из них заключается в применении 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 ограничивает объем данных, после отправки которых приложение переводится в состояние ожидания. Данные приложения размещаются в буфере передачи сокета 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 ограничивает объем полученных данных, которые система может поместить в буфер перед тем, как они будут считаны приложением. В буфере приема TCP накапливаются полученные пакеты. После того как TCP считывает данные, он немедленно или с задержкой отправляет подтверждение о получении пакета (ACK). Протокол TCP пытается отправить подтверждение вместе с каким-либо пакетом данных, который требуется передать исходной системе. Если было получено сразу несколько пакетов, и все из них поместились в буфер приема, то TCP может отправить общее подтверждение для всех пакетов. Вместе с подтверждением TCP возвращает обновленный размер окна, сообщая отправителю, сколько места осталось в буфере приема. Если оставшегося места недостаточно для отправки данных, отправитель блокируется до тех пор, пока полученные данные не будут считаны целевым приложением. Следовательно, чем меньше размер буфера приема, тем чаще будет блокироваться отправитель. Размер буфера приема TCP можно задать с помощью функции setsockopt() или параметра tcp_recvspace.
Максимальный размер окна 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.
Этот параметр указывает, какой объем памяти был выделен для буферов сокета отправителя или сокета получателя. Это значение вычисляется исходя из размера буфера, а не размера его содержимого.
Если драйвер устройства поместит 100 байт данных в буфер размером 2048 байт, то система будет считать, что для буфера сокета выделено 2048 байт памяти. Обычно драйвер устройства применяет буфер приема, размер которого достаточен для хранения пакета максимального размера. При этом какой-то объем памяти буфера остается неиспользованным. Однако применение буферов меньшего размера приводит к увеличению процессорного времени, затрачиваемого на копирование данных в буферы.
Поскольку существует много различных драйверов устройств, значение sb_max должно быть намного больше максимального размера буфера сокета TCP или UDP. После того как общее число структур mbuf и кластеров сокета достигает ограничения sb_max, данные перестают помещаться в очередь сокета до тех пор, пока приложение не считает данные.
Примечание: Если был выбран размер буфера больше 64 Кб, то увеличьте значение sb_max, которое устанавливает ограничение на размер всех буферов сокета.Рекомендуется, чтобы это значение в два раза превосходило размер самого большого буфера приема TCP или UDP.
В 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. Ниже перечислены команды, с помощью которых можно убедиться, что применение этих параметров разрешено на уровне системы и интерфейса, и изменить значения параметров.
# no -a | grep isno use_isno = 1
# lsattr -E -l en0 -H атрибут значение описание изменяется польз. : rfc1323 НД Истина tcp_nodelay НД Истина tcp_sendspace НД Истина tcp_recvspace НД Истина tcp_mssdflt НД Истина
Например, для того чтобы присвоить параметрам tcp_recvspace и tcp_sendspace значение 64 Кб и включить опцию tcp_nodelay, вызовите одну из следующих команд:
# ifconfig en0 tcp_recvspace 65536 tcp_sendspace 65536 tcp_nodelay 1
или
# chdev -l en0 -a tcp_recvspace=65536 -a tcp_sendspace=65536 -a tcp_nodelay=1
# ifconfig en0 en0: flags=e080863<UP,BROADCAST,NOTRAILERS,RUNNING,SIMPLEX,MULTICAST,GROUPRT,64BIT> inet 9.19.161.100 netmask 0xffffff00 broadcast 9.19.161.255 tcp_sendspace 65536 tcp_recvspace 65536 tcp_nodelay 1
или
# lsattr -El en0 rfc1323 НД Истина tcp_nodelay 1 НД Истина tcp_sendspace 65536 НД Истина tcp_recvspace 65536 НД Истина tcp_mssdflt НД Истина
На уровне IP предусмотрен только параметр ipqmaxlen, который задает размер очереди приема IP (за дополнительной информацией обратитесь к разделу Уровень IP). В AIX версии 4 интерфейсы, как правило, не применяют очередь данных. Если пакеты поступают очень быстро, то очередь приема IP может переполниться. Для того чтобы узнать число переполнений, вызовите команду netstat -s или netstat -p ip (поле число переполнений ipintrq).
Если значение больше нуля, значит очередь переполнялась. В этом случае установите максимальный размер очереди с помощью команды no. Например:
# no -o ipqmaxlen=100
В данном примере очередь может содержать до 100 пакетов. Оптимальное значение нужно выбрать исходя из максимальной скорости поступления пакетов. Если такой информации нет, увеличьте длину очереди исходя из числа переполнений. При увеличении длины очереди дополнительная память не расходуется. Однако увеличение размера очереди может привести к увеличению времени, которое затрачивается на обработку прерываний, так как уровню IP потребуется обработать больше пакетов из очереди. Это может замедлить работу других процессов, которым также требуется CPU. Таким образом, вы можете сократить число отбрасываемых пакетов за счет уменьшения доли процессорного времени, доступного другим процессам. Если другие приложения также должны выполняться довольно быстро, то рекомендуется увеличивать значение ipqmaxlen путем добавления небольших приращений.
Протокол Ethernet участвует в выборе MTU по алгоритму "наименьший общий знаменатель". Если среда состоит из сетей Ethernet и других LAN, которые активно обмениваются данными, то рекомендуется во всех сетях установить MTU равным 1500 байт, чтобы избежать фрагментации пакетов, поступающих в сеть Ethernet. Ниже приведены некоторые рекомендации:
Значение MTU, применяемое по умолчанию, (1492 байт) подходит для сетей Token-Ring, которые взаимодействуют с сетями Ethernet или неоднородными сетями, размер MTU которых неизвестен. Ниже приведены некоторые рекомендации:
Значение MTU, применяемое по умолчанию, (1492 байт) подходит для сетей Token-Ring, которые взаимодействуют с сетями Ethernet или неоднородными сетями, размер MTU которых неизвестен. Ниже приведены некоторые рекомендации:
Несмотря на довольно маленький MTU, производительность этой высокоскоростной среды остается высокой за счет значительного размера буфера сокета. Ниже приведены некоторые рекомендации:
Ниже приведены некоторые рекомендации:
Ниже приведены некоторые рекомендации:
Ниже приведены некоторые рекомендации: