Initial Version
[qa-tools:mnts.git] / mnts-power-tests / src / chk_cpufreq_ondemand.c
1 /*
2  * Copyright (C) 2009 Intel Corporation.
3  * DESCR: check cpufreq powersave governor
4  *
5  * This program is free software; you can redistribute it and/or modify it
6  * under the terms and conditions of the GNU General Public License,
7  * version 2, as published by the Free Software Foundation.
8  * 
9  * This program is distributed in the hope it will be useful, but WITHOUT
10  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
11  * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
12  * for more details.  
13  * 
14  * You should have received a copy of the GNU General Public License along with
15  * this program; if not, write to the Free Software Foundation, Inc., 59 Temple
16  * Place - Suite 330, Boston, MA 02111-1307 USA.
17  * 
18  *                                                                        
19  * Authors:                                                               
20  *              Gong,Zhipeng  (zhipeng.gong@intel.com)
21  *
22  */
23
24 #include <stdio.h>
25 #include <stdlib.h>
26 #include <unistd.h>
27 #include <pthread.h>
28
29 #include "sysfs.h"
30
31 int main (int argc, char ** argv){
32         char *avai_freq_arr[FREQ_NUM_MAX];
33         char *max_freq = NULL;
34         char *min_freq = NULL;
35         int i = 0, rc = SUCCESS;
36
37         if (parse_avail_freq(avai_freq_arr,&max_freq,&min_freq, NULL) == ERROR) {
38                 printf("Fail to read scaling_available_frequencies\n");
39                 return ERROR;
40         }
41 #if 0
42         if (cpu_p_sys_write (0, "scaling_governor", "userspace") != SUCCESS){
43                 return ERROR;
44         }
45         
46         if (cpu_p_sys_write (0, "scaling_setspeed", max_freq) != SUCCESS){
47                 return ERROR;
48         }
49
50         if (cpu_p_sys_check (0, "scaling_cur_freq", max_freq) != SUCCESS){
51                 return ERROR;
52         }
53 #endif
54         if (cpu_p_sys_write (1, "scaling_governor", "ondemand") != SUCCESS){
55                 return ERROR;
56         }
57
58         if (cpu_p_sys_check (1, "scaling_governor", "ondemand") != SUCCESS) {
59                 return SUCCESS;
60         } else {
61                 printf ("set governor to ondemand successfully! \n");
62         }
63         sleep(10);
64         if (cpu_p_sys_check (1, "scaling_cur_freq", min_freq) != SUCCESS){
65                 return ERROR;
66         } else {
67                 printf ("ondemand governor has taken effective! The frequency is %s now \n", min_freq);
68         }
69         rc = SUCCESS;
70         pthread_t thread;
71         if (pthread_create(&thread, NULL, (void *(*)(void *))cpu_workload_thread, NULL) != 0) {
72                 printf("Fail to create new thread\n");
73                 return ERROR;
74         }
75
76         for(i=0;i<5;i++){
77                 sleep(2);
78                 if (cpu_p_sys_check (1, "scaling_cur_freq", max_freq) == SUCCESS) {
79                 printf ("frequency increased when there is workload\n");
80                 }
81                 else{
82                 printf ("frequency keeps minimal when there is workload\n");
83                         break;
84                         rc = ERROR;
85                 }
86         }
87         stop_workload = 1;
88
89         (void) pthread_join(thread, NULL);
90
91         return rc;
92 }