====== Intro ======
For unknown reasons Ubuntu is shipping an ancient intel (e1000) driver that seems to have serious performance problems. Therefor you might want to use the driver shipped by Intel to get rid of ping delays up hole seconds!!

===== Getting the driver =====
Download the driver here: http://e1000.sf.net/

Go for the "''e1000e for 82571/2/3/4, es2lan, ich8lan, ich9lan, ich10lan adapters''" link and download e1000e-0.4.x.x.tar.gz.

===== Building e1000e =====
Make sure you have build-essential installed before trying to compile the driver:

<code>
sudo apt-get install build-essential
</code>

Unpak gzip'ed tarball:

<code>
tar -xzvf e1000e-0.4.x.x.tar.gz
</code>

Head for the src directory and build away:

<code>
cd src
sudo make install
</code>

This will install the module into "''/lib/modules/<KERNEL-VERSION>/kernel/drivers/net/e1000e''".

You might get an error about man pages, just discard that. If e1000e.ko is in place everything is okay.

===== Testing your new driver =====

To test if the driver works do the following (**please note you will loose network connectivity**):

<code>
sudo rmmod e1000       (this kills you network!)
sudo modprobe e1000e
</code>

You should now have your interface back. Use whatever tool you like to get an ip address, but an "''ifconfig eth0''" should reveal an interface.

===== The final touch =====

Now you have several options to get the right driver loaded. If you do nothing, both drivers end up getting loaded after reboot, and your network performance gets even more crappy. Therefor I recommend one of the options below.

==== Option 1 ====

Add the following to you "''/etc/rc.local''":

<file>
rmmod e1000
rmmod e1000e
modprobe e1000e
/etc/init.d/networking restart 
</file>

This will unload both drivers on boot, reinsert the correct driver and bounce your network configuration.

Doing this will give you a network while running on the correct kernel version. When a kernel update is installed you end up with no network at all. This may be what you want as you know you have to compile against the new kernel.

==== Option 2 ====

Add e1000e to the initramfs that will try to load it during boot.

Append e1000e and build a new initramfs image:

<code>
sudo echo e1000e >> /etc/initramfs-tools/modules
sudo update-initramfs -c -k all
</code>

Now the e1000e driver will rule your nic's and reclaim a desired network speed. 

There is a catch to this solution, if you boot up into a kernel not compatible with your homebreved driver, the original crappy/buggy driver will get loaded.
You can look at this in two ways. One, you will always have a network. Two you do not (might not) know that you are using the wrong driver and gets annoyed that things are getting slow and unreliable.

If you only want the e1000e driver loaded do the following:

<code>
sudo echo "blacklist e1000" >> /etc/modprobe.d/blacklist 
</code>

Now the e1000 is blacklisted and will not load. Now you have to remember that missing eth0 (or what ever your interface is called) means that you need to recompile e1000e against the new/different kernel.


==== Option 3 ====

Hack you kernel options for booting. Append "''noload=e1000''" to your kernel line in the grub boot menu.lst. Make it look something like this:

----
\\
title Ubuntu 8.04, kernel 2.6.24-19-generic \\
root (hd0,0) \\
kernel /boot/vmlinuz-2.6.24-19-generic root=UUID=0ba28d65-9563-47b5-b011-4c0f201141a4 ro quiet splash <color red>noload=e1000</color> \\
initrd /boot/initrd.img-2.6.24-19-generic \\
quiet \\

----
\\

Now you completely have disabled the e1000 driver from the system.





