because you wanted by percentage, the formula i used to clock WasteCPU() function call in one second time is...
cpu_time * percentage + sleep_time * (1 - percentage) where: cpu_time is where you need to keep the cpu busy.. in this case i used the for loop (eg. "for(i = waste; i; i--);").. the "waste" variable value is computed based on 1 second time... i used clock() function call and divided by CLOCKS_PER_SEC to get processor time per second... but you can use gettimeofday() function call also... sleep_time is where you need the cpu to sleep.. in this case i used select() function call (eg. "select(1, NULL, NULL, NULL, &sleep);").. but you can use usleep() and nanosleep() function calls for micro and nano seconds precision respectively... select() is using microsecond precision... based on the formula above.. let say if you need 100% cpu to utilize... sleep_time is zero and cpu_time is 100%... if you need 80% cpu to utilize... sleep_time is 20% and cpu_time is 80% in 1 second time... this formula is the same formula used for morphing an object... remember black and white mtv of michael jackson that it morphs from girl to boy? face = girl * (1 - percent) + boy * percent starting from 0 percent.. the face looks like a girl.. as the loop reaches to 100 percent.. the face looks like now a boy... when i saw that mtv.. i got an idea how it works and taught this in computer science department in our computer graphics subject right away aside from 2d and 3d modelling when i was still in the philippines... fooler. On Wed, Apr 13, 2011 at 8:30 AM, John Homer H Alvero <[email protected]> wrote: > This works! Thanks. Mind explaining the general idea / concept? Maybe > I can port it to perl. > > > > On Wed, Apr 13, 2011 at 6:21 AM, fooler mail <[email protected]> wrote: >> On Tue, Apr 12, 2011 at 9:29 PM, John Homer H Alvero >> <[email protected]> wrote: >>> Hello Fooler, >>> >>> Sorry for the late reply. It's for an integration project. There's a >>> trigger on CPU usage and CPU usage alone. I need to simulate simulate >>> that CPU usage. >>> >> >> hi john, >> >> ok i understand.. i made a simple C program for you (as im not used to >> perl programming) to simulate CPU usage... it will waste or use the >> CPU approximately with a given percentange as a parameter... >> >> just take note that cpu percentage is different from cpu load... cpu >> percentage is the time spent by cpu on a given process... so i guess >> this is what you are looking for to waste CPU cycles in user space... >> >> take note also if you have N processors... run this program N times >> also so that each proccessor will be wasting X percentage of cpu >> cycles... so that your average will be (X*N) / N or X percentage... >> linux scheduler will take care fo assigning the program to its free >> cpu.. >> >> name the program below let say to waste.c and compile with gcc >> >> $ gcc waste.c -o waste >> >> run the program with a given percentage let say 85 percent... >> >> $ ./waste 85 >> >> run "top" command and press 1 to see per CPU utilization as well as >> per process utilization... you can see there the dynamics of linux >> scheduler... just increase SAMPLING value not greater than signed >> integer value (around 2 giga plus) if you need better accuracy or >> decrease it for faster sampling times but at the expense of its >> accuracy... or you can convert signed interger to unsigned integer for >> bigger value... hope this helps.. >> >> #include <stdio.h> >> #include <stdlib.h> >> #include <time.h> >> #include <unistd.h> >> #include <sys/select.h> >> >> #define SAMPLING 2000000000 >> >> void WasteCPU(int waste, int percent) { >> int i; >> struct timeval sleep; >> >> for(i = waste; i; i--); >> sleep.tv_sec = 0; >> sleep.tv_usec = (100 - percent) * 10000; >> select(1, NULL, NULL, NULL, &sleep); >> } >> >> int main(int argc, char *argv[]) { >> float cps; >> int waste, percent; >> clock_t time1, time2; >> >> printf("Start to sampling clock speed...\n"); >> percent = 100; >> waste = SAMPLING; >> time1 = clock(); >> WasteCPU(waste, percent); >> time2 = clock(); >> cps = (time2 - time1) / (float) CLOCKS_PER_SEC; >> >> percent = atoi(argv[1]); >> waste = (int) (SAMPLING / cps / (100.0 / percent)); >> printf("Sampling done. Wasting CPU approximately %d >> percent...\n", percent); >> while (1) { >> WasteCPU(waste, percent); >> } >> >> return (0); >> } >> >> >> fooler. >> _________________________________________________ >> Philippine Linux Users' Group (PLUG) Mailing List >> http://lists.linux.org.ph/mailman/listinfo/plug >> Searchable Archives: http://archives.free.net.ph >> > _________________________________________________ > Philippine Linux Users' Group (PLUG) Mailing List > http://lists.linux.org.ph/mailman/listinfo/plug > Searchable Archives: http://archives.free.net.ph > _________________________________________________ Philippine Linux Users' Group (PLUG) Mailing List http://lists.linux.org.ph/mailman/listinfo/plug Searchable Archives: http://archives.free.net.ph

