13c744274b453bf857361a94a6950422215c529a9subrata_modak/******************************************************************************/ 23c744274b453bf857361a94a6950422215c529a9subrata_modak/* */ 33c744274b453bf857361a94a6950422215c529a9subrata_modak/* Copyright (c) International Business Machines Corp., 2007 */ 43c744274b453bf857361a94a6950422215c529a9subrata_modak/* */ 53c744274b453bf857361a94a6950422215c529a9subrata_modak/* This program is free software; you can redistribute it and/or modify */ 63c744274b453bf857361a94a6950422215c529a9subrata_modak/* it under the terms of the GNU General Public License as published by */ 73c744274b453bf857361a94a6950422215c529a9subrata_modak/* the Free Software Foundation; either version 2 of the License, or */ 83c744274b453bf857361a94a6950422215c529a9subrata_modak/* (at your option) any later version. */ 93c744274b453bf857361a94a6950422215c529a9subrata_modak/* */ 103c744274b453bf857361a94a6950422215c529a9subrata_modak/* This program is distributed in the hope that it will be useful, */ 113c744274b453bf857361a94a6950422215c529a9subrata_modak/* but WITHOUT ANY WARRANTY; without even the implied warranty of */ 123c744274b453bf857361a94a6950422215c529a9subrata_modak/* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See */ 133c744274b453bf857361a94a6950422215c529a9subrata_modak/* the GNU General Public License for more details. */ 143c744274b453bf857361a94a6950422215c529a9subrata_modak/* */ 153c744274b453bf857361a94a6950422215c529a9subrata_modak/* You should have received a copy of the GNU General Public License */ 163c744274b453bf857361a94a6950422215c529a9subrata_modak/* along with this program; if not, write to the Free Software */ 174548c6cf9bcdd96d8303caa4130ab638b61f8a30Wanlong Gao/* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ 183c744274b453bf857361a94a6950422215c529a9subrata_modak/* */ 193c744274b453bf857361a94a6950422215c529a9subrata_modak/******************************************************************************/ 203c744274b453bf857361a94a6950422215c529a9subrata_modak 213c744274b453bf857361a94a6950422215c529a9subrata_modak/******************************************************************************/ 223c744274b453bf857361a94a6950422215c529a9subrata_modak/* */ 233c744274b453bf857361a94a6950422215c529a9subrata_modak/* File: cpuctl_test04.c */ 243c744274b453bf857361a94a6950422215c529a9subrata_modak/* */ 253c744274b453bf857361a94a6950422215c529a9subrata_modak/* Description: This is a c program that tests the cpucontroller fairness of */ 263c744274b453bf857361a94a6950422215c529a9subrata_modak/* scheduling the tasks according to their group shares. This */ 273c744274b453bf857361a94a6950422215c529a9subrata_modak/* testcase tests the ability of the cpu controller to provide */ 283c744274b453bf857361a94a6950422215c529a9subrata_modak/* fairness for share values (absolute). */ 293c744274b453bf857361a94a6950422215c529a9subrata_modak/* */ 3072d13509bbe99a677e7b764d4f2f39e2b03b2f81subrata_modak/* Total Tests: 2 */ 313c744274b453bf857361a94a6950422215c529a9subrata_modak/* */ 328e843c6a701cc4de95ca6cc501ba5ee901be3a5asubrata_modak/* Test 09: Heavy stress test with nice value change */ 338e843c6a701cc4de95ca6cc501ba5ee901be3a5asubrata_modak/* Test 10: Heavy stress test (effect of heavy group on light group) */ 348e843c6a701cc4de95ca6cc501ba5ee901be3a5asubrata_modak/* */ 353c744274b453bf857361a94a6950422215c529a9subrata_modak/* Test Name: cpu_controller_test04 */ 363c744274b453bf857361a94a6950422215c529a9subrata_modak/* */ 373c744274b453bf857361a94a6950422215c529a9subrata_modak/* Test Assertion */ 383c744274b453bf857361a94a6950422215c529a9subrata_modak/* Please refer to the file cpuctl_testplan.txt */ 393c744274b453bf857361a94a6950422215c529a9subrata_modak/* */ 40d3ba25b3d046e18320734e03dbcfe42b089115f8subrata_modak/* Author: Sudhir Kumar skumar@linux.vnet.ibm.com */ 413c744274b453bf857361a94a6950422215c529a9subrata_modak/* */ 423c744274b453bf857361a94a6950422215c529a9subrata_modak/* History: */ 43d3ba25b3d046e18320734e03dbcfe42b089115f8subrata_modak/* Created- 20/12/2007 -Sudhir Kumar <skumar@linux.vnet.ibm.com> */ 443c744274b453bf857361a94a6950422215c529a9subrata_modak/* */ 453c744274b453bf857361a94a6950422215c529a9subrata_modak/******************************************************************************/ 463c744274b453bf857361a94a6950422215c529a9subrata_modak 473c744274b453bf857361a94a6950422215c529a9subrata_modak#include <unistd.h> 483c744274b453bf857361a94a6950422215c529a9subrata_modak#include <math.h> 493c744274b453bf857361a94a6950422215c529a9subrata_modak#include <signal.h> 503c744274b453bf857361a94a6950422215c529a9subrata_modak#include <stdio.h> 513c744274b453bf857361a94a6950422215c529a9subrata_modak#include <stdlib.h> 523c744274b453bf857361a94a6950422215c529a9subrata_modak#include <string.h> 533c744274b453bf857361a94a6950422215c529a9subrata_modak#include <sys/resource.h> 543c744274b453bf857361a94a6950422215c529a9subrata_modak#include <sys/syscall.h> 553c744274b453bf857361a94a6950422215c529a9subrata_modak#include <sys/time.h> 563c744274b453bf857361a94a6950422215c529a9subrata_modak#include <sys/types.h> 57b15aafd4f07a07e790ac504343cf8d9bd77963afsubrata_modak#include <sys/stat.h> 58b15aafd4f07a07e790ac504343cf8d9bd77963afsubrata_modak#include <fcntl.h> 593c744274b453bf857361a94a6950422215c529a9subrata_modak#include <time.h> 603c744274b453bf857361a94a6950422215c529a9subrata_modak#include <unistd.h> 613c744274b453bf857361a94a6950422215c529a9subrata_modak 62287d18bf1010633ce7ce49daabb14f90bc7d997asubrata_modak#include "../libcontrollers/libcontrollers.h" 63354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao#include "test.h" /* LTP harness APIs */ 643c744274b453bf857361a94a6950422215c529a9subrata_modak 65354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao#define TIME_INTERVAL 100 /* Time interval in seconds */ 66354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao#define NUM_INTERVALS 2 /* How many iterations of TIME_INTERVAL */ 673c744274b453bf857361a94a6950422215c529a9subrata_modak 683750bdad20cb54252af92f96265e664965342a02Yuan Sunchar *TCID = "cpuctl_test04"; 6972d13509bbe99a677e7b764d4f2f39e2b03b2f81subrata_modakint TST_TOTAL = 2; 703c744274b453bf857361a94a6950422215c529a9subrata_modakpid_t scriptpid; 71287d18bf1010633ce7ce49daabb14f90bc7d997asubrata_modakchar path[] = "/dev/cpuctl"; 72287d18bf1010633ce7ce49daabb14f90bc7d997asubrata_modak 73354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gaoextern void cleanup() 743c744274b453bf857361a94a6950422215c529a9subrata_modak{ 75354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao kill(scriptpid, SIGUSR1); /* Inform the shell to do cleanup */ 76354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao tst_exit(); /* Report exit status */ 773c744274b453bf857361a94a6950422215c529a9subrata_modak} 783c744274b453bf857361a94a6950422215c529a9subrata_modak 79575839ea989d07d4efa8816256469da86c2dab5csubrata_modakvolatile int timer_expired = 0; 803c744274b453bf857361a94a6950422215c529a9subrata_modak 81354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gaoint main(int argc, char *argv[]) 823c744274b453bf857361a94a6950422215c529a9subrata_modak{ 833c744274b453bf857361a94a6950422215c529a9subrata_modak 84b6ff02cd9592e40c4b435ff7755cb69572a23f47Garrett Cooper int test_num; 85b6ff02cd9592e40c4b435ff7755cb69572a23f47Garrett Cooper int task_num; 86b6ff02cd9592e40c4b435ff7755cb69572a23f47Garrett Cooper int len; 87354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao int num_cpus; /* Total time = TIME_INTERVAL *num_cpus in the machine */ 8837aed20773b801a903517a7ef896176d0d93a4efsubrata_modak char mygroup[FILENAME_MAX], mytaskfile[FILENAME_MAX]; 8937aed20773b801a903517a7ef896176d0d93a4efsubrata_modak char mysharesfile[FILENAME_MAX], ch; 90354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao /* Following variables are to capture parameters from script */ 91354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao char *group_num_p, *mygroup_p, *script_pid_p, *num_cpus_p, *test_num_p, 92354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao *task_num_p; 93354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao gid_t mygroup_num; /* A number attached with a group */ 94354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao int fd; /* A descriptor to open a fifo for synchronized start */ 95354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao int counter = 0; /* To take n number of readings */ 96354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao double total_cpu_time, /* Accumulated cpu time */ 97354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao delta_cpu_time, /* Time the task could run on cpu(s) (in an interval) */ 98354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao prev_cpu_time = 0; 99354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao double exp_cpu_time; /* Expected time in % as obtained by shares calculation */ 1003c744274b453bf857361a94a6950422215c529a9subrata_modak struct rusage cpu_usage; 1013c744274b453bf857361a94a6950422215c529a9subrata_modak unsigned long int mygroup_shares; 1023c744274b453bf857361a94a6950422215c529a9subrata_modak time_t current_time, prev_time, delta_time; 103354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao unsigned int fmyshares, num_tasks; /* f-> from file. num_tasks is tasks in this group */ 1043c744274b453bf857361a94a6950422215c529a9subrata_modak struct sigaction newaction, oldaction; 105b6ff02cd9592e40c4b435ff7755cb69572a23f47Garrett Cooper 106b6ff02cd9592e40c4b435ff7755cb69572a23f47Garrett Cooper mygroup_num = -1; 107b6ff02cd9592e40c4b435ff7755cb69572a23f47Garrett Cooper num_cpus = 0; 108b6ff02cd9592e40c4b435ff7755cb69572a23f47Garrett Cooper task_num = 0; 109b6ff02cd9592e40c4b435ff7755cb69572a23f47Garrett Cooper test_num = 0; 110b6ff02cd9592e40c4b435ff7755cb69572a23f47Garrett Cooper 111354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao /* Signal handling for alarm */ 112354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao sigemptyset(&newaction.sa_mask); 1133c744274b453bf857361a94a6950422215c529a9subrata_modak newaction.sa_handler = signal_handler_alarm; 114354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao newaction.sa_flags = 0; 115354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao sigaction(SIGALRM, &newaction, &oldaction); 1163c744274b453bf857361a94a6950422215c529a9subrata_modak 1173c744274b453bf857361a94a6950422215c529a9subrata_modak /* Collect the parameters passed by the script */ 118354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao group_num_p = getenv("GROUP_NUM"); 119354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao mygroup_p = getenv("MYGROUP"); 120354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao script_pid_p = getenv("SCRIPT_PID"); 121354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao num_cpus_p = getenv("NUM_CPUS"); 122354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao test_num_p = getenv("TEST_NUM"); 123354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao task_num_p = getenv("TASK_NUM"); 1243c744274b453bf857361a94a6950422215c529a9subrata_modak /* Check if all of them are valid */ 125354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao if ((test_num_p != NULL) 126354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao && (((test_num = atoi(test_num_p)) <= 10) 127354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao && ((test_num = atoi(test_num_p)) >= 9))) { 128354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao if ((group_num_p != NULL) && (mygroup_p != NULL) 129354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao && (script_pid_p != NULL) && (num_cpus_p != NULL) 130354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao && (task_num_p != NULL)) { 131354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao mygroup_num = atoi(group_num_p); 132354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao scriptpid = atoi(script_pid_p); 133354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao num_cpus = atoi(num_cpus_p); 134354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao task_num = atoi(task_num_p); 135354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao sprintf(mygroup, "%s", mygroup_p); 136354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao } else { 137354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao tst_brkm(TBROK, cleanup, 138354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao "Invalid other input parameters\n"); 1393c744274b453bf857361a94a6950422215c529a9subrata_modak } 140354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao } else { 141354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao tst_brkm(TBROK, cleanup, "Invalid test number passed\n"); 1423c744274b453bf857361a94a6950422215c529a9subrata_modak } 1433c744274b453bf857361a94a6950422215c529a9subrata_modak 144402fe7bdddfd10440b6290c2d7609ebcda03ffdbsubrata_modak /* 145402fe7bdddfd10440b6290c2d7609ebcda03ffdbsubrata_modak * Let us give the default group 100 shares, as other groups will have 146402fe7bdddfd10440b6290c2d7609ebcda03ffdbsubrata_modak * a multiple of 100 shares. 147402fe7bdddfd10440b6290c2d7609ebcda03ffdbsubrata_modak * WARN: For large num of groups this may hit MAX_SHARES 148402fe7bdddfd10440b6290c2d7609ebcda03ffdbsubrata_modak */ 149402fe7bdddfd10440b6290c2d7609ebcda03ffdbsubrata_modak mygroup_shares = mygroup_num * 100; 150402fe7bdddfd10440b6290c2d7609ebcda03ffdbsubrata_modak 1513c744274b453bf857361a94a6950422215c529a9subrata_modak sprintf(mytaskfile, "%s", mygroup); 152354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao strcat(mytaskfile, "/tasks"); 1533c744274b453bf857361a94a6950422215c529a9subrata_modak sprintf(mysharesfile, "%s", mygroup); 154354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao strcat(mysharesfile, "/cpu.shares"); 1553c744274b453bf857361a94a6950422215c529a9subrata_modak /* Need some technique so as only 1 task per grp writes to shares file */ 1568e843c6a701cc4de95ca6cc501ba5ee901be3a5asubrata_modak if (test_num == 9) 157354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao write_to_file(mysharesfile, "w", mygroup_shares); /* Write the shares of the group */ 15872d13509bbe99a677e7b764d4f2f39e2b03b2f81subrata_modak 159354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao write_to_file(mytaskfile, "a", getpid()); /* Assign the task to it's group */ 1603c744274b453bf857361a94a6950422215c529a9subrata_modak 161354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao fd = open("./myfifo", 0); 162354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao if (fd == -1) { 163354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao tst_brkm(TBROK, cleanup, 164354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao "Could not open fifo for synchronization"); 1653c744274b453bf857361a94a6950422215c529a9subrata_modak } 1663c744274b453bf857361a94a6950422215c529a9subrata_modak 167354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao read(fd, &ch, 1); /* To block all tasks here and fire them up at the same time */ 168287d18bf1010633ce7ce49daabb14f90bc7d997asubrata_modak 169287d18bf1010633ce7ce49daabb14f90bc7d997asubrata_modak /* 170287d18bf1010633ce7ce49daabb14f90bc7d997asubrata_modak * We now calculate the expected % cpu time of this task by getting 171287d18bf1010633ce7ce49daabb14f90bc7d997asubrata_modak * it's group's shares, the total shares of all the groups and the 172287d18bf1010633ce7ce49daabb14f90bc7d997asubrata_modak * number of tasks in this group. 173287d18bf1010633ce7ce49daabb14f90bc7d997asubrata_modak */ 174287d18bf1010633ce7ce49daabb14f90bc7d997asubrata_modak FLAG = 0; 175287d18bf1010633ce7ce49daabb14f90bc7d997asubrata_modak total_shares = 0; 176287d18bf1010633ce7ce49daabb14f90bc7d997asubrata_modak shares_pointer = &total_shares; 177354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao len = strlen(path); 178354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao if (!strncpy(fullpath, path, len)) 179354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao tst_brkm(TBROK, cleanup, "Could not copy directory path %s ", 180354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao path); 181287d18bf1010633ce7ce49daabb14f90bc7d997asubrata_modak 182bd1f58065370eddeea275a238b0a439451c8b70esubrata_modak if (scan_shares_files(shares_pointer) != 0) 183354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao tst_brkm(TBROK, cleanup, 184354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao "From function scan_shares_files in %s ", fullpath); 185287d18bf1010633ce7ce49daabb14f90bc7d997asubrata_modak 186287d18bf1010633ce7ce49daabb14f90bc7d997asubrata_modak /* return val: -1 in case of function error, else 2 is min share value */ 187287d18bf1010633ce7ce49daabb14f90bc7d997asubrata_modak if ((fmyshares = read_shares_file(mysharesfile)) < 2) 188354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao tst_brkm(TBROK, cleanup, "in reading shares files %s ", 189354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao mysharesfile); 190287d18bf1010633ce7ce49daabb14f90bc7d997asubrata_modak 191354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao if ((read_file(mytaskfile, GET_TASKS, &num_tasks)) < 0) 192354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao tst_brkm(TBROK, cleanup, "in reading tasks files %s ", 193354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao mytaskfile); 194287d18bf1010633ce7ce49daabb14f90bc7d997asubrata_modak 195354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao exp_cpu_time = (double)(fmyshares * 100) / (total_shares * num_tasks); 196287d18bf1010633ce7ce49daabb14f90bc7d997asubrata_modak 197354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao prev_time = time(NULL); /* Note down the time */ 1983c744274b453bf857361a94a6950422215c529a9subrata_modak 199354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao while (1) { 200354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao /* Need to run some cpu intensive task, which also frequently checks the timer value */ 201354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao double f = 274.345, mytime; /*just a float number to take sqrt */ 202354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao alarm(TIME_INTERVAL); 2033c744274b453bf857361a94a6950422215c529a9subrata_modak timer_expired = 0; 204354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao while (!timer_expired) /* Let the task run on cpu for TIME_INTERVAL */ 205354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao f = sqrt(f * f); /* Time of this operation should not be high otherwise we can 206354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao * exceed the TIME_INTERVAL to measure cpu usage 207354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao */ 208354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao current_time = time(NULL); 209354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao delta_time = current_time - prev_time; /* Duration in case its not exact TIME_INTERVAL */ 210354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao 211354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao getrusage(0, &cpu_usage); 212354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao total_cpu_time = (cpu_usage.ru_utime.tv_sec + cpu_usage.ru_utime.tv_usec * 1e-6 + /* user time */ 213354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao cpu_usage.ru_stime.tv_sec + cpu_usage.ru_stime.tv_usec * 1e-6); /* system time */ 2143c744274b453bf857361a94a6950422215c529a9subrata_modak delta_cpu_time = total_cpu_time - prev_cpu_time; 2153c744274b453bf857361a94a6950422215c529a9subrata_modak 2163c744274b453bf857361a94a6950422215c529a9subrata_modak prev_cpu_time = total_cpu_time; 2173c744274b453bf857361a94a6950422215c529a9subrata_modak prev_time = current_time; 2188e843c6a701cc4de95ca6cc501ba5ee901be3a5asubrata_modak 2198e843c6a701cc4de95ca6cc501ba5ee901be3a5asubrata_modak /* calculate % cpu time each task gets */ 2203c744274b453bf857361a94a6950422215c529a9subrata_modak if (delta_time > TIME_INTERVAL) 221354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao mytime = 222354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao (delta_cpu_time * 100) / (delta_time * num_cpus); 2233c744274b453bf857361a94a6950422215c529a9subrata_modak else 224354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao mytime = 225354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao (delta_cpu_time * 100) / (TIME_INTERVAL * num_cpus); 2263c744274b453bf857361a94a6950422215c529a9subrata_modak 227354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao fprintf(stdout, "Grp:-%3d task-%3d:CPU TIME{calc:-%6.2f(s)i.e. %6.2f(%%) exp:-%6.2f(%%)}\ 228354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gaowith %3u shares in %lu (s) INTERVAL\n", mygroup_num, task_num, delta_cpu_time, 229354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao mytime, exp_cpu_time, fmyshares, delta_time); 230287d18bf1010633ce7ce49daabb14f90bc7d997asubrata_modak 2313c744274b453bf857361a94a6950422215c529a9subrata_modak counter++; 2323c744274b453bf857361a94a6950422215c529a9subrata_modak 233354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao if (counter >= NUM_INTERVALS) { /* Take n sets of readings for each shares value */ 234354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao switch (test_num) { 235354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao case 9: /* Test 09 */ 236354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao exit(0); /* This task is done with its job */ 2373c744274b453bf857361a94a6950422215c529a9subrata_modak break; 238354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao case 10: /* Test 10 */ 239354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao exit(0); /* This task is done with its job */ 24072d13509bbe99a677e7b764d4f2f39e2b03b2f81subrata_modak break; 2413c744274b453bf857361a94a6950422215c529a9subrata_modak default: 242354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao tst_brkm(TBROK, cleanup, 243354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao "Invalid test number passed\n"); 2443c744274b453bf857361a94a6950422215c529a9subrata_modak break; 2453c744274b453bf857361a94a6950422215c529a9subrata_modak 246354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao } /* end switch */ 247354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao } /* end if */ 248354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao } /* end while */ 249354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao} /* end main */ 250