[[TOC]] = Using Benito = Benito is a containerized virtualization system which currently runs on the DETER testbed. We support two types of experiments: qemu-only and mixed mode. Nodes in a qemu-only experiment are all realized as qemu virtual machines and are automatically packed into physical nodes based on a packing parameter. Nodes in a mixed mode experiment may either be qemu virtual nodes or full-fledged physical machines. Currently they must be embedded manually. == Disclaimer == Note that this software is currently very very '''alpha'''. We have made every effort to make the system as stable as possible, but it has not been heavily used. Expect to run into bugs. If and when you do encounter a bug you can either [/newticket file a ticket] or email the author directly at mikeryan@ISI.EDU. == How it works == Currently Benito uses DETER as a substrate for experiments. This means that an experiment using Benito containers appears to the DETER testbed and web interface as a typical experiment. The NS file for the host experiment is annotated with a variety of Benito-related commands. When you create an experiment using Benito, you will interact with it through facilities provided by DETER. The swap in/out process is controlled by the DETER web interface, and you will access your virtual nodes like any other node from {{{users.isi.deterlab.net}}}. == Getting Started == === Prerequisites === Prepare your NS or TopDL file as you would for any other DETER experiment. Before running your experiment you should determine the DETER PID and EID under which you'll run the experiment. The EID should not refer to an existing experiment. === qemu-only experiments === You will need to specify a parameter called "packing". This parameter describes how many qemu virtual nodes will be embedded on each physical node. The host machines have four cores each, so for compute-bound tasks this value should not be higher than 4. For less CPU-intensive tasks, this number can in theory be as high as 10 or 20 (perhaps higher). Once you have determined the parameters described above, you may start an experiment by logging in to {{{users.isi.deterlab.net}}} and running these commands: {{{ $ cd /share/benito $ ./qemu_experiment.py }}} === Mixed mode experiments === Mixed mode experiments may only be specified using a TopDL file. Each node must be specially annotated to incdicate its embedding. This is done by specifying an attribute on the node called {{{partition}}}. The {{{partition}}} attribute specifies the physical node on which a qemu virtual node is realized. This value must be numeric, though there are no restrictions on what numbers are used. If a node ''lacks'' the {{{partition}}} attribute, it is assumed to be a physical node. You can use the {{{shopdl.py}}} tool in the {{{util}}} subdirectory of the tree in order to ease manipulation of your TopDL file. Once you have annotated your TopDL file, you may start an experiment by logging in to {{{users.isi.deterlab.net}}} and running these commands: {{{ $ cd /share/benito $ ./mixed_experiment.py }}} === Creation === Upon successful creation, you will be presented with a URL for accessing your experiment via the web interface. It takes 1-2 minutes for DETER to create the experiment. The creation process has successfully completed once DETER reports "Status: swapped". == Swapping == === Swapping in === Swap in the DETER experiment like any other: click the "Swap Experiment In" link on the left side of the experiment page. From DETER's perspective, the swap in process should complete in 3-5 minutes, at which point you will be notified "Experiment successfully swapped in". After this, it takes another 3-5 minutes for Benito to set up the physical nodes and launch the virtual nodes. This process is complete when the "Startup Status" for each node is reported as 0 or 1. If the startup status is 1, there was an error setting up the physical node as a virtual host. Please let me know if this happens and I can see what caused the problem. You can always try to swap in and out to see if the problem resolves itself. === Swapping out === Swap the experiment out like any other. === Modifying the experiment === We do not currently support any form of experiment modification. If you wish to modify your experiment, you must terminate the DETER experiment (not just swap out, but properly terminate) and then start a new benito experiment using the process outlined above. == Accessing Nodes == Nodes are accessed similarly to other DETER nodes. When you are on users, you can access a node named 'node-1' in YourPID/SomeEID using SSH: {{{ users$ ssh node-1.someeid.yourpid node-1$ echo hello from qemu hello from qemu }}} From within the experiment you can communicate with other nodes in the experiment using just the hostname, as in an ordinary DETER experiment: {{{ node-1$ ping node-2 PING node-2-big-lan (10.0.0.32) 56(84) bytes of data. 64 bytes from node-2-big-lan (10.0.0.32): icmp_req=1 ttl=64 time=8.01 ms 64 bytes from node-2-big-lan (10.0.0.32): icmp_req=2 ttl=64 time=10.6 ms ^C --- node-2-big-lan ping statistics --- 2 packets transmitted, 2 received, 0% packet loss, time 1001ms rtt min/avg/max/mdev = 8.015/9.318/10.622/1.307 ms }}} === Node list === The {{{node_list}}} command takes an extra flag {{{-e}}} or {{{--extra}}} to list extra nodes from your experiments. Use it like so: {{{ users$ node_list --extra YourPID/some-experiment pnode-0001.some-experiment.YourPID / pc003 pnode-0000.some-experiment.YourPID / pc038 extra nodes: node-1.some-experiment.YourPID node-2.some-experiment.YourPID node-3.some-experiment.YourPID node-4.some-experiment.YourPID node-5.some-experiment.YourPID node-5.some-experiment.YourPID }}} This makes use of the {{{experiment.extra_nodes}}} XML-RPC method. This method takes two arguments: proj and exp, which are PID and EID respectively. === Start commands === Start commands are similar to Emulab start commands, with a few notable exceptions: * benito start commands are run at each boot, instead of just once * there is no way to report the exit status of a start command (yet) You can see the exit status and output of a start command by logging into a node and looking in {{{/var/benito/log/start_command.*}}}. There should be 3 files: * {{{start_command.log}}}: general info, including exit status * {{{start_command.out}}}: stdout from the start command * {{{start_command.err}}}: stderr == What's Missing == The following is a list of missing features that will probably cause you some pain and suffering. Actually implementing these features is my highest priority task at the moment, so please bear with me for the time being. * Node status, beyond existence * Ability to choose a different OS than Ubuntu 10.10 (Maverick) * Ability to install software using apt on Ubuntu (and any other OS)