132 lines
2.8 KiB
132 lines
2.8 KiB
#!/usr/bin/python2
|
|
# -*- coding: utf-8 -*-
|
|
"""
|
|
Interactive python script for testing cgroups. It will try to use system
|
|
resources such as cpu, memory and device IO. The other cgroups test
|
|
instrumentation will inspect whether the linux box behaved as it should.
|
|
|
|
@copyright: 2011 Red Hat Inc.
|
|
@author: Lukas Doktor <ldoktor@redhat.com>
|
|
"""
|
|
import array, sys, time, math, os
|
|
from tempfile import mktemp
|
|
|
|
def test_smoke(args):
|
|
"""
|
|
SIGSTOP the process and after SIGCONT exits.
|
|
"""
|
|
print "TEST: smoke"
|
|
print "TEST: wait for input"
|
|
raw_input()
|
|
print "PASS: smoke"
|
|
|
|
|
|
def test_memfill(args):
|
|
"""
|
|
SIGSTOP and after SIGCONT fills the memory up to size size.
|
|
"""
|
|
size = 1024
|
|
f = sys.stdout
|
|
if args:
|
|
size = int(args[0])
|
|
if len(args) > 1:
|
|
f = open(args[1], 'w', 0)
|
|
print "TEST: memfill (%dM)" % size
|
|
print "Redirecting to: %s" % f.name
|
|
f.write("TEST: memfill (%dM)\n" % size)
|
|
f.write("TEST: wait for input\n")
|
|
raw_input()
|
|
mem = array.array('B')
|
|
buf = ""
|
|
for i in range(1024 * 1024):
|
|
buf += '\x00'
|
|
for i in range(size):
|
|
mem.fromstring(buf)
|
|
f.write("TEST: %dM\n" % i)
|
|
try:
|
|
f.flush()
|
|
os.fsync(f)
|
|
except:
|
|
pass
|
|
f.write("PASS: memfill (%dM)\n" % size)
|
|
|
|
|
|
def test_cpu(args):
|
|
"""
|
|
Stress the CPU.
|
|
"""
|
|
print "TEST: cpu"
|
|
print "TEST: wait for input"
|
|
raw_input()
|
|
while True:
|
|
for i in range (1000, 10000):
|
|
math.factorial(i)
|
|
|
|
|
|
def test_devices(args):
|
|
if args:
|
|
if args[0] == "write":
|
|
test_devices_write()
|
|
else:
|
|
test_devices_read()
|
|
else:
|
|
test_devices_read()
|
|
|
|
|
|
def test_devices_read():
|
|
"""
|
|
Inf read from /dev/zero
|
|
"""
|
|
print "TEST: devices read"
|
|
print "TEST: wait for input"
|
|
raw_input()
|
|
|
|
dev = open("/dev/zero", 'r')
|
|
while True:
|
|
print "TEST: tick"
|
|
dev.flush()
|
|
dev.read(1024*1024)
|
|
time.sleep(1)
|
|
|
|
|
|
def test_devices_write():
|
|
"""
|
|
Inf write into /dev/null device
|
|
"""
|
|
print "TEST: devices write"
|
|
print "TEST: wait for input"
|
|
raw_input()
|
|
|
|
dev = open("/dev/null", 'w')
|
|
buf = ""
|
|
for _ in range(1024*1024):
|
|
buf += '\x00'
|
|
while True:
|
|
print "TEST: tick"
|
|
dev.write(buf)
|
|
dev.flush()
|
|
time.sleep(1)
|
|
|
|
|
|
def main():
|
|
"""
|
|
Main (infinite) loop.
|
|
"""
|
|
if len(sys.argv) < 2:
|
|
print "FAIL: Incorrect usage (%s)" % sys.argv
|
|
return -1
|
|
args = sys.argv[2:]
|
|
if sys.argv[1] == "smoke":
|
|
test_smoke(args)
|
|
elif sys.argv[1] == "memfill":
|
|
test_memfill(args)
|
|
elif sys.argv[1] == "cpu":
|
|
test_cpu(args)
|
|
elif sys.argv[1] == "devices":
|
|
test_devices(args)
|
|
else:
|
|
print "FAIL: No test specified (%s)" % sys.argv
|
|
|
|
if __name__ == "__main__":
|
|
main()
|