February 23, 2011:
Site launched.
Note: the following instructions assume that the servers have a copy of Ubuntu installed.
Step 1: Install g++.
usr@gw:~$ sudo apt-get install g++ |
---|
Step 2: Download the current source code LVRM v1.0 (released February 23, 2011).
Step 3: Unpack the LVRM package.
usr@gw:~$ tar xzf lvrm-1.0.tar.gz |
---|
Step 4: Compile the LVRMs.
usr@gw:~$ cd lvrm usr@gw:~/lvrm$ make |
---|
Step 5: Compile the VR instances.
usr@gw:~/lvrm$ cd VRInstance usr@gw:~/lvrm/VRInstance$ make |
---|
Configure the mapping files and routing files, which start with an integer specifying the number of IP networks in the file. Take the topology below as an example:
For each VR, LVRM reads the corresponding mapping file which specifies the source IP network for that VR is responsible. The format of the .map file is like:
2 192.168.101.0/24 192.168.102.0/24 // source IP networks for that the VR is responsible |
---|
It means that: if an incoming frame is in above networks, LVRM dispatches the frame to that VR.
There are another type of files with the prefix same as filename of VR instance and a postfix ".route". Each VR instance reads the corresponding routing file which specifies the route table. The format of the .route file is like:
4 192.168.101.20/32 0:0:0:0:1:0 0:0:0:0:1:8 192.168.101.21/32 0:0:0:0:1:1 0:0:0:0:1:8 192.168.102.22/32 0:0:0:0:2:2 0:0:0:0:2:8 192.168.102.23/32 0:0:0:0:2:3 0:0:0:0:2:8 // routes on which the VR instance based, the fields are: // (i) destination IP network // (ii) destintation MAC of next-hop NIC // (iii) source MAC of local NIC to next-hop |
---|
It means that: if an incoming frame is in above networks, VR instance remaps the MACs so that the frame follows the specified NIC to the\ next-hop.
Start the LVRM with 1 VR.
usr@gw:~/lvrm$ sudo ./lvrm VRInstance/vrInstance VRInstance/vr1of1.map |
---|
Start the LVRM with 2 VRs.
usr@gw:~/lvrm$ sudo ./lvrm VRInstance/vrInstance VRInstance/vr1of2.map VRInstance/vrInstance VRInstance/vr2of2.map |
---|
The usage is:
usr@gw:~/lvrm$ sudo ./lvrm VR1 Map1 [2ndVR 2ndMapping] [3rdVR 3rdMapping] ... |
---|
A way is to set makefile marcos. Some options of marcos are:
CORE_ALLOCATOR = \ # allocation scheme # Fixed # fixed allocation # Dynamic # dynamic allocation |
---|
LATENCY_ESTIMATOR = \ # latency estimation # QueueLength # instant length # WeightedQueueLength # average length |
---|
LOAD_BALANCER = \ # balancing scheme # JSQ # join shortest queue # Rnd # random join # RR # round robin # WRR # weighted round robin |
---|
SOCKET_ADAPTER = \ # receive by # PCapFile # read from Pcap file, requiring PCap installed # PFRing # read by PF_RING, requiring PF_RING installed # Raw # read by raw socket |
---|
THROUGHPUT_ESTIMATOR = \ # throughout estimation # ArrivalTime # time between 2 frames # WeightedArrivalTime # average time between frames |
---|
Another way is to set constants in headers. Some constants are:
// lvrm/LVRM.hh int CPU = 0; // LVRM's CPU dedicated |
---|
// lvrm/VRInstanceMonitor.hh CPU_HZ = 2.4e9; // see /proc/cpuinfo |
---|
// lvrm/CoreAllocator/ int CPU_NO = 6; // max no of CPU allocated |
---|
// lvrm/CoreAllocator/DynamicCore.hh VRI_RATE_MAX = 1e5; // max foward rate of 1 instance |
---|
// lvrm/LoadBalancer/wrr.hh VRI_NO = 6; // max no of instance |
---|
// lvrm/LoadEstimator/WeightedArrivalTime.hh weight = 9; // weight of average |
---|
// lvrm/LoadEstimator/WeightedQueueLength.hh weight = 9; // weight of average |
---|
// lvrm/SocketAdapter/PCap.hh PKT_NO = 1e8; // no of packets read |
---|
// lvrm/VRInstanceAdapter.hh SHMMAX = 33554432; // see /proc/sys/kernel/shmmax |
---|