Настройка X520-DA2 на debian 6

Здесь будет рассказано как приживить X520-DA2 на debian 6 с неподдерживаемым sfp+ модулями. Сразу скажу что на более поздних ядрах достаточно добавить в

#echo "options ixgbe  allow_unsupported_sfp=1" > /etc/modprobe.d/ixgbe.conf
Втыкаем карточку пихаем модуль включаем

#dmesg | tail
[  227.694482] ixgbe 0000:03:00.0: >failed to load because an unsupported SFP+ module type was detected.
[  227.708667] ixgbe 0000:03:00.0: >Reload the driver after installing a supported module.
Если видим такую хрень нас ожидает секс :)

#apt-get install linux-headers-`uname -r` linux-source-2.6.32 gcc autoconf make
#cd /usr/src
#tar -xjf linux-source-2.6.32.tar.bz2
#cd linux-source-2.6.32
#make oldconfig && make prepeare && make modules_prepare
Теперь ищем что-то типа
(!(enforce_sfp
в файле
drivers/net/ethernet/intel/ixgbe/ixgbe_phy.c
и перед ней вставляем строку
enforce_sfp |= IXGBE_DEVICE_CAPS_ALLOW_ANY_SFP;
должно получиться что то типа

 hw->mac.ops.get_device_caps(hw, &enforce_sfp);
                enforce_sfp |= IXGBE_DEVICE_CAPS_ALLOW_ANY_SFP;
                if (!(enforce_sfp &
Теперь набираем

#make -C /usr/src/linux-headers-2.6.32-5-amd64   SUBDIRS=/usr/src/linux-source-2.6.32/drivers/net/ixgbe modules
#cp /usr/src/linux-source-2.6.32/drivers/net/ixgbe/ixgbe.ko /lib/modules/2.6.32-5-amd64/kernel/drivers/net/ixgbe
#rmmod ixgbe
#modprobe ixgbe
#ifconfig eth0 #- проверям поднялся ли интервейс
Должно быть все гуд. Ну пару твиков напоследок, накидаем скриптик. Отключаем все overflow и раскидываем вручную по прерываниям.

#!/bin/bash
/sbin/ethtool -K eth0 tso off gso off gro off
/sbin/ethtool -A eth0 autoneg off rx off tx off

ncpus=`grep -ciw ^processor /proc/cpuinfo`
test "$ncpus" -gt 1 || exit 1

filenn=`mktemp`

echo "0">"$filenn"

for mpart in eth0
do
n=`cat "$filenn"`
for irq in `cat /proc/interrupts |grep " ${mpart}-"|cut -d: -f1 |tr -d ' '`
do
 f="/proc/irq/$irq/smp_affinity"
 test -r "$f" || continue
 cpu=$[$ncpus - ($n % $ncpus) - 1]
 if [ $cpu -ge 0 ]
 then
 mask=`printf %x $[2 ** $cpu]`
 echo "$mask" > "$f"
 echo "$n $mpart" "$mask" "$f"
 let n+=1
 fi
 echo "$n">"$filenn"
done
done

И добавим в файл
/etc/sysctl.conf

#Этих параметров в дебиане нет в других возможно понадобятся
#net.ipv4.netfilter.ip_conntrack_max = 2097152
#net.netfilter.nf_conntrack_expect_max = 2097152
#
#net.netfilter.nf_conntrack_tcp_timeout_syn_sent = 60
#net.netfilter.nf_conntrack_tcp_timeout_time_wait = 20
#net.netfilter.nf_conntrack_tcp_timeout_established = 12500
#net.netfilter.nf_conntrack_udp_timeout_stream = 60
#

net.ipv4.tcp_syn_retries = 4 
net.ipv4.tcp_synack_retries = 4 
net.ipv4.tcp_max_syn_backlog = 4096 
net.ipv4.tcp_fin_timeout = 15 
net.core.somaxconn = 16384 
net.core.netdev_max_backlog = 10000 
net.core.rmem_default = 16777216 
net.core.wmem_default =16777216 
net.core.rmem_max = 16777216 
net.core.wmem_max = 16777216 
net.ipv4.tcp_rmem = 287160 16777216 16777216 
net.ipv4.tcp_wmem = 287160 16777216 16777216 
net.ipv4.ip_local_port_range=1024 65500