Мы — долго запрягаем, быстро ездим, и сильно тормозим.

FreeBSD
  настройка
  подсчёт трафика
  программы
  почтовые системы
  Шелезяки
  Мелочи
  Русификация
  COM-порт
  Монтирование образов
  dd
  burncd
  Консоль
  polling
  redirect_port
  wolf3d
  W.O.L.
  HDD->HDD
  bsdstats
  pdf в html
  monitord
  monit
  dvd в avi
  LAM
  Контроль провайдера
  pppd
  ru man
  geom_uzip
  colorize
  nettop
  немного о ssh
  установка по сети
  ClamAV mirror
  BlueTooth
  WiFi WPA
  iftop
  iPod
  2 CD -> 1 DVD
  ipcalc
  LACP и VLAN
  FFS из-под WinXP
  queues
  NFS & Win2k3
  Dynamic DNS
  ProFTPD+iconv
  deltup, xdelta, bdelta
  Приглашение csh/tcsh
  настрока bash
  Lan over Bluetooth
  pppoe
  метаданные exif
  dd : бэкапируем windows
  mozilla autoconfig
  Proxy Auto Configuration
  NNTP сервер
  Rinetd
  ISO DVD FreeBSD
  my disc1
  sftp+chroot
  SendXMPP
  APCUPSD
  Видеонаблюдение
  HDD(mbr) -> HDD(gpt)
  mc 4.6.2
  Динамический DNS
  axel
  LiveCD
  NAS на MPD
  Файловая система
  WWW
  Security
  system
  Games Servers
  X11
  Programming
Очумелые Ручки
OpenBSD
Cisco
www.lissyara.su —> статьи —> FreeBSD —> Мелочи —> polling

options DEVICE_POLLING в ядре

