On 11 Jul 26, Daniel Lezcano wrote: > This little program takes the cpu # as parameter, set the affinity and > renice itself to the maximum priority. It increments a counter during > one second, display the coutner's value and exit. > > Signed-off-by: Daniel Lezcano <daniel.lezc...@linaro.org>
Have you looked at the cpuburn program? > --- > utils/cpucycle.c | 108 > ++++++++++++++++++++++++++++++++++++++++++++++++++++++ > 1 files changed, 108 insertions(+), 0 deletions(-) > create mode 100644 utils/cpucycle.c > > diff --git a/utils/cpucycle.c b/utils/cpucycle.c > new file mode 100644 > index 0000000..dc4a7d7 > --- /dev/null > +++ b/utils/cpucycle.c > @@ -0,0 +1,108 @@ > +/******************************************************************************* > + * PM-QA validation test suite for the power management on ARM > + * > + * Copyright (C) 2011, Linaro Limited. > + * > + * This program is free software; you can redistribute it and/or > + * modify it under the terms of the GNU General Public License > + * as published by the Free Software Foundation; either version 2 > + * of the License, or (at your option) any later version. > + * > + * This program is distributed in the hope that it will be useful, > + * but WITHOUT ANY WARRANTY; without even the implied warranty of > + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the > + * GNU General Public License for more details. > + * > + * You should have received a copy of the GNU General Public License > + * along with this program; if not, write to the Free Software > + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA > 02110-1301, USA. > + * > + * Contributors: > + * Daniel Lezcano <daniel.lezc...@linaro.org> (IBM Corporation) > + * - initial API and implementation > + * > + > *******************************************************************************/ > + > +#define _GNU_SOURCE > +#include <sched.h> > +#include <stdio.h> > +#include <stdlib.h> > +#include <stdbool.h> > +#include <signal.h> > +#include <unistd.h> > +#include <regex.h> > +#include <sys/types.h> > +#include <sys/time.h> > +#include <sys/resource.h> > + > +static bool intr; > + > +void sigalarm(int sig) > +{ > + intr = true; > +} > + > +int main(int argc, char *argv[]) > +{ > + regex_t reg; > + const char *regex = "cpu[0-9].*"; > + char **aargv = NULL; > + regmatch_t m[1]; > + cpu_set_t cpuset; > + long counter = 0; > + int i; > + > + if (argc == 1) { > + fprintf(stderr, "%s <cpuN> [cpuM] ... \n", argv[0]); > + return 1; > + } > + > + aargv = &argv[1]; > + > + if (regcomp(®, regex, 0)) { > + fprintf(stderr, "failed to compile the regex\n"); > + return 1; > + } > + > + CPU_ZERO(&cpuset); > + > + for (i = 0; i < (argc - 1); i++) { > + > + char *aux; > + int cpu; > + > + if (regexec(®, aargv[i], 1, m, 0)) { > + fprintf(stderr, "'%s' parameter not recognized, " \ > + "should be cpu[0-9]\n", aargv[i]); > + return 1; > + } > + > + aux = aargv[i] + 3; > + cpu = atoi(aux); > + > + CPU_SET(cpu, &cpuset); > + } > + > + if (sched_setaffinity(0, sizeof(cpuset), &cpuset)) { > + perror("sched_setaffinity"); > + return 1; > + } > + > + if (setpriority(PRIO_PROCESS, 0, -20) < 0) { > + perror("setpriority"); > + return 1; > + } > + > + signal(SIGALRM, sigalarm); > + > + /* warmup */ > + alarm(1); > + for (counter = 0, intr = false; !intr ; counter++); > + > + alarm(1); > + for (counter = 0, intr = false; !intr ; counter++); > + > + printf("%ld\n", counter); > + > + return 0; > +} > -- > 1.7.4.1 > _______________________________________________ linaro-dev mailing list linaro-dev@lists.linaro.org http://lists.linaro.org/mailman/listinfo/linaro-dev