FreeBSD hw.em.max_interrupt_rate патч

Как выяснилось, разработчики сетевых карт em и igb программируют чипы генерировать не более чем 8000 прерываний в секунду, по нынешним меркам это очень мало для процессоров текущего поколения, для igb начиная с версии 8.2-STABLE присутствует loader tunnable hw.igb.max_interrupt_rate с дефолтом 8000, который можно изменить через loader.conf, на горячую не изменяется, чтож, за владельцев сетевок igb я безмежно рад, но вот что же делать мне? У меня-то пока что стоят сетевки em, ответ не заставил себя долго ждать, и решение нашлось очень быстро — это пачт для драйверов em. Кстати я его на всякий случай слил себе на сайт
http://i-notes.org/files/em_sysctl.diff.gz
Обо всем по порядку.
Начнем с того что скачаем патчик себе на машинку:

# wget http://i-notes.org/files/em_sysctl.diff.gz

распаковываем эту бяку:

# gunzip  em_sysctl.diff.gz


Делаем копию папки с исходниками драйверов em

 mkdir /root/e1000
# cd /usr/src/sys/dev/
# cp -r e1000/ /root/e1000/

Копируем файл с патчем в директорию /usr/src

# cp em_sysctl.diff /usr/src/

топаем в папку с патчем

# cd /usr/src/

и соответственно патчим)))

# patch < em_sysctl.diff
Hmm...  Looks like a unified diff to me...
The text leading up to this was:
--------------------------
|--- sys/dev/e1000/if_em.h.orig 2010-12-30 11:18:14.000000000 +0600
|+++ sys/dev/e1000/if_em.h      2010-12-30 11:27:17.000000000 +0600
--------------------------
Patching file sys/dev/e1000/if_em.h using Plan A...
Hunk #1 succeeded at 436.
Hmm...  The next patch looks like a unified diff to me...
The text leading up to this was:
--------------------------
|--- sys/dev/e1000/if_em.c.orig 2010-12-30 11:18:14.000000000 +0600
|+++ sys/dev/e1000/if_em.c      2010-12-30 11:27:17.000000000 +0600
--------------------------
Patching file sys/dev/e1000/if_em.c using Plan A...
Hunk #1 succeeded at 365.
Hunk #2 succeeded at 456.
Hunk #3 succeeded at 1284.
Hunk #4 succeeded at 2352 (offset 13 lines).
Hunk #5 succeeded at 4076 (offset -3 lines).
Hunk #6 succeeded at 4115 (offset 13 lines).
done

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

# cd /usr/src/sys/amd64/conf/
# config ROUTER
Kernel build directory is ../compile/ROUTER
Don't forget to do ``make cleandepend && make depend''
# cd ../compile/ROUTER
# make cleandepend && make depend
# make
# make install

Бутаем железяку и спустя пару мгновений, радуемся новым возможностям наших em драйверов)

# ee /boot/loader.conf

и добавляем

hw.em.max_interrupt_rate=32000

значение подбирается опытным путем.
От себя замечу, что до применения патча, число прерываний генерируемых сетевкой не превышало 7,5к, логично, ведь ограничение в 8К, на данный момент после пропатчивания, вылетает 16-19к ) Посмотрим что будет в час пик.

Похожие посты

Комментировать

Комментировать email не будет опубликован