Friday, May 11, 2012

Howto: install dctcp (or new kernel) in debian



As I was fighting with DCTCP (datacenter TCP) installation last week, here is the recipe on how to win this battle. Some of the steps are trivial but some of them like reading the old tactics and ensuring that you really won are not an obvious steps for new generals.


Prepare for the battle:
[ ~ ]>sudo apt-get install kernel-package libncurses5-dev fakeroot


Get instructions for operation "dctcp":
[ ~ ]>mkdir dctcp
[ ~ ]>cd dctcp
[ ~/dctcp ]>wget  http://www.stanford.edu/~alizade/Site/DCTCP_files/dctcp-2.6.38.3-rev1.1.0.tgz
[ ~/dctcp ]>tar -xvvf dctcp-2.6.38.3-rev1.1.0.tgz


Get the battle plan:
[ ~/dctcp ]>wget http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.38.3.tar.bz2
[ ~/dctcp ]>tar jxvf linux-2.6.38.3.tar.bz2


Prepare supplies:
[ ~/dctcp ]>cp dctcp-2.6.38.3-rev1.1.0/dctcp-2.6.38.3-rev1.1.0.patch linux-2.6.38.3
[ ~/dctcp ]>cd  linux-2.6.38.3
[ ~/dctcp/linux-2.6.38.3] patch -p1 < dctcp-2.6.38.3-rev1.0.0.patch


Read old battle tactic:
[ ~/dctcp/linux-2.6.38.3 ]>cp /boot/config-x.y.z-amd64 .config
[ ~/dctcp/linux-2.6.38.3 ]>make oldconfig


Begin the battle:
[ ~/dctcp/linux-2.6.38.3 ]>fakeroot make-kpkg clean
[ ~/dctcp/linux-2.6.38.3 ]>fakeroot make-kpkg kernel_image

Battlefield after the battle:
[ ~/dctcp/linux-2.6.38.3 ]>cd ..
[ ~/dctcp ]>sudo dpkg -i linux-image-2.6.38.3_2.6.38.3-10.00.Custom_amd64.deb


Ensure the victory by signing boot contracts:
[ ~/dctcp ]>cd /boot
[ /boot ]>sudo mkinitramfs -o initrd.img-2.6.38.3 2.6.38.3
[ /boot ]>sudo update-grub
[ /boot ]>sudo reboot

10 comments:

  1. What linux distro and its version did you install dctcp on? Thanks

    ReplyDelete
  2. As the title says, it was Debian, I do not remember which version (probably stable at the time of posting)

    ReplyDelete
  3. Hi, I want to reproduce the DCTCP experiment. I just need to test of DCTCP in a small system at home using my laptop, home switch. Is it possible? Would you please help me what I need to prepare to do this? What kind of device do I need? (like ECN-supported switch, computers that has patched Linux kernel). Thanks

    ReplyDelete
  4. Hi, I've successfully installed DCTCP on Ubuntu 12.02 desktop version. How can I test it among other DCTCP-installed hosts. Please help me out.

    ReplyDelete
  5. Hi, you need either ECN-enabled switch (not sure if any home switch devices support that) or a linux host acting as a switch/router, see http://en.wikipedia.org/wiki/Explicit_Congestion_Notification#ECN_support_in_IP_by_routers

    You can also use mininet to emulate the network on a single host. I would suggest looking at http://reproducingnetworkresearch.wordpress.com/2012/06/09/dctcp-2/

    ReplyDelete
  6. Dear Ppershing, It's me again. I did compile DCTCP and install Mininet on my laptop. The thing is when I run Mininet example, it always get trouble with "cgroups". I noticed that when installed Mininet on original kernel (untouch), the "cgroups" is auto mounted (view it at /proc/mounts). But when compiling new DCTCP kernel, cgroups is not mounted anymore.
    Did you try reproducing that experiment (http://reproducingnetworkresearch.wordpress.com/2012/06/09/dctcp-2/). If yes, i wonder if you run it on your own computer or on Amazon AWS like other experiments suggested.
    Please give me some advice.
    Thank you.

    ReplyDelete
  7. I do not remember properly. We abandoned dctcp experiments and switched to other project and I do not remember exactly what was the state (if we managed to run everything and get correct results). My suggestion is that you check your dctcp kernel configuration option "Control Group support" and see if everything needed is selected.

    ReplyDelete
    Replies
    1. Well, I tried to enable some items in Control Group Support during "make menuconfig" and amazingly after building dctcp kernel and installing mininet, I can run dctcp mininet code but it did not return correct result. Mine shows that the buffer queue of switch still contain a lot of packets (up to 200 packets) instead of smaller than 50 packets as declared. Am I missing something?
      I'm sorry to bother you.

      Delete
  8. Hi,
    I am new to ubuntu. I want to install dctcp in my ubuntu 12.04. I got stucked in the steps [ ~/dctcp/linux-2.6.38.3 ]>cp /boot/config-x.y.z-amd64 .config and [ ~/dctcp ]>sudo dpkg -i linux-image-2.6.38.3_2.6.38.3-10.00.Custom_amd64.deb.
    I dont see any files ending with "amd64" on my /boot.
    Any response would be really appreciated.
    Thanks in advance

    ReplyDelete