Оптимизация поиска в libalias

Что: d32fdefcb323fe32d6685bf91f5fd24188103b1e

Когда: 2024-02-25 00:05:03+03:00

Темы: bsd hate netperf tip

Оптимизация поиска в libalias

https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=253912
У меня было много проблем с нагрузкой на CPU в моём ipfw:
f8e2e4dfc6870c4dad7e62be9bb02ae9dd73d180. Всё жутко сильно
упиралось в NAT, а точнее libalias реализацию, используемую
в ipfw. Сегодня снова разбирался во всём этом, ибо у меня
Xeon современный, а у него половина ресурсов занята сетью,
а точнее libalias-ом.

Увереннее, уже рефлекторно стал вводил "netstat -Q" (просмотр очередей
netisr (kernel network dispatch service)), "top -aSH" (где видны
конкретные ядерные модули отнимающие ресурсы), "vmstat -m" (размер
памяти отведённой для libalias там виден), "vmstat -i" (видеть
распределения прерываний по ядрам).

Отчаялся уже, ибо выходило так, что вот ну ни может FreeBSD выжать NAT
для 100Mbps интерфейса, за которым всего 1.5 машины по сути (одна с
BitTorrent активным, а вторая это мой компьютер, иногда часами ничего не
дёргающего из IPv4 Интернета).

Но нашёлся bug по ссылке, с патчем, созданный ещё пару лет назад. И
никто его не мёржит никуда. Прошло пара часов -- полёт отличнейший. На
процессоре смехотворные несколько процентов одного ядра максимум теперь
(и это firewall, NAT и AQM).

    While lookup of outgoing packets uses hash based on both source and
    destination address, for incoming packets only alias address and
    port is used. So when multiple connections from different addresses
    target the same port of redirected address (using redirect_addr or
    redirect_port in IPFW), the link table must be searched sequentially
    - tens of thousand of items for every incoming packet. To make it
    worse, the search is under a lock, so it is forced to run on a
    single core. Consequently just 1000pps from different addresses are
    enough to bring down a server with the fastest CPU available in
    under a minute.

Прям вот ситуация именно как у меня, точь-в-точь. И ведь самая обычная
банальная домашняя. Как-будто крайне редко и мало кто с ней встречается.
Вот тут то и можно бы было сказать что FreeBSD не для дома. Но нет,
всего то маленький патчик нужен.

оставить комментарий

Сгенерирован: SGBlog 0.34.0