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>
This commit is contained in:
Shriram Rajagopalan committed 2011-04-08 16:49:25 +01:00
1 parent d732509e34
commit 5bb2e121f0
2 files changed
+22 -7

No files matched your search

+6
View File
@@ -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):
+16 -7
View File
@@ -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'
Reference in new issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.