Автор: lissyara.


    Озадачился протестить - есть ли выигрыш от polling`a - вкратце - это такое хитрое управление сетевухой и прерываниями. В обычных условиях сетевуха генерит прерывание на каждый пришедший пакет - требуя чтоб ЦП выделил ресурсы на его обработку. Как итог, при большой нагрузке, сетевуха генерит несколько тыщ прерываний в секунду - а это не есть гуд, быстродействие машины снижается. Если же включить polling, то прерывания генерятся по таймеру (1000 в секунду, обычно), загрузка проца падает и быстродействие повышается. Естественно всё это не даром - повышается латентность сети, ибо в худшем случае на обработку пакета уходит на 1 миллисекунду (при HZ=1000) больше чем без этой функции. Если некритично - то можно юзать.
   Тестовая машина: 2x450MHz PIII (100x4.5, 512 кеша, Slot1), 2x128 ECC SDRAM (133MHz), 2x17Gb SCSI (Сами харды U160, но контроллер в маме тянет лишь 40Mb/s) сетевуха 3com - 100Mb/c. (фото мамы есть тут - я уже успел потыкаться в неё паяльничком :))) Для начала делаем то, чем будем тестировать - файл немерянного размера:
/usr/home/lissyara/>dd if=/dev/zero of=3gb_file bs=512 count=6291456
6291456+0 records in
6291456+0 records out
3221225472 bytes transferred in 82.756136 secs (38924310 bytes/sec)
/usr/home/lissyara/>ls -alh | grep _file
-rw-r--r--  1 lissyara  wheel   3,0G 30 мар 13:04 3gb_file
/usr/home/lissyara/>

Во, клёво. Трёхгиговый файл. (я его из интересу заархивировал - получилось 3 мегабайта. щас вот сижу, и так и подмывает кому-нить почтой отправить, обозвав типа "Голая Анна Курникова.bmp.gz" - чувак долго будет ждать пока разархивируется :))))
   Тестирование - собстно небыло задачи получить повторяемые результаты, или вообще соблюсти какие-то правила тестирования. Просто перекидывал файл на тестовую машину (именно на, в обратную строну изначально не тестировалось - тока в режиме SMP попробовал - из любопытства, но тут ждала неожиданность - на исходящий с машины траффик polling оказывал обратное влияние - при включении скорость падала, немного, но результат повторяемый... но и загрузка проца падала вдвое. Пришлось грузиться с другими ядрами и проверять).
   Для включения этого режима, необходимо пересобрать ядро с опцией:
options         DEVICE_POLLING

После сборки, установки и перезагрузки в sysctl появятся такие опции:
/usr/home/lissyara/>sysctl -a | grep polling
    lissyara@test-bsd-6.local:/usr/obj/usr/src/sys/GENERIC-polling
kern.polling.burst: 150
kern.polling.burst_max: 150
kern.polling.each_burst: 5
kern.polling.idle_poll: 0
kern.polling.user_frac: 50
kern.polling.reg_frac: 20
kern.polling.short_ticks: 473
kern.polling.lost_polls: 908
kern.polling.pending_polls: 0
kern.polling.residual_burst: 0
kern.polling.handlers: 0
kern.polling.enable: 0
kern.polling.phase: 0
kern.polling.suspect: 604
kern.polling.stalled: 0
kern.polling.idlepoll_sleeping: 1
hw.acpi.thermal.polling_rate: 10
/usr/home/lissyara/>

Из них интересней всего лишь одна - kern.polling.enable - она и отвечает за то, включен или выключен режим поллинга.
/usr/home/lissyara/>sysctl -d kern.polling.enable
kern.polling.enable: Switch polling for all interfaces
/usr/home/lissyara/>

Переменные sysctl можно менять находу, изменения принимаются сразу, без перезагрузки:
/usr/home/lissyara/>sysctl kern.polling.enable=1
kern.polling.enable: 0 -> 1
/usr/home/lissyara/>

Соответственно теперь этот режим включен. После перезагрузки переменная примет дефолтовое значение ("0"), и чтобы не вносить изменения руками, есть файл /etc/sysctl.conf, можно эту строку внести в него, и всё. Итак, можно тестировать.
   На выходе получилась примерно такая табличка:
Тип ядра и опции
speed in
% CPU in
speed out
% CPU out
GENERIC+polling-disable 2.01 87.69 3.72 94.00
GENERIC+polling-enable 7.34 84.65 10.08 20.43
GENERIC+polling-disable+SMP 4.38 87.32 7.91 85.12
GENERIC+polling-enable+SMP 9.74 52.01 9.45 28.25

Скорость в мегабайтах в секунду, загрузка ЦП в процентах.
   Ну и выводы по результатам таблицы:
В однопроцессорном режиме результат разгромный - в режиме приёма втрое, да ещё и загрузка проца снизилась (правда ненамного), в режиме передачи прибавка тоже втрое, но загрузка проца упала больше чем в 4 раза. Я думаю, что на сильно загруженных машинах оно того стоит.
   В SMP режиме всё ожидаемо - загрузка меньше, скорость выше - голов всё же две. Для однопроцессорных машин можно смело рекомендовать, а для многопроцессорных надо более развёрнутое тестирование.

P.S. Гонял этот режим на первом пне (ну не совсем первом, и совсем не пне - AMD K6-II 550MHz) - выигрыш копеечный - порядка 500кб/с - проц всё равно загружен под сотню. Но - и это неплохо, нахаляву-то :))) Но - есть одно но. При простое, когда копеечный траффик, всё равно `interrupt` жрут 10% проца, и это чувствуется... Так что режим выгоден тока в случае нагрузки. Будет время - нарисую скрипт, чтоб отслеживал появление нагрузки и врубал этот режим.
P.S.2 По просьбам трудящихся: Пакеты не теряются :)))



размещено: 2006-04-03,
последнее обновление: 2006-04-17,
автор: lissyara

оценить статью:





Хостинг HOST-FOOD

2010-08-25, manefesto
freebsd lvm

Использование linux_lvm для работы с LVM разделами из-под FreeBSD. Проблемы которые возники при монтирование lvm раздела
2010-04-30, gonzo111
proftpd file auth&quota

Proftpd - квоты и авторизация из файлов, без использования базы данных и/или системных пользователей
2010-04-22, lissyara
tw_cli

Пошаговая инструкция по восстановлению RAID на контроллере 3ware, из которого выпал один диск. Настройка мониторинга состояния рейда и отчётов о его состоянии на email.
2010-04-14, fox
MySQL Master+Master

MySQL (Master Master) and (Master Slave) Как настроить репликацию…
подписка

    вверх      
Статистика сайта
Сейчас на сайте находится: 46 чел.
За последние 30 мин было: 218 человек
За сегодня было
15664 показов,
1735 уникальных IP
 

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

© lissyara 2006-10-24 08:47 MSK

Время генерации страницы 0.1178 секунд
Из них PHP: 49%; SQL: 51%; Число SQL-запросов: 77 шт.
Исходный размер: 127575; Сжатая: 26398