From: <ta...@us...> - 2006-12-01 07:01:49
|
Revision: 37 http://svn.sourceforge.net/crackerjack/?rev=37&view=rev Author: taru Date: 2006-11-30 23:01:48 -0800 (Thu, 30 Nov 2006) Log Message: ----------- refine sources Modified Paths: -------------- trunk/crackerjack/testcases/nanosleep/actual_sleep_time/Makefile trunk/crackerjack/testcases/nanosleep/actual_sleep_time/actual_sleep_time.c trunk/crackerjack/testcases/nanosleep/actual_sleep_time/compare Modified: trunk/crackerjack/testcases/nanosleep/actual_sleep_time/Makefile =================================================================== --- trunk/crackerjack/testcases/nanosleep/actual_sleep_time/Makefile 2006-12-01 04:08:38 UTC (rev 36) +++ trunk/crackerjack/testcases/nanosleep/actual_sleep_time/Makefile 2006-12-01 07:01:48 UTC (rev 37) @@ -1,13 +1,46 @@ +# +# Crackerjack Project +# +# Copyright (C) 2006 Red Hat Inc. All Rights Reserved. +# +# This program is free software; you can redistribute it and/or modify it +# under the terms of version 2 of the GNU General Public License as +# published by the Free Software Foundation. +# +# This program is distributed in the hope that it would be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# +# Further, this software is distributed without any warranty that it is +# free of the rightful claim of any third person regarding infringement +# or the like. Any license provided herein, whether implied or +# otherwise, applies only to this software file. Patent licenses, if +# any, provided herein do not apply to combinations of this program with +# other software, or any other product whatsoever. +# +# You should have received a copy of the GNU General Public License along +# with this program; if not, write the Free Software Foundation, Inc., 59 +# Temple Place - Suite 330, Boston MA 02111-1307, USA. +# +# $Id: test.c 34 2006-12-01 03:54:47Z kyagi $ +# +INPUT_START ?= 1000000 +INPUT_END ?= 1000000 +INPUT_STEP ?= 5000000 +SAMPLE_SIZE ?= 1000 + +CFLAGS := $(CFLAGS) -DINPUT_START=$(INPUT_START) -DINPUT_END=$(INPUT_END) -DINPUT_STEP=$(INPUT_STEP) -DSAMPLE_SIZE=$(SAMPLE_SIZE) + test: actual_sleep_time.c - $(CC) -o $@ $< + $(CC) -o $@ $(CFLAGS) $< check: test ./test > test.log.1 sleep 1 ./test > test.log.2 ./compare test.log.1 test.log.2 -# /bin/rm -rf test.log.* + /bin/rm -rf test.log.* clean: /bin/rm -rf test.log.* test Modified: trunk/crackerjack/testcases/nanosleep/actual_sleep_time/actual_sleep_time.c =================================================================== --- trunk/crackerjack/testcases/nanosleep/actual_sleep_time/actual_sleep_time.c 2006-12-01 04:08:38 UTC (rev 36) +++ trunk/crackerjack/testcases/nanosleep/actual_sleep_time/actual_sleep_time.c 2006-12-01 07:01:48 UTC (rev 37) @@ -25,46 +25,80 @@ * $Id: test.c 34 2006-12-01 03:54:47Z kyagi $ * */ - #include <sys/time.h> #include <time.h> #include <stdio.h> - #include <sched.h> +#include <stdlib.h> +#include <errno.h> +#ifndef INPUT_START + #define INPUT_START 1000000 /* 1ms */ +#endif +#ifndef INPUT_END + #define INPUT_END 10000000 /* 10ms */ +#endif +#ifndef INPUT_STEP + #define INPUT_STEP 5000000 /* 5ms */ +#endif +#ifndef SAMPLE_SIZE + #define SAMPLE_SIZE 1000 +#endif + +void print_result( long tv_nsec, struct timeval *start, struct timeval *end ) { + /* print the result */ + printf( "%10d, %d.%06d\n", tv_nsec, + end->tv_sec - start->tv_sec - + (((end->tv_usec - start->tv_usec)<0)?1:0), + end->tv_usec - start->tv_usec + + (( (end->tv_usec - start->tv_usec)<0)?1000000:0)); +} + int main() { - int i; - int nanosec; + int i; + int tv_nsec; - struct timespec req = { - 0, - //10000000 - //1000000 - }; + struct timespec req = { + 0, + }; - struct timeval start, end; - struct sched_param param; + struct timeval start, end; + struct sched_param param; - // init - sched_getparam( 0, ¶m ); - param.sched_priority = 1; - sched_setscheduler( 0, SCHED_FIFO, ¶m ); + /* initialize schedular */ + if( sched_getparam( 0, ¶m ) < 0 ) { + perror("sched_getparam"); + exit(errno); + } + param.sched_priority = 1; + if( sched_setscheduler( 0, SCHED_FIFO, ¶m ) < 0 ) { + perror("sched_setscheduler"); + exit(errno); + } + /* calculates the actual time for nanosleep */ + for( tv_nsec = INPUT_START; tv_nsec < INPUT_END; + tv_nsec += INPUT_STEP ) { + req.tv_nsec = tv_nsec; + for( i = 0; i < SAMPLE_SIZE; i++ ) { + if( gettimeofday( &start, NULL ) < 0 ) { + perror("gettimeofday"); + exit(errno); + } + if( nanosleep( &req, NULL ) < 0 ) { + perror("nanosleep"); + exit(errno); + } + if( gettimeofday( &end, NULL ) < 0 ) { + perror("gettimeofday"); + exit(errno); + } + print_result( tv_nsec, &start, &end ); + } + } - for( nanosec = 1000000; nanosec < 2000000; nanosec += 5000000 ) { - req.tv_nsec = nanosec; - for( i = 0; i < 10; i++ ) { - gettimeofday( &start, NULL ); - nanosleep( &req, NULL ); - gettimeofday( &end, NULL ); - printf( "%10d, %d.%06d\n", nanosec, end.tv_sec - start.tv_sec - (((end.tv_usec - start.tv_usec)<0)?1:0), end.tv_usec - start.tv_usec + (( (end.tv_usec - start.tv_usec) < 0)?1000000:0) ); - } - } + return 0; - //printf( "start: %d.%d\n", start.tv_sec, start.tv_usec ); - return 0; - } - Modified: trunk/crackerjack/testcases/nanosleep/actual_sleep_time/compare =================================================================== --- trunk/crackerjack/testcases/nanosleep/actual_sleep_time/compare 2006-12-01 04:08:38 UTC (rev 36) +++ trunk/crackerjack/testcases/nanosleep/actual_sleep_time/compare 2006-12-01 07:01:48 UTC (rev 37) @@ -1,4 +1,30 @@ #!/usr/bin/env ruby +# +# Crackerjack Project +# +# Copyright (C) 2006 Red Hat Inc. All Rights Reserved. +# +# This program is free software; you can redistribute it and/or modify it +# under the terms of version 2 of the GNU General Public License as +# published by the Free Software Foundation. +# +# This program is distributed in the hope that it would be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# +# Further, this software is distributed without any warranty that it is +# free of the rightful claim of any third person regarding infringement +# or the like. Any license provided herein, whether implied or +# otherwise, applies only to this software file. Patent licenses, if +# any, provided herein do not apply to combinations of this program with +# other software, or any other product whatsoever. +# +# You should have received a copy of the GNU General Public License along +# with this program; if not, write the Free Software Foundation, Inc., 59 +# Temple Place - Suite 330, Boston MA 02111-1307, USA. +# +# $Id: test.c 34 2006-12-01 03:54:47Z kyagi $ +# class Count @@ -7,7 +33,7 @@ def initialize( csv ) @count = {} if csv != nil then - open(csv).each_line do |x| + csv.each_line do |x| column = x.strip().split(",") @count[column[1]] = 0 if !@count.has_key?(column[1]) @count[column[1]] += 1 @@ -46,16 +72,18 @@ end -count0 = Count.new( ARGV[0] ) -count1 = Count.new( ARGV[1] ) -avg = ((count0 + count1) / 2) +count = [] +for i in (0..1) + IO.popen("grep ' 1000000,' #{ARGV[i]}") { |io| + count[i] = Count.new( ARGV[i] ) + } +end +avg = ((count[0] + count[1]) / 2) -#puts count0 - sum = 0 avg.count.each_key do |k| val = 0 - val = count0.count[k] if count0.count.has_key?(k) + val = count[0].count[k] if count[0].count.has_key?(k) sum += (avg.count[k]-val)*(avg.count[k]-val) end This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |