--- /dev/null
+2-20-08
+
+Use this to capture the rates from the individual slices.
+
+ while true; do /sbin/tc -s class show dev eth0 | grep -A 3 11f8 | grep -A
+ 1 "class htb" | grep Sent | cut -d " " -f 3; sleep 1; done > GRD_pl_drl_34
+
+
+
+
+
+2-15-08
+
+Damn sysnet33 db won't come up. says /tmp is full in the chroot
+myplc/plc/root/var/log/pglog, but it's not full.
+So I'm trying to replace the loopback filesystem with something clean from
+the RPM.
+using cpio --no-absolute-filenames
+And
+rpm2cpio <rpm> | cpio -diu
+but u is don't prompt. so I'll issue
+rpm2cpio <rpm> | cpio -di --no-absolute_filenames
+
+OK, did this, then I copied over root.img to where I have it installed.
+And it all worked! Sweet. The image is mostly independent of the data!
+
+
+
+
+
+
+ADDING A PL NODE
+1.) turn off crond for restarting ulogd
+in pl_netflow:/etc/crond.d/netflow
+edited the line that calls init.d/netflow restart
+because I don't want it to keep restarting ulogd as I test it.
+2.) Allow pl_netflow to run tc
+I am also changing the pl_netflow.conf in /etc/vservers/pl_netflow.conf
+So that S_CAPS="CAP_NET_ADMIN"
+Then, from the root slice, vserver pl_netflow restart.
+3.) copy over the ./start script from the pl_netflow /root directory.
+4.) put bwlimit_drl.py into /usr/share/util-vserver/bwlimit2.py on the root
+slice
+put bwlimit_drl.py into /usr/share/util-vserver/bwlimit_drl.py on the
+pl_netflow slice.
+Future, make the names consistent
+5.) pull the sch_netem.ko over and insmod it.
+
+cd /lib/modules/2.6.12-1.1398_FC4.5.planetlab/kernel/net/sched/
+[root@sysnet32 sched]# scp -i ~/.ssh/root_ssh_key.rsa root@sysnet34:/lib/modules/2.6.12-1.1398_FC4.5.planetlab/kernel/net/sched/sch_netem_plab.ko .
+insmod sch_netem_plab.ko
+
+6.) [root@vserver:pl_netflow ~]/etc/init.d/ulogd stop
+7.) vserver pl_netflow enter
+8.) copy over ulogd. run ./start
+9.) Edit the ulogd configuration script.
+
+
+2-12-08
+
+bwlimit.py cannot look up the slice names in the pl_netflow slice b/c there
+are not entries in the /etc/passwd file for the slices. Of course there
+aren't. Even ulogd_NETFLOW.c replaces /etc/passwd with /dev/null.
+
+so in the short term I will copy over the roots /etc/passwd and place it
+where the new bwlimit_drl exists. /usr/share/util-vserver/passwd_drl
+I can have the root periodically copy this file into the pl_netflow slice
+in a cron job, or whenever a new slice is created.
+
+This is a hack. There are probably better ways, but it's a moving target.
+Now hack bwlimit_drl to use that file to look up slice contexts.
+
+
+
+HTB DOCS http://luxik.cdi.cz/~devik/qos/htb/manual/userg.htm
+
+2-10-08
+
+We probably have to put the netem at the bottom of the tbf. If we put it
+in the middle, say off of the 1:10 class, then we need to direct all
+traffic that would have been directed to a lower class in the htb to the
+1:10 class. Then the traffic has to be directed to the lower classes and
+be accounted for directly. This screws with how traffic classification is
+done; I don't even know if it will obey the tb appropriately either, since
+the best you can do is put another htb qdisc below the netem class. And
+there is no way to directly have that qdisc borrow from the "parent" one
+that's just been terminated by the netem qdisc. Got that?
+
+
+
+
+
+
+2-7-08
+
+Screwing around with all the kernel configs has forced the build process to
+rebuild all the kernels. blech.
+
+
+BUILDING NETEM for plab machines:
+Kevin made an ubunto chroot install on his linux machine and built 3.3 gcc
+in it, and then copied over the source linux tree that had the .config
+stolen from sysnet34 /proc/config.gz. We also had to change the magic
+string so that it believed it was bulit to fc 4.5, not 4.7.
+Use insmod
+/lib/modules/2.6.12-1.1398_FC4.5.planetlab/kernel/net/sched/sch_netem_plab.ko
+
+
+see sysnet35:/root/myplc/build/SOURCES/CRAP/linux-2.6.12/.config
+
+
+We added a node at the root qdisc and it succesfully appears to delay
+packets. So now let's figure out how to add it to the bwlimit.py code so
+that it is always present and can be tweaked (replaced) when running
+ulogd.
+
+----
+tc qdisc del dev eth0 root handle 1:
+tc qdisc add dev eth0 parent 1: handle 2: htb default 1fff
+And everything then falls out of 2:
+
+But this will netem everything out of hte host, leaving nothing for
+"exempt" slices like the root. Not what we want.
+
+We place a netem qdisc at the leaf of every non-exempt slice traffic class
+in the HTB.
+
+2-5-08
+
+in pl_netflow vserver
+/etc/cron.d/netflow keeps restarting netflow init.d script which keeps
+restarting ulogd if started by hand. Fucking buggy.
+
+in root vserver
+see pl_mom cron job
+which runs bwmon and pl_mop. pl_mop makes sure pl_netflow is running.
+
+!!!!!<CHANGE TO SYSNET34>!!!!!
+in sysnet34 pl_netflow:/etc/crond.d/netflow
+edited the line that calls init.d/netflow restart
+because I don't want it to keep restarting ulogd as I test it.
+!!!!!
+I am also changing the pl_netflow.conf in /etc/vservers/pl_netflow.conf
+So that S_CAPS="CAP_NET_ADMIN"
+Then, from the root slice, vserver pl_netflow restart.
+
+<changing kernel config files in build/linux-x-x-x/configs directory
+i686-smp-plab
+i686-onelab
+i686-planetlab
+all added CONFIG_NET_SCH_NETEM=m
+
+
+2-1-08
+
+GRD dropping. Use netem, which is accessible also through tc.
+I believe what we want to do is put the netem on the interface for all
+traffic? OK, that's not going to work for setting up for traffic that goes
+to "blessed" destinations.
+
+We will 1.) set up a qdisc for netem on the device, and have it affect all
+traffic in the htb first.
+Then we will try to set up a netem only for certain traffic in the htb.
+
+
+Can you list all of the destinations or iproute2 rules used to classify
+traffic to tc classes?
+
+so we have a couple of options. We can look at the tc source in iproute2
+code I downloaded on sysnet35. However, this is pretty low-level code; we
+have to communicate over a netlink socket in order to feed commands to TC.
+The alternative is to fork/exec from ulogd when we need to issue new tc
+commands. In the short term, let's do this.
+
+
+
+12-31-08
+
+so the hack is to change the ceilings on all of the child slice classes.
+That's one thing to do for all outbound traffic. Theoretically we should
+be able to just set the rule for 1:10 but that doesn't seem to be working.
+
+
+1.) /usr/share/util-vserver/bwlimit.py -v init
+2.) /usr/share/util-vserver/bwlimit.py -v on pl_drl 1 8bit 1gbit 8bit 1gbit
+3.) /usr/share/util-vserver/bwlimit.py -v on pl_drl_two 1 8bit 1gbit 8bit 1gbit
+
+You can change the 1:10 class, and then you can off/on the slice limits.
+The script makes sure to set the ceilings of the children classes to the
+ceiling of the parents.
+
+Fine. That's how they want it, that's how they'll get it. What we need
+to make sure is that the individual slices still share the outgoing
+bandwidth appropriately.
+
+I'm not too sure what the traffic control does for you when they share
+everything identically. Let's assume that they want it.
+
+For FPS the limiter is a token bucket. We want to simply set the rate to
+something with this token bucket. We should be able to do this exactly
+with the right TC command. No problem.
+
+For GRD the limiter is a packet dropper. Drop X % of packets. Let me
+look at the outgoing schedulers. It doesn't look like we will be able to
+do it with TC. We may be able to do it with a netfilter module. Probably
+a custom module. They probably use netfilter commands to assign packets to
+tc classes anyhow. so we need to add similar rules.
+
+So for now let's focus on FPS. In this case we need to be able to
+interact with TC from the ulogd program, either through a call or
+directly.
+
+
+
+
+
+12-29-08
+
+check this out. The example looks familiar to how tc is used in plab.
+http://edseek.com/~jasonb/articles/traffic_shaping/class.html
+
+
+qdiscs are added at the very bottom for each class whose minor number is
+the xid. There is one parent qdisc which allows you to add classes. That
+is the htb classfull qdisc. The bottom qdisc's are pfifo's which I
+believe are classless. pfifo is the scheduler that all leaf nodes of
+classful qdiscs are assigned. The only thing you can do is to determine
+the size the queue. This is scheduling, not shaping.
+
+You can add other schedulers: sfq, which tries to be flow fair.
+tbf: token bucket filter. tbf is now a classful qdisc.
+
+
+You had better make sure that your rates of your child classes do not
+exceed the rate of the parent class. those are the minimums. What about
+the ceilings? That says how much you can borrow. Classes borrow in
+proportion to the minimum rates that they are assigned. Individual
+ceilings should not exceed the parents rate. Because it says how much you
+can borrow when no one else is using anything.
+
+So do I have to write all new rules for all slices that are active when we
+want to constrain them all?
+
+What happens when the parents rate/ceiling is less than the maximum that
+they can borrow? That apparently doesn't do any damm thing. But this is
+probably why the script makes sure that the ceilings don't go above the
+1:10 or 1:1. It never checks for 1:20, which is probably b/c they always
+expect it to have a ceiling equal to bandwidth max.
+
+OK. If we set the ceiling of the child class to the ceiling of the
+parent, tokens are borrowed appropriately. If the ceiling is greater of
+the child, then it looks like cburst has a lot to do with it. So I have
+to see what is happening with cburst.
+
+
+Setting 1:1 to rate 5mb no ceiling
+setting 1:10 to rate 8 ceil 5mb
+setting 1:1myslice rate 8 ceil 1gbit
+
+This configuration does not work.
+
+when 1myslice ceil is > then parent ceil, looks like no borrowing occurs
+unless the cburst is very low. if you set cburst to 0, then tc sets cburst
+to something that allows the class to reach its ceiling.
+
+
+
+HOWTO: Set a ceiling on a particular slice.
+/usr/share/util-vaserver/bwlimit.py on pl_drl 1 8bit 500kbit 8bit 1gib
+The first arg is share. Works in the way you expect.
+The next is min guaranteed. The next is max or ceiling. This is the one
+to set. The next two are min/ceiling for special destinations.
+
+HOWTO: Set a ceiling on all slices leaving a node.
+1.) We can change the ceiling for the 1:10 subclass.
+this should limit all traffic for all slices to non-exempted destinations
+
+ /sbin/tc class replace dev eth0 parent 1:1 classid 1:10 htb rate 8bit ceil 500kbit
+This does not work.
+
+2.) We can change the ceiling for the 1:1 root class.
+
+ /sbin/tc class replace dev eth0 parent 1: classid 1:1 htb rate 500kbit
+modified this to
+ /sbin/tc class replace dev eth0 parent 1: classid 1:1 htb rate 8bit ceil 500kbit
+With no effect.
+
+Mucking with classid 1:1 seems to make the machine very unhappy.
+
+
+bwlimit seems to set the bottom classes ceilings to the ceiling of the 1:10
+block. Then why have the 1:10 block?
+
+
+
+Do 1&2, and neither have any effect.
+
+It looks like only the bottom most class has any affect. If I re-init the
+bwlimit.py script, then a rule parent 1:10 leaf 1:1fff seems to get all the
+traffic. And it is the limit that seems to matter.
+
+I see. 1fff is the deafult_xid. So when something has not been caught
+earlier this is where it goes to be limited and caught.
+
+
+tcp netperf tests for rate limiting from a slice.
+Experiment with 34->35. Logged in to the pl_drl slice to issue the
+netperf.
+
+vserver pl_drl status
+vserver pl_drl_two status
+
+vservers aren't running until you log in to them. so the above command
+won't return something useful until that point.
+
+
+
+12-18-08
+
+/etc/init.d/ncsd restart or reload (caches ldap information) this is for
+the sysnet machines.
+
+
+The files that you care about are in the release. they are
+/usr/share/util-vaserver/bwlimit.py
+This is what makes the calls to TC to do the traffic control.
+
+
+
+OK: Logging in to the drl slice, and setting up the netperf
+server/client.
+ssh -i ~/.ssh/myplc_admin.rsa -l pl_drl sysnet34.ucsd.edu
+
+So I'm sending netperf outbound flows from the pl_drl slice
+and it is getting recorded in the class htb 1:11f8 (which is context 504).
+When you do a vserver list, though, it says there's only a 503 (though when
+you log in to 503, it says the "security context" is 504).
+
+
+ 1111 /usr/share/util-vserver/bwlimit.py -d eth0 -v init
+ 1115 /usr/share/util-vserver/bwlimit.py -d eth0 on pl_drl 1 1kbit 10kbit 1kbit 10kbit
+
+
+11-14-07
+
+
+planetlab website login
+kyocum@cs.ucsd.edu
+ate smurfs as well
+sysnet35 kyocum - big Dog - and killing name root
+
+
+symlink cvs source code to a ulogd/drl directory.
+
+for file in '*.h'; do echo $file; rm /root/myplc/ulogd/drl/$file ; done
+for file in '*.c'; do echo $file; ln -s /root/ratelimiting/myplc/$file /root/myplc/ulogd/drl/. ; done
+
+
+11-11-07
+
+Brought back 32 and 33 from power offs. 32 is mounting everything read
+only. 34 is working fine, but it was never powered off.
+
+
+
+10-29-07
+Back from NSDI, SOSP, Texas, and firestorm. Will modify ulogd to perform
+DRL. Will first use GRD, as we can drop based on simple probabilities.
+Though we should be able to see all the packets that are coming in to the
+machine using ulogd.
+
+
+
+
+9-16-07
+
+vserver pl_netflow enter
+scp root@sysnet35:~/myplc/build/RPMS/i386/ulogd-1.02-11.i386.rpm .
+
+Where does the output go?
+
+
+9-14-07 #2
+
+Now let's try to install the ulog srpm that was created on one of the myplc
+nodes.
+
+sysnet32,34: myplc nodes
+sysnet35: build box
+sysnet33: myplc controller
+
+On 34, entering vserver for ulogd, downloading srpm, and trying to
+install.
+
+/etc/rc.d/init.d/ulogd stop
+rpm -e --nodeps ulogd
+rpm -Uvh ulogd-1.02-11.i386.rpm
+/etc/rc.d/init.d/ulogd start
+
+
+9-14-07
+
+Have installed FC4 on sysnet35. Am following Marc's instructions in his email.Check out rc1 build and rc1 ulogd.
+OK, I'm trying to build things using marc's instructions and not the entire
+myplc build envi
+ronment that is in the GUIDE. I'll try that next.
+Ok, I've set it all up. I'm using
+mirrors.kernel.org
+and fedora/core/4/os
+--
+Ok, now I'm about to cd into build and make ulogd . . .
+q
+
+xPWD=$PWD
+cvs -d :pserver:anonymous@cvs.planet-lab.org:/cvs co -r planetlab-4_1-rc1
+build
+cvs -d :pserver:anonymous@cvs.planet-lab.org:/cvs co -r planetlab-4_1-rc1
+ulogd
+cd build
+mkdir SPEC SOURCES
+cd SPEC
+# note that you will need these symlinks to use the full paths --- NOT
+relative paths
+# which is why I am using $xPWD
+ln -fs $xPWD/ulogd/ulogd.spec ulogd.spec
+cd ../SOURCES
+ln -fs $xPWD/ulogd ulogd
+cd ..
+make ulogd
+
+Assuming the dependencies are set up right, this should first suck down the
+kernel and mysql modules via CVS, build them (which may take some time),
+and then build ulogd.
+
+Success!!!!!
+
+Now, check out ratelimiting but add root to cvs group number 30008
+groupadd -g 30008 cvs (add group def)
+
+
+8-17-07
+
+Made two slices. pl_drl_one and pl_drl_two
+to log in to the slices I uploaded a key, myplc_admin.{rsa,pub}
+
+sake:~/.ssh grant$ ssh -i myplc_admin.rsa -l pl_drl_one sysnet34
+
+
+We want to modify ULOGD
+
+can't run it. root@sysnet34 sbin]# ./ulogd --help
+./ulogd: error while loading shared libraries: libproper.so.0: cannot open
+shared object file: No such file or directory
+
+trying chroot to the netflow slice first.
+That seems to do the trick.
+
+bash-3.00# ./ulogd
+Fri Aug 17 20:05:08 2007 <3> ulogd.c:300 registering interpreter `raw'
+Fri Aug 17 20:05:08 2007 <3> ulogd.c:300 registering interpreter `oob'
+Fri Aug 17 20:05:08 2007 <3> ulogd.c:300 registering interpreter `ip'
+Fri Aug 17 20:05:08 2007 <3> ulogd.c:300 registering interpreter `tcp'
+Fri Aug 17 20:05:08 2007 <3> ulogd.c:300 registering interpreter `icmp'
+Fri Aug 17 20:05:08 2007 <3> ulogd.c:300 registering interpreter `udp'
+Fri Aug 17 20:05:08 2007 <3> ulogd.c:300 registering interpreter `ahesp'
+Fri Aug 17 20:05:08 2007 <3> ulogd.c:300 registering interpreter `gre'
+Fri Aug 17 20:05:08 2007 <5> ulogd.c:355 registering output `netflow'
+ERROR: Unable to create netlink socket: Bad file descriptor
+8-21-07
+
+get yum to work on sysnet34.
+in /etc/yum.conf, changed reposdir=/etc/yum.repos.d/
+http://onelab-build.inria.fr/websvn/filedetails.php?repname=OneLab&path=%2Fnew_plc_www%2Ftrunk%2FPlanetLabConf%2Fyum.conf.php
+has a crazy yum.conf file.
+yum install cvs
+yum install gcc
+
+[root@sysnet34 2.6.12-1.1398_FC4.5.planetlab]# cd /usr/src/
+[root@sysnet34 src]# mkdir kernels
+
+Install the kernel source the lib/modules directory symlinks to
+/usr/src/kernels/
+where we place 2.6.12-1.1398_FC4.5.planetlab
+
+Checkout kernel:
+cvs co -r planetlab-4_1-rc1 linux-2.6
+placed in /usr/src/kernels/
+
+Building PLAB kernel:
+
+fuck yum, no ncurses devel, no yum supository.
+wget http://coblitz.planet-lab.org/pub/fedora/linux/core/updates/4/x86_64/ncurses-devel-5.4-19.fc4.i386.rpm
+rpm -i ncurses----
+
+OK, now the stupid make menuconfig worked, but we're going to copy a kernel
+config from /proc/config.gz
+zcat config.gz > /root/kernels/linux-2.6/.config
+make O=/root/kernels/linux-2.6/build/ oldconfig
+
+So none of that worked, copy config to .config in top level directory.
+then run menuconfig, then save config, then compile. that works.
+
+Yay!
+
+./build/include/linux/version.h
+so config that shit.
+
+Configuring ulogd
+./configure --with-kernel=/root/kernels/linux-2.6/build/
+config success!
+
+download RPM and install from location above.
+mysql-devel-4.1.20-1.FC4.1.x86_64.rpm
+rpm -i <>
+
+Ok, had to re-enable yum.conf to use yum.repos.d
+had to modify yum.repos.d/fedora-devel so that it wasn't used.
+then I could yum install openssl-devel and mysql-devel
+
+The linker is bitching about mysql objects not being present.
+trying yum install mysql.i386
+already installed trying
+yum install ulogd-pgsql.i386 <no help>
+yum install ulogd-mysql.i386 <no help>
+yum install mysqlclient10-devel.i386
+
+Ok, all that is shit. Marc sent me a yumrepos.tgz that is on my
+desktop. I put all the files in the right place on 34. He then sent me a
+yum install line that is this.
+
+yum -y install beecrypt-devel bzip2 coreutils cpio createrepo curl
+curl-devel cvs db4-devel dev diffutils dnsmasq docbook-utils-pdf dosfstools
+doxygen expect gcc-c++ gd glibc glibc-common gnupg gperf gzip httpd install
+iptables less libpcap libpcap-devel libtool linuxdoc-tools mailx make
+metadata mkisofs mod_python mod_ssl mysql mysql-devel mysql-server nasm
+ncurses-devel openssh openssl php php-devel php-gd php-pgsql postgresql
+postgresql-devel postgresql-python postgresql-server python python-devel
+PyXML readline-devel redhat-rpm-config rpm rpm-build rpm-devel rsync
+sendmail sendmail-cf sharutils sudo tar tetex-latex time vconfig vixie-cron
+wget xmlsec1 xmlsec1-openssl yum
+
+which should make the box a build box.
+
+Of course, what I should really be doing is making a fresh FC4 node as my
+build environment, but whatever.
+
+
+------
+
+Ok, trying to figure out if there is a way to "start" the pl_netflow
+vserver. Don't know if it's currently running. Perhaps it is.
+vserver-stat shows 4 vservers, besides the root context, 0.
+#503 is pl_netflow. The other two are the two drl slices.
+Each vserver has a configuration file shown here:
+[root@sysnet34 sbin]# more /etc/vservers/pl_netflow.conf
+
+To enter a vserver context you can say
+vserver <name> enter
+
+To run ulogd
+
+vserver pl_netflow enter
+cd /usr/sbin
+./ulogd
+
+The configuration file is in
+/etc/ulogd.conf
+/var/log/ulogd.log
+
+
+
+
+8-07
+Installing myPLC. Trying to build rate limiting infrastructure on top of
+it.
+
+
+sysnet33. has only mounted /dev/xen_vg/dom0 on /
+that is only 2GB. There is another LVM called /dev/xen_vg/lvol0.
+It has 10GB. We will try to mount that.
+Display with lvmdisplay
+
+The underlying disk partition is /dev/sda3 (physical volume)
+display pv's with pvdisplay
+
+adding line in /etc/fstab to mount lvol0 on /lvol0
+This partition has plenty of space. Everything looks good.
+
+use linux authconfig to see if it's using ldap for user authentication
+to disable selinux
+http://www.crypt.gen.nz/selinux/disable_selinux.html
+It was already disabled, see /etc/selinux/config
+INSTALLED in /lvol0
+I edited /lvol0/myplc/etc/sysconfig/plc
+I symlinked /etc/init.d/plc --> installed
+I symlinked /etc/sysconfig/plc --> installed
+
+I edited etc/sysconfig/plc to point to my installation in /lvol0/myplc
+
+root@localhost.localdomain
+made a new account as well.
+kyocum@cs.ucsd.edu
+8smurf2
+
+---
+
+Trying to install the images for the new nodes. They are in /lvol0/myplc/plc/root/data/var/www/html/download
+
+on sysnet33,
+yum install mkisofs
+./bootcustom.sh DRL.iso plnode34.txt
+
+
+---
+
+Machines come up in debug mode. They have insufficient resources.
+Probably disk space. Need to modify the boot script that is sent over
+from myplc (beckerr), or we can add a "/minhw" to the node type in the
+controller. The boot program is at:
+
+-bash-3.00$ pwd
+/lvol0/myplc/plc/data/var/www/html/boot/bootmanager.sh
+nope just contains binary of bootmanager.
+/lvol0/myplc/plc/root/etc/plc.d/bootmanager is where it's at. nope.
+qq/usr/share/bootmanager/
+
+
+Generally, running BootManager by hand is the standard procedure. Set the
+machine to "Boot" state via your PLC API or web server. When the machine
+sfails
+to boot, hit Ctrl-C, login as root/root, cd /tmp/source, and run
+"./BootManager.py". Figure out where it dies, then start adding prints in
+the
+appropriate places to figure out why.
+
+
+