summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--TODO5
-rw-r--r--rteval.spec5
-rw-r--r--rteval/hackbench.py2
-rw-r--r--rteval/rteval.py69
-rw-r--r--rteval/rtevalclient.py3
-rw-r--r--server/rtevaldb.py24
-rw-r--r--server/xmlrpc_API1.py4
7 files changed, 89 insertions, 23 deletions
diff --git a/TODO b/TODO
index bcae0f5..2c8017d 100644
--- a/TODO
+++ b/TODO
@@ -19,5 +19,8 @@
- AMQP latencytest/perftest (over loopback)
- bonnie/bonnie++
- iozone
+ - KVM running guest OS
-
+4. Add an option to run 'perf record' while a run is in progress. This is
+ mainly a diagnostic option to debug *why* something is performing
+ poorly.
diff --git a/rteval.spec b/rteval.spec
index 6b1c4d0..949f840 100644
--- a/rteval.spec
+++ b/rteval.spec
@@ -2,7 +2,7 @@
%{!?python_ver: %define python_ver %(%{__python} -c "import sys ; print sys.version[:3]")}
Name: rteval
-Version: 1.32
+Version: 1.33
Release: 1%{?dist}
Summary: Utility to evaluate system suitability for RT Linux
@@ -71,6 +71,9 @@ rm -rf $RPM_BUILD_ROOT
/usr/bin/rteval
%changelog
+* Sat May 14 2011 Clark Williams <williams@redhat.com> - 1.33-1
+- modify hackbench cutoff to be 0.75GB/core
+
* Mon Aug 23 2010 Clark Williams <williams@redhat.com> - 1.32-1
- update docs
- refactor some RTEval methods to utility functions
diff --git a/rteval/hackbench.py b/rteval/hackbench.py
index c088072..42a6ca7 100644
--- a/rteval/hackbench.py
+++ b/rteval/hackbench.py
@@ -56,7 +56,7 @@ class Hackbench(load.Load):
elif units == 'TB':
mem = mem * 1024
ratio = float(mem) / float(self.num_cpus)
- if ratio >= 1.0:
+ if ratio >= 0.75:
mult = float(self.params.setdefault('jobspercore', 2))
else:
print "hackbench: low memory system (%f GB/core)! Not running\n" % ratio
diff --git a/rteval/rteval.py b/rteval/rteval.py
index 540f719..aa920b1 100644
--- a/rteval/rteval.py
+++ b/rteval/rteval.py
@@ -74,7 +74,7 @@ def sigterm_handler(signum, frame):
class RtEval(object):
def __init__(self, cmdargs):
- self.version = "1.32"
+ self.version = "1.33"
self.load_modules = []
self.workdir = os.getcwd()
self.reportdir = os.getcwd()
@@ -471,30 +471,59 @@ class RtEval(object):
while rl != '' :
rl = route.readline()
splt = rl.split("\t")
- if len(splt) > 2 and splt[2] != '00000000': # Only catch default route
+ # Only catch default route
+ if len(splt) > 2 and splt[2] != '00000000' and splt[1] == '00000000':
defgw4 = splt[0]
break
route.close()
- # Get lists over all devices, remove loopback device
- ifdevs = ethtool.get_active_devices()
- ifdevs.remove('lo')
- ifdevs.sort()
-
# Make an interface tag for each device found
- for dev in ifdevs:
- self.xmlreport.openblock('interface',
- {'device': dev,
- 'hwaddr': ethtool.get_hwaddr(dev)}
- )
- # Protcol configurations
- self.xmlreport.openblock('IPv4',
- {'ipaddr': ethtool.get_ipaddr(dev),
- 'netmask': ethtool.get_netmask(dev),
- 'defaultgw': (defgw4 == dev) and '1' or '0'}
- )
- self.xmlreport.closeblock()
- self.xmlreport.closeblock()
+ if hasattr(ethtool, 'get_interfaces_info'):
+ # Using the newer python-ethtool API (version >= 0.4)
+ for dev in ethtool.get_interfaces_info(ethtool.get_devices()):
+ if cmp(dev.device,'lo') == 0:
+ continue
+
+ self.xmlreport.openblock('interface',
+ {'device': dev.device,
+ 'hwaddr': dev.mac_address}
+ )
+
+ # Protcol configurations
+ if dev.ipv4_address:
+ self.xmlreport.openblock('IPv4',
+ {'ipaddr': dev.ipv4_address,
+ 'netmask': dev.ipv4_netmask,
+ 'broadcast': dev.ipv4_broadcast,
+ 'defaultgw': (defgw4 == dev.device) and '1' or '0'}
+ )
+ self.xmlreport.closeblock()
+
+ for ip6 in dev.get_ipv6_addresses():
+ self.xmlreport.openblock('IPv6',
+ {'ipaddr': ip6.address,
+ 'netmask': ip6.netmask,
+ 'scope': ip6.scope}
+ )
+ self.xmlreport.closeblock()
+ self.xmlreport.closeblock()
+ else: # Fall back to older python-ethtool API (version < 0.4)
+ ifdevs = ethtool.get_active_devices()
+ ifdevs.remove('lo')
+ ifdevs.sort()
+
+ for dev in ifdevs:
+ self.xmlreport.openblock('interface',
+ {'device': dev,
+ 'hwaddr': ethtool.get_hwaddr(dev)}
+ )
+ self.xmlreport.openblock('IPv4',
+ {'ipaddr': ethtool.get_ipaddr(dev),
+ 'netmask': ethtool.get_netmask(dev),
+ 'defaultgw': (defgw4 == dev) and '1' or '0'}
+ )
+ self.xmlreport.closeblock()
+ self.xmlreport.closeblock()
self.xmlreport.closeblock()
self.xmlreport.openblock('loads', {'load_average':str(accum / samples)})
diff --git a/rteval/rtevalclient.py b/rteval/rtevalclient.py
index b8bf8cd..190958b 100644
--- a/rteval/rtevalclient.py
+++ b/rteval/rtevalclient.py
@@ -46,6 +46,9 @@ class rtevalclient:
def Hello(self):
return self.srv.Hello(self.hostname)
+ def DatabaseStatus(self):
+ return self.srv.DatabaseStatus()
+
def SendReport(self, xmldoc):
if xmldoc.type != 'document_xml':
raise Exception, "Input is not XML document"
diff --git a/server/rtevaldb.py b/server/rtevaldb.py
index d8453c9..7a0ccaf 100644
--- a/server/rtevaldb.py
+++ b/server/rtevaldb.py
@@ -48,3 +48,27 @@ def register_submission(config, clientid, filename, debug=False, noaction=False)
dbc.COMMIT()
return res[0]
+def database_status(config, debug=False, noaction=False):
+ dbc = Database(host=config.db_server, port=config.db_port, database=config.database,
+ user=config.db_username, password=config.db_password,
+ debug=debug, noaction=noaction)
+ if not dbc:
+ return {"status": "No connection to pgsql://%s:%s/%s" % (config.db_server,
+ config.db_port,
+ config.database)}
+
+ res = dbc.SELECT('rtevalruns',
+ ["to_char(CURRENT_TIMESTAMP, 'YYYY-MM-DD HH24:MI:SS') AS server_time",
+ "max(rterid) AS last_rterid",
+ "max(submid) AS last_submid"]
+ )
+ if len(res) != 3:
+ return {"status": "Could not query database pgsql://%s:%s/%s" % (config.db_server,
+ config.db_port,
+ config.database)}
+ return {"status": "OK",
+ "server_time": res['records'][0][0],
+ "last_rterid": res['records'][0][1],
+ "last_submid": res['records'][0][2]
+ }
+
diff --git a/server/xmlrpc_API1.py b/server/xmlrpc_API1.py
index e874b5c..71e23d6 100644
--- a/server/xmlrpc_API1.py
+++ b/server/xmlrpc_API1.py
@@ -110,3 +110,7 @@ class XMLRPC_API1():
return {"greeting": "Hello %s" % clientid,
"server": platform.node(),
"APIversion": self.apiversion}
+
+
+ def DatabaseStatus(self):
+ return rtevaldb.database_status(self.config)