Skip site navigation (1)Skip section navigation (2)
Date:      Sun, 29 Mar 2009 12:14:13 +0200
From:      Dominic Fandrey <kamikaze@bsdforen.de>
To:        Alexander Motin <mav@FreeBSD.org>
Cc:        freebsd-stable@freebsd.org
Subject:   Re: powerd broken
Message-ID:  <49CF49F5.6010800@bsdforen.de>
In-Reply-To: <49CF4EB9.60108@FreeBSD.org>
References:  <1238293386.00093672.1238281804@10.7.7.3>	<49CF0803.1070505@FreeBSD.org> <49CF2F8D.6000905@bsdforen.de> <49CF4EB9.60108@FreeBSD.org>

next in thread | previous in thread | raw e-mail | index | archive | help
Alexander Motin wrote:
> Dominic Fandrey wrote:
>> Alexander Motin wrote:
>>> Dominic Fandrey wrote:
>>>> Since I updated to the 7.2 prerelease, powerd is broken.
>>>>
>>>>> uname -a
>>>> FreeBSD mobileKamikaze.norad 7.2-PRERELEASE FreeBSD 7.2-PRERELEASE #0:
>>>> Tue Mar 24 07:57:30 CET 2009   
>>>> root@mobileKamikaze.norad:/usr/obj/HP6510b/amd64/usr/src/sys/HP6510b
>>>> amd64
>>>>
>>>> It increases the CPU frequency very aggressively in adaptive mode.
>>>> That means full speed with a system load below 1%. I have to use the
>>>> following nonsensical powerd_flags to make it work sensibly:
>>>> -a adaptive -b minimum -i 95 -r 99
>>>>
>>>> The system is a Core2 Duo, if that is of any help.
>>> Run powerd in foreground with -v option to get it's work trace. If it
>>> reaches full speed, there must be some reason to do it.
>>>
>>> Updated powerd indeed may behave a bit more aggressively (especially in
>>> new hiadaptive mode, default for AC power). But it was made several
>>> months ago and nobody have complained yet. I am personally using it on
>>> 8-CURRENT on my Core2Duo laptop every day.
>>>
>>
>> # grep powerd /etc/rc.conf
>> powerd_enable="YES"
>> #powerd_flags="-a adaptive -b minimum -i 95 -r 99"
>> powerd_flags="-a adaptive -b minimum -v"
>> # rcrestart powerd powerd not running?
>> Starting powerd.
>> powerd: using sysctl for AC line status
>> powerd: using devd for AC line status
>> load  77%, current freq 2400 MHz ( 0), wanted freq 2400 MHz
>> load  74%, current freq 2400 MHz ( 0), wanted freq 2400 MHz
>> load  78%, current freq 2400 MHz ( 0), wanted freq 2400 MHz
>> load  79%, current freq 2400 MHz ( 0), wanted freq 2400 MHz
>> load  65%, current freq 2400 MHz ( 0), wanted freq 2400 MHz
>> load  72%, current freq 2400 MHz ( 0), wanted freq 2400 MHz
>> load  76%, current freq 2400 MHz ( 0), wanted freq 2400 MHz
>> ...
>>
>> The real load was between 3 and 7 % while these were recorded.
>>
>> Note that I use the normal/old adaptive mode.
> 
> Reason is not in algorithm. Reason is in reporting so high load
> (65-79%). Run this test please at the same conditions to understand
> what's going on there:
> 
> sysctl kern.cp_times && sleep 1 && \
> sysctl kern.cp_times && sleep 1 && \
> sysctl kern.cp_times && sleep 1 && \
> sysctl kern.cp_times
> 

Measurings done with cpu speed set to 800MHz with ~6% CPU load.

# while sleep 1; do sysctl kern.cp_times; done
kern.cp_times: 27709 1 14989 900764 1019830 122302 0 34956 2705 1802746
kern.cp_times: 27711 1 14989 900835 1019891 122308 0 34959 2705 1802871
kern.cp_times: 27711 1 14991 900914 1019944 122316 0 34960 2705 1802996
kern.cp_times: 27712 1 14993 900992 1019997 122328 0 34966 2705 1803112
kern.cp_times: 27714 1 14994 901071 1020049 122339 0 34973 2705 1803228
kern.cp_times: 27714 1 14995 901149 1020104 122348 0 34975 2705 1803351
kern.cp_times: 27715 1 14997 901220 1020164 122363 0 34976 2705 1803468
kern.cp_times: 27716 1 14999 901295 1020220 122371 0 34977 2705 1803593
kern.cp_times: 27717 1 15002 901371 1020273 122385 0 34985 2705 1803705
kern.cp_times: 27719 1 15002 901449 1020327 122390 0 34985 2705 1803834
kern.cp_times: 27719 1 15004 901522 1020386 122398 0 34987 2705 1803958
kern.cp_times: 27720 1 15006 901599 1020440 122416 0 34987 2705 1804074
kern.cp_times: 27722 1 15006 901668 1020503 122424 0 34994 2705 1804192

A more convinient output:
# oldtimes=$(sysctl -n kern.cp_times); while sleep 1; do times=$(sysctl -n kern.cp_times); for time in $times; do printf "%8s" $(($time - ${oldtimes%% *})); oldtimes=${oldtimes#* }; done; echo; oldtimes=$times; done
       0       0       3      66      64      10       0       3       0     121
       1       0       3      78      56       7       0       8       0     122
       1       0       4      64      68      23       0       4       0     111
       2       0       2      85      56       7       0      12       0     126
       1       0       1      79      55       7       0       2       0     127
       0       0       1      70      68      17       0       4       0     118
       2       0       1      95      39      16       0       5       0     116
       0       0       0      77      60       9       0       5       0     123
       0       0       0      88      48       8       0       2       0     126
       1       0       1      79      57      14       0       6       0     118
       1       0       0      88      48      12       0       5       0     120
       0       0       0      80      58      12       0       6       0     119
       3       0       0      82      53      13       0       3       0     122
       2       0       3      85      47      11       0       7       0     120
       1       0       0      81      54       8       0       3       1     124
       2       0       2      69      65      13       0       7       0     117
       0       0       4      73      60       8       0       4       0     126
       2       0       4      81      52      12       0       8       0     119
       6       0       1      81      51      22       0       4       0     113
       3       0       2      78      52      11       0       5       0     118




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?49CF49F5.6010800>