On Fri, 2009-08-28 at 15:45 +0530, Poornima Nayak wrote:
> Developed new functions to support ILB test execution and result verification.
> Minimal changes has been done for exisitng function to support ILB
> test execution.
>
> Signed-off-by: poornima nayak <[email protected]>
Thanks.
>
> diff -uprN ltp_orig/testcases/kernel/power_management/lib/sched_mc.py
> ltp/testcases/kernel/power_management/lib/sched_mc.py
> --- ltp_orig/testcases/kernel/power_management/lib/sched_mc.py
> 2009-08-28 10:54:59.000000000 +0530
> +++ ltp/testcases/kernel/power_management/lib/sched_mc.py 2009-08-28
> 12:24:55.000000000 +0530
> @@ -15,8 +15,12 @@ cpu_map = {}
> stats_start = {}
> stats_stop = {}
> stats_percentage = {}
> +intr_start = []
> +intr_stop = []
> cpu_count = 0
> socket_count = 0
> +cpu1_max_intr = 0
> +cpu2_max_intr = 0
>
> def clear_dmesg():
> '''
> @@ -162,6 +166,23 @@ def get_proc_data(stats_list):
> print "Could not read statistics", e
> sys.exit(1)
>
> +def get_proc_loc_count(loc_stats):
> + ''' Read /proc/stat info and store in dictionary
> + '''
> + try:
> + file_procstat = open("/proc/interrupts", 'r')
> + for line in file_procstat:
> + if line.startswith('LOC:'):
> + data = line.split()
> + for i in range(0, cpu_count):
> + # To skip LOC
> + loc_stats.append(data[i+1])
> + file_procstat.close()
> + except Exception, details:
> + print "Could not read interrupt statistics", details
> + sys.exit(1)
> +
> +
> def set_sched_mc_power(sched_mc_level):
> ''' Routine to set sched_mc_power_savings to required level
> '''
> @@ -184,7 +205,23 @@ def set_sched_smt_power(sched_smt_level)
> print "Could not set sched_smt_power_savings to", sched_smt_level, e
> sys.exit(1)
>
> -def trigger_ebizzy (stress, duration, background):
> +def set_timer_migration_interface(value):
> + ''' Set value of timer migration interface to a value
> + passed as argument
> + '''
> + try:
> + os.system('echo %s > \
> + /proc/sys/kernel/timer_migration 2>/dev/null' % value)
> + except OSError, e:
> + print "Could not set timer_migration to ", value, e
> + sys.exit(1)
> +
> +def start_cyclictest():
> + ''' Trigger cyclictest in background to increase
> + timer interrupts
> + '''
> +
> +def trigger_ebizzy (stress, duration, background, pinned):
> ''' Triggers ebizzy workload for sched_mc=1
> testing
> '''
> @@ -197,6 +234,9 @@ def trigger_ebizzy (stress, duration, ba
> threads = threads / get_hyper_thread_count()
> if stress == "full":
> threads = cpu_count
> + if stress == "single_job":
> + threads = 1
> + duration = 180
>
> olddir = os.getcwd()
> path = '%s/utils/benchmark' % os.environ['LTPROOT']
> @@ -220,7 +260,10 @@ def trigger_ebizzy (stress, duration, ba
> if background == "yes":
> succ = os.system('./ebizzy -t%s -s4096 -S %s >/dev/null
> &' % (threads, duration))
> else:
> - succ = os.system('./ebizzy -t%s -s4096 -S %s >/dev/null'
> % (threads, duration))
> + if pinned == "yes":
> + succ = os.system('taskset -c %s ./ebizzy -t%s -s4096
> -S %s >/dev/null' % (cpu_count -1, threads, duration))
> + else:
> + succ = os.system('./ebizzy -t%s -s4096 -S %s
> >/dev/null' % (threads, duration))
>
> if succ == 0:
> print "INFO: ebizzy workload triggerd"
> @@ -238,7 +281,7 @@ def trigger_ebizzy (stress, duration, ba
> print "Ebizzy workload trigger failed ", details
> sys.exit(1)
>
> -def trigger_kernbench (stress, background):
> +def trigger_kernbench (stress, background, pinned):
> ''' Trigger load on system like kernbench.
> Copys existing copy of LTP into as LTP2 and then builds it
> with make -j
> @@ -253,6 +296,8 @@ def trigger_kernbench (stress, backgroun
> threads = threads / get_hyper_thread_count()
> if stress == "full":
> threads = cpu_count
> + if stress == "single_job":
> + threads = 1
>
> dst_path = "/root"
> olddir = os.getcwd()
> @@ -283,27 +328,31 @@ def trigger_kernbench (stress, backgroun
> else:
> print "INFO: Linux kernel source not found. Kernbench cannot be
> executed"
> sys.exit(1)
> -
> +
> get_proc_data(stats_start)
> - os.system ( '%s/kernbench -o %s -M -H -n 1 >/dev/null 2>&1' %
> (benchmark_path, threads))
> - print threads
> + get_proc_loc_count(intr_start)
> + if pinned == "yes":
> + os.system ( 'taskset -c %s %s/kernbench -o %s -M -H -n 1
> >/dev/null 2>&1' % (cpu_count-1, benchmark_path, threads))
> + else:
> + os.system ( '%s/kernbench -o %s -M -H -n 1 >/dev/null 2>&1' %
> (benchmark_path, threads))
>
> print "INFO: Workload kernbench triggerd"
> os.chdir(olddir)
> get_proc_data(stats_stop)
> + get_proc_loc_count(intr_stop)
> except Exception, details:
> - print "Workload trigger kernbench failed ", details
> + print "Workload kernbench trigger failed ", details
> sys.exit(1)
>
> -def trigger_workld(workload, stress, duration, background):
> +def trigger_workld(workload, stress, duration, background, pinned):
> ''' Triggers workload passed as argument. Number of threads
> triggered is based on stress value.
> '''
> try:
> if workload == "ebizzy":
> - trigger_ebizzy (stress, duration, background)
> + trigger_ebizzy (stress, duration, background, pinned)
> if workload == "kernbench":
> - trigger_kernbench (stress, background)
> + trigger_kernbench (stress, background, pinned)
> except Exception, details:
> print "INFO: Trigger workload failed", details
> sys.exit(1)
> @@ -386,6 +435,22 @@ def generate_report():
> print >> keyvalfile
> keyvalfile.close()
>
> +def generate_loc_intr_report():
> + ''' Generate interrupt report of CPU's
> + '''
> + if (not os.path.exists('/procstat')):
> + os.mkdir('/procstat')
> +
> + reportfile = open('/procstat/cpu-loc_interrupts', 'a')
> + print >> reportfile,
> "=============================================================="
> + print >> reportfile, " Local timer interrupt stats
> "
> + print >> reportfile,
> "=============================================================="
> + for i in range(0, cpu_count):
> + intr_stop[i] = int(intr_stop[i]) - int(intr_start[i])
> + print >> reportfile, "CPU%s: %s" %(i, intr_stop[i])
> + print >> reportfile
> + reportfile.close()
> +
> def expand_range(range_val):
> '''
> Expand the range of value into actual numbers
> @@ -462,6 +527,7 @@ def validate_cpugrp_map(cpu_group, sched
> pkg_cpus = cpu_map[pkg]
> if pkg_cpus == cpu_group:
> return(0)
> +
> return(1)
> except Exception, details:
> print "Exception in validate_cpugrp_map: ", details
> @@ -540,6 +606,53 @@ def validate_cpu_consolidation(work_ld,
> print "Exception in validate_cpu_consolidation: ", details
> sys.exit(1)
>
> +def get_cpuid_max_intr_count():
> + '''Return the cpu id's of two cpu's with highest number of intr'''
> + try:
> + highest = 0
> + second_highest = 0
> + global cpu1_max_intr, cpu2_max_intr
> + #Skipping CPU0 as it is generally high
> + for i in range(1, cpu_count):
> + if int(intr_stop[i]) > int(highest):
> + if highest != 0:
> + second_highest = highest
> + cpu2_max_intr = cpu1_max_intr
> + highest = int(intr_stop[i])
> + cpu1_max_intr = i
> + else:
> + if int(intr_stop[i]) > int(second_highest):
> + second_highest = int(intr_stop[i])
> + cpu2_max_intr = i
> + for i in range(1, cpu_count):
> + if i != cpu1_max_intr and i != cpu2_max_intr:
> + diff = second_highest - intr_stop[i]
> + ''' Threshold of difference has to be manipulated with
> multiple test'''
> + if diff < 10000:
> + print "INFO: Difference in interrupt count is below
> threshold"
> + return 1
> + print "INFO: Interrupt count in other CPU's low as expected"
> + return 0
> + except Exception, details:
> + print "Exception in get_cpuid_max_intr_count: ", details
> + sys.exit(1)
> +
> +def validate_ilb (sched_mc_level, sched_smt_level):
> + ''' Validate if ilb is running in same package where work load is running
> + '''
> + try:
> + status = get_cpuid_max_intr_count()
> + if status == 1:
> + return 1
> + for pkg in sorted(cpu_map.keys()):
> + if cpu1_max_intr in cpu_map[pkg] and cpu2_max_intr in
> cpu_map[pkg]:
> + return 0
> + print "INFO: CPUs with higher interrupt count is not in same package"
> + return 1
> + except Exception, details:
> + print "Exception in validate_ilb: ", details
> + sys.exit(1)
> +
> def reset_schedmc():
> ''' Routine to reset sched_mc_power_savings to Zero level
> '''
>
> ------------------------------------------------------------------------------
> Let Crystal Reports handle the reporting - Free Crystal Reports 2008 30-Day
> trial. Simplify your report design, integration and deployment - and focus on
> what you do best, core application coding. Discover what's new with
> Crystal Reports now. http://p.sf.net/sfu/bobj-july
> _______________________________________________
> Ltp-list mailing list
> [email protected]
> https://lists.sourceforge.net/lists/listinfo/ltp-list
------------------------------------------------------------------------------
Let Crystal Reports handle the reporting - Free Crystal Reports 2008 30-Day
trial. Simplify your report design, integration and deployment - and focus on
what you do best, core application coding. Discover what's new with
Crystal Reports now. http://p.sf.net/sfu/bobj-july
_______________________________________________
Ltp-list mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/ltp-list