From patchwork Tue Jul 26 12:46:52 2011 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Daniel Lezcano X-Patchwork-Id: 3136 Return-Path: X-Original-To: patchwork@peony.canonical.com Delivered-To: patchwork@peony.canonical.com Received: from fiordland.canonical.com (fiordland.canonical.com [91.189.94.145]) by peony.canonical.com (Postfix) with ESMTP id 7774523F3F for ; Tue, 26 Jul 2011 12:47:05 +0000 (UTC) Received: from mail-qw0-f52.google.com (mail-qw0-f52.google.com [209.85.216.52]) by fiordland.canonical.com (Postfix) with ESMTP id 277FEA1828C for ; Tue, 26 Jul 2011 12:47:05 +0000 (UTC) Received: by qwb8 with SMTP id 8so243495qwb.11 for ; Tue, 26 Jul 2011 05:47:04 -0700 (PDT) Received: by 10.229.25.212 with SMTP id a20mr553549qcc.148.1311684424603; Tue, 26 Jul 2011 05:47:04 -0700 (PDT) X-Forwarded-To: linaro-patchwork@canonical.com X-Forwarded-For: patch@linaro.org linaro-patchwork@canonical.com Delivered-To: patches@linaro.org Received: by 10.229.217.78 with SMTP id hl14cs110974qcb; Tue, 26 Jul 2011 05:47:04 -0700 (PDT) Received: by 10.216.187.68 with SMTP id x46mr3492429wem.98.1311684421959; Tue, 26 Jul 2011 05:47:01 -0700 (PDT) Received: from mtagate1.uk.ibm.com (mtagate1.uk.ibm.com [194.196.100.161]) by mx.google.com with ESMTPS id x3si830560wec.86.2011.07.26.05.47.01 (version=TLSv1/SSLv3 cipher=OTHER); Tue, 26 Jul 2011 05:47:01 -0700 (PDT) Received-SPF: neutral (google.com: 194.196.100.161 is neither permitted nor denied by best guess record for domain of daniel.lezcano@linaro.org) client-ip=194.196.100.161; Authentication-Results: mx.google.com; spf=neutral (google.com: 194.196.100.161 is neither permitted nor denied by best guess record for domain of daniel.lezcano@linaro.org) smtp.mail=daniel.lezcano@linaro.org Received: from d06nrmr1507.portsmouth.uk.ibm.com (d06nrmr1507.portsmouth.uk.ibm.com [9.149.38.233]) by mtagate1.uk.ibm.com (8.13.1/8.13.1) with ESMTP id p6QCl1Wi032279; Tue, 26 Jul 2011 12:47:01 GMT Received: from d06av08.portsmouth.uk.ibm.com (d06av08.portsmouth.uk.ibm.com [9.149.37.249]) by d06nrmr1507.portsmouth.uk.ibm.com (8.13.8/8.13.8/NCO v10.0) with ESMTP id p6QCl0qA1986762; Tue, 26 Jul 2011 13:47:00 +0100 Received: from d06av08.portsmouth.uk.ibm.com (loopback [127.0.0.1]) by d06av08.portsmouth.uk.ibm.com (8.14.4/8.13.1/NCO v10.0 AVout) with ESMTP id p6QCl0ju009299; Tue, 26 Jul 2011 13:47:00 +0100 Received: from smtp.lab.toulouse-stg.fr.ibm.com (srv01.lab.toulouse-stg.fr.ibm.com [9.101.4.1]) by d06av08.portsmouth.uk.ibm.com (8.14.4/8.13.1/NCO v10.0 AVin) with ESMTP id p6QCl0RP009296; Tue, 26 Jul 2011 13:47:00 +0100 Received: from mai.lab.toulouse-stg.fr.ibm.com (dhcp7.lab.toulouse-stg.fr.ibm.com [9.101.4.207]) by smtp.lab.toulouse-stg.fr.ibm.com (Postfix) with ESMTP id 4EC62210FBB; Tue, 26 Jul 2011 14:47:00 +0200 (CEST) From: Daniel Lezcano To: linaro-dev@lists.linaro.org Cc: amit.kucheria@linaro.org Subject: [pm-qa 02/14] add a simple program burning cycles Date: Tue, 26 Jul 2011 14:46:52 +0200 Message-Id: <1311684424-8057-3-git-send-email-daniel.lezcano@linaro.org> X-Mailer: git-send-email 1.7.4.1 In-Reply-To: <1311684424-8057-1-git-send-email-daniel.lezcano@linaro.org> References: <1311684424-8057-1-git-send-email-daniel.lezcano@linaro.org> 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 --- 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 (IBM Corporation) + * - initial API and implementation + * + *******************************************************************************/ + +#define _GNU_SOURCE +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +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 [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; +}