Newer Older
Note: The code for assign is currently in a messy state, as numerous options
Jay Lepreau's avatar
Jay Lepreau committed
2 3 4 5 6
have been added to it to explore various improvements and behaviors, for a
paper.  The preliminary version of this paper can be found on the Emulab papers
page and in the testbed source tree at doc/papers/assign-tr.pdf .
The paper is the best place to start to get an understanding of assign.
A revised version will appear in the April 2003 issue of SIGCOMM
Computer Communications Review. Once numbers for the final version of this
Jay Lepreau's avatar
Jay Lepreau committed
paper have been gathered, this code will be cleaned up substantially.
9 10 11 12 13


Typically assign is run in the following method:
	assign <ptop> <top>
15 16 17 18

ptop format
Each line is one of:
20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36

node <node> <types> [- <features>]

<node> is a string identifier for the node.

<types> is a space separated list of <type>:<number>. 
	<type> is a string identifier for the type.
	<number> is the number of virtual nodes of that type that can fit.
There is a special type of "switch" which indicates that the node is a

<features> is a space separated list of <feature>:<cost>
	<feature> is a string identifier of the feature.
	<cost> is the cost of the feature being wasted.


link <link> <src>[:<smac>] <dst>[:<dmac>] <bw> <delay> <loss> [<num>]
38 39 40 41 42 43 44 45 46

<link> is a string identifier for the link.

<src>,<dst> are the source and destination nodes.

<smac>,<dmac> are optional arguments which are the MAC addresses or any
	other string to distinguish the ports of the nodes.  If committed
	the string "(null)" is used instead.

<bw>,<delay>,<loss> are the characteristics of the link.
48 49 50 51 52

<num> is the number of links between those two pairs.

Note: <smac> and <dmac> should not be present on switch<->switch links.


54 55 56
top format

Each line is one of:
58 59 60 61 62 63 64 65 66 67 68 69 70

node <node> <type> [<desires>]

<node> is a string identifier for the node.

<type> is the type of the node.

<desires> is a space separated list of <desire>:<weight>
	<desire> is a string identifier of the desire.
	<weight> is the cost of not having the desire fulfilled.
		A weight >= 1.0 will also result in a violation if
		not filled.

Leigh B. Stoller's avatar
Leigh B. Stoller committed
71 72

73 74 75 76 77 78 79 80 81 82 83 84
link <link> <src> <dst> <bw>[:<underbw>:<overbw>[:<weight>]] <delay>[:<underdelay>:<overdelay>[:<weight>]] <loss>[:<underloss>:<overloss>[:<weight>]] [<rbw>[:<underbw>:<overbw>[:<weight>]] <rdelay>[:<underdelay>:<overdelay>[:<weight>]] <rloss>[:<underloss>:<overloss>[:<weight>]]] [nodelay|mustdelay] [emulated]

<bw>,<delay>,<loss> are the characteristics of the link.  The optional
delta arguments describe how far off the assignment can be (under and
over).  A vaule of 0 is default, and a vaule of -1 indicates that best
effort is fine.  The weights are optional floating points that allow
the user to specify the relative importance of the parameters.  They
default to 1.  One can also specify reverse delay characteristics.  If
these are ommitted they default to the normal delay characteristics.

nodelay if present indicates that this link should not be delayed.
mustdelay indicates that link must be delayed.

86 87 88 89 90 91 92 93

fix-node <node> <physical node>


make-vclass <name> <weight> <physical types...>

94 95 96 97 98 99 100 101 102
features and desires

Each physical node has feature/cost pairs associated with it.  Each
virtual node has desire/weight pairs associated with it.  When a
mapping is made any unused features add their cost to the score and
any unfulfilled desires add their weight to the score.  Fulfilled
desires/used features add nothing to the score.

103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120
fixed nodes

A fix-node directive in the top file will cause the named node to be
mapped to the specified physical node.  These mappings are made before
annealing and are never changed.  


Vclasses are the assign lingo for vtypes.  See
www/tutorial/nscommands.html for a complete discussion of vtypes.
Weights >= 1 result in violations when the vclass is consistent.
Weights <= 1 add their weight to the score when inconsistent and add 0
otherwise.  The weight is added once per vclass not once per violating

121 122
environmental variables

124 125 126 127 128
ASSIGN_SEED - If present will cause assign to use the value as its
random number seed.  Otherwise the seed is taken from the current

compile time options
129 130

See compile-options.txt for a full list of the compile-time options.