Skip site navigation (1)Skip section navigation (2)
Date:      Sun, 23 Dec 2007 17:50:57 +0000
From:      Rui Paulo <rpaulo@fnop.net>
To:        Andrey <andrey.kosachenko@gmail.com>
Cc:        freebsd-acpi@FreeBSD.org
Subject:   Re: powerd doesn't decrease CPU frequency in some cases
Message-ID:  <86sl1tl2pq.wl%rpaulo@fnop.net>
In-Reply-To: <476E8674.5000303@gmail.com>
References:  <476E8674.5000303@gmail.com>

next in thread | previous in thread | raw e-mail | index | archive | help
At Sun, 23 Dec 2007 18:01:56 +0200,
Andrey wrote:
> 
> Good time of the day.
> 
> I've noticed that powerd isn't able to decrease CPU frequency on my 
> laptop (HP Compaq 6710b) as soon as frequency gets highest level.
> 
> I've pottered a bit in the sources and it seems found the root of the issue.
> So those who are interested in the subject let consider it.
> 
> For instance my system reports the following frequency levels:
> 
> [silent@beastie][/home/silent]sysctl dev.cpu.0.freq_levels
> dev.cpu.0.freq_levels: 2001/35000 2000/35000 1750/30625 1600/25000 
> 1400/21875 1200/16000 1050/14000 900/12000 800/14000 700/12250 600/10500 
> 500/8750 400/7000 300/5250
> 
> If I try to adjust current frequency to 2000 MHz then I'll get:
> [silent@beastie][/home/silent]sudo sysctl dev.cpu.0.freq=2000
> dev.cpu.0.freq: 300 -> 2001
> Let check:
> [silent@beastie][/home/silent]sysctl dev.cpu.0.freq
> dev.cpu.0.freq: 2001
> 
> Thus, as you can see, I have level "2000" which system reports me but 
> actually I can't to adjust those one exactly because it silently becomes 
> "2001"
> 
> Well... If I'm not mistaken powerd calculates the current "CPU idle 
> mark" and if it is more then adopted value (by default 90%) then it 
> shifts CPU frequency value 1 step down. In my case powerd sticks at 
> "2001". It is obvious because when powerd decreases CPU frequency from 
> the highest frequency level we'll get the following scenario:
> 
> +-----------------------+
> |  dev.cpu.0.freq=2001  +--<-+
> +-----------+-----------+    |
>              |                |
>              Y                |
> +-----------+-----------+    |
> |    "CPU idle" > 90%   |    |
> +-----------+-----------+    |
>              |                |
>              Y                ^
> +-----------+-----------+    ^
> |  powerd shifts freq.  |    ^
> |     1 step down:      |    |
> |    "2001" -> "2000"   |    |
> +-----------+-----------+    |
>              |                |
>              Y                |
> +-----------+-----------+    |
> | actually we have here |    |
> | dev.cpu.0.freq == 2001+-->-+
> +-----------------------+
> 
> 
> According to the things mentioned above I've came to conclusion that in 
> my case it is not a good idea to rely on frequency levels reported by 
> the system. (Also I saw many sysctl mibs (dev.cpu.0.freq) of many other 
> people. And there were "strange" frequency levels like "2000" and 
> "2001". Of course I can't state that their systems' behaviors fit my 
> case. But still...)
> 
> So the simple way out I see is to teach powerd recognize "fake" 
> frequency levels. Here I suggest a very simple workaround (and may be 
> quite ugly... sorry I'm not sure if it is my cup of tee) which allows me 
> to overcome the issue. And I hope it can be useful for smb. else.
> 
> Also I'd like to hear opinions of others. May be there exists another 
> and simpler way to overcome an issue or even I've missed something or 
> not aware of something.
> 
> 
> Thank you.
> 
> 
> --
> Sincerely,
> Andrey Kosachenko

I think this is all due to the fact that freq_levels mixes p4tcc, est
and others. 
Try adding:

hint.p4tcc.0.disabled=1
hint.acpi_throttle.0.disabled=1

to your /boot/loader.conf

Regards.
--
Rui Paulo




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?86sl1tl2pq.wl%rpaulo>