diff options
author | Shriram Rajagopalan <rshriram@cs.ubc.ca> | 2011-08-30 17:23:10 +0100 |
---|---|---|
committer | Shriram Rajagopalan <rshriram@cs.ubc.ca> | 2011-08-30 17:23:10 +0100 |
commit | 16d9581cf7f1c45974304ef93dd32bfff77c5ed4 (patch) | |
tree | 0361f5c70d300e8101c9da1e1b5d49dc0b45cf01 | |
parent | e1e0d85b4d0d89db66bfe3006d028e458b4026b1 (diff) | |
download | xen-16d9581cf7f1c45974304ef93dd32bfff77c5ed4.tar.gz xen-16d9581cf7f1c45974304ef93dd32bfff77c5ed4.tar.bz2 xen-16d9581cf7f1c45974304ef93dd32bfff77c5ed4.zip |
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>
Committed-by: Ian Jackson <ian.jackson@eu.citrix.com>
xen-unstable changeset: 23196:29d81623dc14
Backport-requested-by: Shriram Rajagopalan <rshriram@gmail.com>
Committed-by: Ian Jackson <ian.jackson@eu.citrix.com>
-rw-r--r-- | tools/python/xen/remus/save.py | 6 | ||||
-rw-r--r-- | tools/remus/remus | 23 |
2 files changed, 22 insertions, 7 deletions
diff --git a/tools/python/xen/remus/save.py b/tools/python/xen/remus/save.py index 9858aec571..0c86eeb55f 100644 --- a/tools/python/xen/remus/save.py +++ b/tools/python/xen/remus/save.py @@ -95,6 +95,12 @@ class MigrationSocket(_proxy): 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 --git a/tools/remus/remus b/tools/remus/remus index 11d83e418f..93a7eb8415 100644 --- a/tools/remus/remus +++ b/tools/remus/remus @@ -21,6 +21,7 @@ class Cfg(object): 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 @@ class Cfg(object): 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 @@ class Cfg(object): 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 @@ def run(cfg): 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' |