Shriram Rajagopalan
2011-Apr-07 20:06 UTC
[Xen-devel] [SPAM] [PATCH] remus: blackhole replication target
# HG changeset patch
# User Shriram Rajagopalan <rshriram@cs.ubc.ca>
# Date 1302206497 25200
# Node ID d7b7aef658dd962e13d29c851a28fde89b690e2e
# Parent a73514445065390ae70c44e1708971dd6fa2a6f0
remus: blackhole replication target
The new --null option allows one to test and play with just the
memory checkpointing and network buffering aspect of remus, without
the need for a second host. The disk is not replicated. All replication
data is sent to /dev/null. This option is pretty handy when a user
wants to see the page churn for his workload or observe the latency hit
though the latter will not be accurate.
Signed-off-by: Shriram Rajagopalan <rshriram@cs.ubc.ca>
diff -r a73514445065 -r d7b7aef658dd tools/python/xen/remus/save.py
--- a/tools/python/xen/remus/save.py Thu Apr 07 12:36:39 2011 -0700
+++ b/tools/python/xen/remus/save.py Thu Apr 07 13:01:37 2011 -0700
@@ -95,6 +95,12 @@
self.sock = sock
super(MigrationSocket, self).__init__(fd)
+class NullSocket(_proxy):
+ def __init__(self, address):
+ filedesc = os.open(''/dev/null'', 0666)
+ fd = os.fdopen(filedesc, ''w+'')
+ super(NullSocket, self).__init__(fd)
+
class Keepalive(object):
"Call a keepalive method at intervals"
def __init__(self, method, interval=0.1):
diff -r a73514445065 -r d7b7aef658dd tools/remus/remus
--- a/tools/remus/remus Thu Apr 07 12:36:39 2011 -0700
+++ b/tools/remus/remus Thu Apr 07 13:01:37 2011 -0700
@@ -21,6 +21,7 @@
self.domid = 0
self.host = ''localhost''
+ self.nullremus = False
self.port = XendOptions.instance().get_xend_relocation_port()
self.interval = 200
self.netbuffer = True
@@ -33,6 +34,8 @@
help=''checkpoint every MS
milliseconds'')
parser.add_option(''-p'', ''--port'',
dest=''port'', type=''int'',
help=''send stream to port PORT'',
metavar=''PORT'')
+ parser.add_option('''',
''--blackhole'', dest=''nullremus'',
action=''store_true'',
+ help=''replicate to /dev/null (no disk
checkpoints, only memory & net buffering)'')
parser.add_option('''', ''--no-net'',
dest=''nonet'', action=''store_true'',
help=''run without net buffering (benchmark
option)'')
parser.add_option('''', ''--timer'',
dest=''timer'', action=''store_true'',
@@ -49,6 +52,8 @@
self.interval = opts.interval
if opts.port:
self.port = opts.port
+ if opts.nullremus:
+ self.nullremus = True
if opts.nonet:
self.netbuffer = False
if opts.timer:
@@ -107,18 +112,22 @@
bufs = []
# disks must commit before network can be released
- for disk in dom.disks:
- try:
- bufs.append(ReplicatedDisk(disk))
- except ReplicatedDiskException, e:
- print e
- continue
+ if not cfg.nullremus:
+ for disk in dom.disks:
+ try:
+ bufs.append(ReplicatedDisk(disk))
+ except ReplicatedDiskException, e:
+ print e
+ continue
if cfg.netbuffer:
for vif in dom.vifs:
bufs.append(BufferedNIC(vif))
- fd = save.MigrationSocket((cfg.host, cfg.port))
+ if cfg.nullremus:
+ fd = save.NullSocket((cfg.host, cfg.port))
+ else:
+ fd = save.MigrationSocket((cfg.host, cfg.port))
def postsuspend():
''Begin external checkpointing after domain has
paused''
_______________________________________________
Xen-devel mailing list
Xen-devel@lists.xensource.com
http://lists.xensource.com/xen-devel