RE: [PATCH] cpufreq: fix conservative/ondemand behaviour with ignore_nice_load

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



>-----Original Message-----
>From: cpufreq-owner@xxxxxxxxxxxxxxx 
>[mailto:cpufreq-owner@xxxxxxxxxxxxxxx] On Behalf Of Alexander Miller
>Sent: Friday, November 06, 2009 8:27 AM
>To: linux-kernel@xxxxxxxxxxxxxxx
>Cc: cpufreq@xxxxxxxxxxxxxxx; Dave Jones
>Subject: [PATCH] cpufreq: fix conservative/ondemand behaviour 
>with ignore_nice_load
>
>Remove conversion of nice load to microseconds which caused addition
>of times measured in different units and thus unreasonable behaviour
>with both governors.                                                  

Can you describe the "unresonable behavior" you are seeing. Is it
with NO_HZ enabled or disabled?

I see there can be a problem with this code when NO_HZ is disabled.
But, the patch below is not the right solution as it will result in
Adding times in different units with NO_HZ enabled.

Thanks,
Venki

>
>Signed-off-by: Alexander Miller <Miller@xxxxxxxxxxxxxxxxxxxx>
>---
>diff -uprN 
>linux-2.6.git/drivers/cpufreq/cpufreq_conservative.c 
>linux/drivers/cpufreq/cpufreq_conservative.c
>--- linux-2.6.git/drivers/cpufreq/cpufreq_conservative.c	
>2009-10-10 15:56:58.010595257 +0200
>+++ linux/drivers/cpufreq/cpufreq_conservative.c	
>2009-10-10 20:56:52.194598889 +0200
>@@ -400,20 +400,10 @@ static void dbs_check_cpu(struct cpu_dbs
> 		j_dbs_info->prev_cpu_idle = cur_idle_time;
> 
> 		if (dbs_tuners_ins.ignore_nice) {
>-			cputime64_t cur_nice;
>-			unsigned long cur_nice_jiffies;
>-
>-			cur_nice = 
>cputime64_sub(kstat_cpu(j).cpustat.nice,
>+			idle_time += (unsigned int) cputime64_sub(
>+					 kstat_cpu(j).cpustat.nice,
> 					 j_dbs_info->prev_cpu_nice);
>-			/*
>-			 * Assumption: nice time between 
>sampling periods will
>-			 * be less than 2^32 jiffies for 32 bit sys
>-			 */
>-			cur_nice_jiffies = (unsigned long)
>-					
>cputime64_to_jiffies64(cur_nice);
>-
> 			j_dbs_info->prev_cpu_nice = 
>kstat_cpu(j).cpustat.nice;
>-			idle_time += jiffies_to_usecs(cur_nice_jiffies);
> 		}
> 
> 		if (unlikely(!wall_time || wall_time < idle_time))
>diff -uprN linux-2.6.git/drivers/cpufreq/cpufreq_ondemand.c 
>linux/drivers/cpufreq/cpufreq_ondemand.c
>--- linux-2.6.git/drivers/cpufreq/cpufreq_ondemand.c	
>2009-10-10 16:00:40.380595816 +0200
>+++ linux/drivers/cpufreq/cpufreq_ondemand.c	2009-10-10 
>20:56:52.195596654 +0200
>@@ -488,20 +488,10 @@ static void dbs_check_cpu(struct cpu_dbs
> 		j_dbs_info->prev_cpu_idle = cur_idle_time;
> 
> 		if (dbs_tuners_ins.ignore_nice) {
>-			cputime64_t cur_nice;
>-			unsigned long cur_nice_jiffies;
>-
>-			cur_nice = 
>cputime64_sub(kstat_cpu(j).cpustat.nice,
>+			idle_time += (unsigned int) cputime64_sub(
>+					 kstat_cpu(j).cpustat.nice,
> 					 j_dbs_info->prev_cpu_nice);
>-			/*
>-			 * Assumption: nice time between 
>sampling periods will
>-			 * be less than 2^32 jiffies for 32 bit sys
>-			 */
>-			cur_nice_jiffies = (unsigned long)
>-					
>cputime64_to_jiffies64(cur_nice);
>-
> 			j_dbs_info->prev_cpu_nice = 
>kstat_cpu(j).cpustat.nice;
>-			idle_time += jiffies_to_usecs(cur_nice_jiffies);
> 		}
> 
> 		if (unlikely(!wall_time || wall_time < idle_time))
>--
>To unsubscribe from this list: send the line "unsubscribe cpufreq" in
>the body of a message to majordomo@xxxxxxxxxxxxxxx
>More majordomo info at  http://vger.kernel.org/majordomo-info.html
>--
To unsubscribe from this list: send the line "unsubscribe cpufreq" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html

[Index of Archives]     [Linux Kernel Devel]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite Forum]     [Linux SCSI]

  Powered by Linux