fixed max_freq changes only applying to one thread
This commit is contained in:
		
							parent
							
								
									0b8ee4b5f6
								
							
						
					
					
						commit
						fab416fbb4
					
				| @ -4,11 +4,26 @@ | |||||||
| 
 | 
 | ||||||
| #define VERSION "1.0" | #define VERSION "1.0" | ||||||
| #define POLLING_TIME 1 | #define POLLING_TIME 1 | ||||||
| #define CURGOV "/sys/devices/system/cpu/cpufreq/policy0/scaling_governor" | #define THREADS 4 /* TODO: automatically figure out how many threads host system has */ | ||||||
| #define FREQS "/sys/devices/system/cpu/cpufreq/policy0/scaling_available_frequencies" | #define FREQS "/sys/devices/system/cpu/cpufreq/policy0/scaling_available_frequencies" | ||||||
| #define MAXSPDPATH "/sys/devices/system/cpu/cpufreq/policy0/scaling_max_freq" | #define MAXSPDPREFIX "/sys/devices/system/cpu/cpu" | ||||||
|  | #define MAXSPDSUFFIX "/cpufreq/scaling_max_freq" | ||||||
| #define CURTEMPPATH "/sys/devices/virtual/thermal/thermal_zone0/temp" | #define CURTEMPPATH "/sys/devices/virtual/thermal/thermal_zone0/temp" | ||||||
| 
 | 
 | ||||||
|  | void changespeed(int threads, char** steps, int curstep){ | ||||||
|  |   int i; | ||||||
|  |   char filename[100]; | ||||||
|  |   FILE* file; | ||||||
|  |   for (i=0; i < threads; i++){ | ||||||
|  |     sprintf(filename, MAXSPDPREFIX"%d"MAXSPDSUFFIX, i); | ||||||
|  |     file = fopen(filename, "w"); | ||||||
|  |     if (file != NULL){ | ||||||
|  |       fprintf(file, "%s\n", steps[curstep]); | ||||||
|  |       fclose(file); | ||||||
|  |     } | ||||||
|  |   } | ||||||
|  | } | ||||||
|  | 
 | ||||||
| int comparestrings(char *a, char *b){ | int comparestrings(char *a, char *b){ | ||||||
|   int c = 0; |   int c = 0; | ||||||
|   while(a[c] != '\0' && b[c] != '\0'){ |   while(a[c] != '\0' && b[c] != '\0'){ | ||||||
| @ -157,7 +172,7 @@ int main(int argc, char** argv){ | |||||||
|   free(freqsfilec); |   free(freqsfilec); | ||||||
|   fclose(freqsfile); |   fclose(freqsfile); | ||||||
|   /* try to open scaling_maximum_frequency, exit on fail */ |   /* try to open scaling_maximum_frequency, exit on fail */ | ||||||
|   FILE* curmaxfile = fopen(MAXSPDPATH, "r"); |   FILE* curmaxfile = fopen(MAXSPDPREFIX"0"MAXSPDSUFFIX, "r"); | ||||||
|   if (curmaxfile == NULL){ |   if (curmaxfile == NULL){ | ||||||
|     fprintf(stderr, "error: couldn't open scaling_maximum_frequency\n"); |     fprintf(stderr, "error: couldn't open scaling_maximum_frequency\n"); | ||||||
|     fprintf(stderr, "       check that you have support for cpufreq\n"); |     fprintf(stderr, "       check that you have support for cpufreq\n"); | ||||||
| @ -202,46 +217,19 @@ int main(int argc, char** argv){ | |||||||
|     /* check if current temp is higher than max and step down */ |     /* check if current temp is higher than max and step down */ | ||||||
|     if (temperature >= maxtemp && curstep < stepc - 1){ |     if (temperature >= maxtemp && curstep < stepc - 1){ | ||||||
|       curstep++; |       curstep++; | ||||||
|       curmaxfile = fopen(MAXSPDPATH, "w"); |       changespeed(THREADS, steps, curstep); | ||||||
|       if (curmaxfile == NULL){ |  | ||||||
|         fprintf(stderr, "error: couldn't open scaling_maximum_frequency\n"); |  | ||||||
|         fprintf(stderr, "       check that you have support for cpufreq\n"); |  | ||||||
|         fprintf(stderr, "       in your kernel and that the program is\n"); |  | ||||||
|         fprintf(stderr, "       running as root\n"); |  | ||||||
|         return 6; |  | ||||||
|       } |  | ||||||
|       fprintf(curmaxfile, "%s\n", steps[curstep]); |  | ||||||
|       fclose(curmaxfile); |  | ||||||
|       timepassed = 0; |       timepassed = 0; | ||||||
|     } |     } | ||||||
|     /* check if current temp is lower than min and step down */ |     /* check if current temp is lower than min and step down */ | ||||||
|     if (temperature <= mintemp && curstep > 0){ |     if (temperature <= mintemp && curstep > 0){ | ||||||
|       curstep--; |       curstep--; | ||||||
|       curmaxfile = fopen(MAXSPDPATH, "w"); |       changespeed(THREADS, steps, curstep); | ||||||
|       if (curmaxfile == NULL){ |  | ||||||
|         fprintf(stderr, "error: couldn't open scaling_maximum_frequency\n"); |  | ||||||
|         fprintf(stderr, "       check that you have support for cpufreq\n"); |  | ||||||
|         fprintf(stderr, "       in your kernel and that the program is\n"); |  | ||||||
|         fprintf(stderr, "       running as root\n"); |  | ||||||
|         return 6; |  | ||||||
|       } |  | ||||||
|       fprintf(curmaxfile, "%s\n", steps[curstep]); |  | ||||||
|       fclose(curmaxfile); |  | ||||||
|       timepassed = 0; |       timepassed = 0; | ||||||
|     } |     } | ||||||
|     /* check if a minute passed without step changes and temp is below minmax average */ |     /* check if a minute passed without step changes and temp is below minmax average */ | ||||||
|     if (timepassed > 60 && temperature <= (mintemp+maxtemp)/2 && curstep > 0){ |     if (timepassed > 60 && temperature <= (mintemp+maxtemp)/2 && curstep > 0){ | ||||||
|       curstep--; |       curstep--; | ||||||
|       curmaxfile = fopen(MAXSPDPATH, "w"); |       changespeed(THREADS, steps, curstep); | ||||||
|       if (curmaxfile == NULL){ |  | ||||||
|         fprintf(stderr, "error: couldn't open scaling_maximum_frequency\n"); |  | ||||||
|         fprintf(stderr, "       check that you have support for cpufreq\n"); |  | ||||||
|         fprintf(stderr, "       in your kernel and that the program is\n"); |  | ||||||
|         fprintf(stderr, "       running as root\n"); |  | ||||||
|         return 6; |  | ||||||
|       } |  | ||||||
|       fprintf(curmaxfile, "%s\n", steps[curstep]); |  | ||||||
|       fclose(curmaxfile); |  | ||||||
|       timepassed = 0; |       timepassed = 0; | ||||||
|     } |     } | ||||||
|     free(char_temperature); |     free(char_temperature); | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user