Jump to content

HowTo - SSE3 Kernel with Sleep + SpeedStep


Prasys
 Share

323 posts in this topic

Recommended Posts

Damn, i was getting evil plans of attaching them to a pidgeon. (your nuts)

 

Work is still being done

 

 

Thanks in advance Okik, I really wish the new verison of cpu throttle will work not only on core duo or c2D but also on my pentiumD (it supports EIST as well but never works in either yours or Paulicat's pervious verions, always says load cpu failed)

Link to comment
Share on other sites

I tried this on a Toshiba M400 with an Intel T2400 chip, the speedstep doesn't seem to work. There is one bogus value for P3. P0 though P2 are correct, however.

 

Here is the log:

 

ACPICPUThrottle: Adding CPU0

Feb 28 22:47:04 computer kernel[0]: ---> P0, 1830Mhz, 31000mW, 10us, 10us (ctrl=0xb2c, status=0xb2c)

Feb 28 22:47:04 computer kernel[0]: ---> P1, 1330Mhz, 20000mW, 10us, 10us (ctrl=0x81d, status=0x81d)

Feb 28 22:47:04 computer kernel[0]: ---> P2, 1000Mhz, 13000mW, 10us, 10us (ctrl=0x613, status=0x613)

Feb 28 22:47:04 computer kernel[0]: ---> P3, 65535Mhz, 4294967295mW, 255us, 255us (ctrl=0xffff, status=0xffff)

Feb 28 22:47:04 computer kernel[0]: ACPICPUThrottle: Using direct drive of Intel throttling

Feb 28 22:47:04 computer kernel[0]: ACPICPUThrottle: Throttle failed with cur_status=0xb2c, want_status=0x0!

Feb 28 22:47:04 computer kernel[0]: ACPICPUThrottle: Adding CPU1

Feb 28 22:47:04 computer kernel[0]: ACPICPUThrottle: No valid CPUs returned by ACPI! It's possible your BIOS does not think your system should be throttled and therefore did not return any available power states, or maybe your CPU only supports one other power state than maximum which is below 1Ghz!

Link to comment
Share on other sites

yeah, i dont have that many cpu's to test on, but what i can i will test

 

 

Hi, Kiko,

After played with my bios setting, I finally get the cpu throttle worked (kind of ), wow! its now 4AM but I am so excited.

 

But it seems still something not quite right. I was wondering can you show me some cues.

I am confused with two things now

 

1. there are so many failure report in my system log, what does it mean?

 

2. in windows, my cpu can run EIST on following frequency:

2.4G(PID12) 2.6G(PID13) 2.8G(PID14) 3.0G(PID15) 3.2G(PID16) 3.4G(PIO17)

but now it seems the cputhrottle.kext only detect the minimum and maxnium, (in cpu throttle 2 app, it also only reports two states)

any idea to enable rest of states?

 

here is my log

 

 

 

: ACPI CPU Throttle loaded

: ACPICPUThrottle: Adding CPU0

: ACPICPUThrottle: type=82, datalen=12, _ASI=7f, _RBW=40, _RBO=0, _ADR=199

: ACPICPUThrottle: ACPI returns no ACPI throttling available

: ACPICPUThrottle: type=82, datalen=12, _ASI=7f, _RBW=10, _RBO=0, _ADR=198

: ACPICPUThrottle: ACPI returns no ACPI throttling available

: ---> P0, 3400Mhz, 89000mW, 10us, 10us (ctrl=0x1125, status=0x1125)

: ---> P1, 2400Mhz, 68000mW, 10us, 10us (ctrl=0xc20, status=0xc20)

: ACPICPUThrottle: Intel processor detected, family=f, model=6

: ACPICPUThrottle: Using direct drive of Intel throttling

: ACPICPUThrottle: Setting CPU0 to powerstate 1

: ACPICPUThrottle: rtc_cycle_count=170000000, newcount=120000000, cutoff=50000000

: ACPICPUThrottle: Throttle failed with cur_status=0xc22, want_status=0x0!

: ACPICPUThrottle: Adding CPU1

: ACPICPUThrottle: type=82, datalen=12, _ASI=1, _RBW=10, _RBO=0, _ADR=8f0

: ACPICPUThrottle: PCR=0x8f0 width 0

: ACPICPUThrottle: type=82, datalen=12, _ASI=1, _RBW=10, _RBO=0, _ADR=8f2

: ACPICPUThrottle: PSR=0x8f2 width 0

: ---> P0, 3400Mhz, 89000mW, 160us, 10us (ctrl=0x1125, status=0x1125)

: ---> P1, 2400Mhz, 68000mW, 160us, 10us (ctrl=0xc20, status=0xc20)

: ACPICPUThrottle: Using ACPI BIOS to throttle CPU

: ACPICPUThrottle: Setting CPU1 to powerstate 1

: ACPICPUThrottle: rtc_cycle_count=170000000, newcount=120000000, cutoff=50000000

: ACPICPUThrottle: Writing 0xc20 width 16 to 0x8f0

: ACPICPUThrottle: Throttle succeeded!

: ACPICPUThrottle: rtc_cycle_count=170000000, newcount=120000000, cutoff=50000000

: ACPICPUThrottle: Adding CPU2

: ACPICPUThrottle: Failed with code -536870212

: ACPICPUThrottle: Adding CPU3

: ACPICPUThrottle: Failed with code -536870212

: ACPICPUThrottle: No valid CPUs returned by ACPI! It's possible your BIOS does not think your system should be throttled and therefore did not return any available power states, or maybe your CPU only supports one other power state than maximum which is below 1Ghz!

ACPICPUThrottle: Setting CPU0 to powerstate 0

: ACPICPUThrottle: rtc_cycle_count=170000000, newcount=170000000, cutoff=50000000

: ACPICPUThrottle: Throttle failed with cur_status=0xc23, want_status=0x0!

: ACPICPUThrottle: Setting CPU0 to powerstate 0

: ACPICPUThrottle: rtc_cycle_count=170000000, newcount=170000000, cutoff=50000000

: ACPICPUThrottle: Throttle succeeded with cur_status=0x1125, want_status=0x0!

: ACPICPUThrottle: rtc_cycle_count=170000000, newcount=170000000, cutoff=50000000

: ACPICPUThrottle: Setting CPU1 to powerstate 0

: ACPICPUThrottle: rtc_cycle_count=170000000, newcount=170000000, cutoff=50000000

: ACPICPUThrottle: Writing 0x1125 width 16 to 0x8f0

: ACPICPUThrottle: Throttle succeeded!

: ACPICPUThrottle: rtc_cycle_count=170000000, newcount=170000000, cutoff=50000000

: -.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.

: -.-.-.-.-.

: -.-.-.-.-.ACPICPUThrottle: Setting CPU0 to powerstate 1

: ACPICPUThrottle: rtc_cycle_count=170000000, newcount=120000000, cutoff=50000000

: ACPICPUThrottle: Throttle failed with cur_status=0xc22, want_status=0x0!

: ACPICPUThrottle: Setting CPU0 to powerstate 1

: ACPICPUThrottle: rtc_cycle_count=170000000, newcount=120000000, cutoff=50000000

: ACPICPUThrottle: Throttle failed with cur_status=0xc21, want_status=0x0!

: ACPICPUThrottle: Setting CPU0 to powerstate 1

: ACPICPUThrottle: rtc_cycle_count=170000000, newcount=120000000, cutoff=50000000

: ACPICPUThrottle: Throttle succeeded with cur_status=0xc20, want_status=0x0!

: ACPICPUThrottle: rtc_cycle_count=170000000, newcount=120000000, cutoff=50000000

: ACPICPUThrottle: Setting CPU1 to powerstate 1

: ACPICPUThrottle: rtc_cycle_count=170000000, newcount=120000000, cutoff=50000000

: ACPICPUThrottle: Writing 0xc20 width 16 to 0x8f0

: ACPICPUThrottle: Throttle succeeded!

: ACPICPUThrottle: rtc

Edited by offall
Link to comment
Share on other sites

Wow you P3 is crazy, if only it ran that fast. Good on you Offal, what did u enable in Bios, EIST?

 

also, throttle fails sometimes becuase it tries to do it to fast, changing the value seems to break it on core 2 duo's :) i dotn know why it would, but its maybe just me. Testing some more tonight :)

Link to comment
Share on other sites

Wow you P3 is crazy, if only it ran that fast. Good on you Offal, what did u enable in Bios, EIST?

 

also, throttle fails sometimes becuase it tries to do it to fast, changing the value seems to break it on core 2 duo's :blink: i dotn know why it would, but its maybe just me. Testing some more tonight :P

 

 

Thanks Kiko for explainning the failure problem,

that makes great sense! and I am not worrying now

Great job on the previous kext, I really appreciate that !

 

I found a option in Bios says whether I want to enalbe speedstep function on all processors then suddenly the CPUThrottle start to working.

 

 

but, I am not sure what do you mean P3, and why you say it crazy fast

I get a Pentium D 945 which is essentially dual core pentium 4 running on 3.4G with EIST T2M.

I want more than just two frequency (the min and max) but more "steps" when it adjust speed.

do you think it is possible?

Edited by offall
Link to comment
Share on other sites

Hmm, i dunno, but i doubt it. If your cpu only supports two states then thats all you'll get i guess. You have to enable EST in the bios for it to work, imho.

 

I'll look into it some more tonight

Link to comment
Share on other sites

thanks kiko, I thought that this had been integrated with the SSE3 semthex kernel, and for some reason was not being done this for the SSE2 kernel, that is obviously not the case.

 

Also what about a source tree for the new throttling kext? I know the one that is currently used was based off the original Neils one for 8.4.1, but a recent one would not be bad. I really want to try my hand at maybe modifying it a bit to allows for defining states based on aribitrary Vcore/multipler pairs like RMClock does in windows.

 

Finally, and i don't know if this will help with sleep, but i had an insane time with sleep in linux on my laptop. A very similar problem happened, i would sleep, but i woke up, it either did not return the display state, or would crash instantly. So i did something rather simple, I dump the videocard state on sleep, and reloaded on wake, that way i ensured that everything was reinitialized properly, maybe this might help.

 

here is the script (no credit here, i did not write it)

 

# discover video card's ID

ID=`lspci | grep VGA | awk '{ print $1 }' | sed -e 's@0000:@@' -e 's@:@/@'`

 

# securely create a temporary file

TMP_FILE=`mktemp /var/tmp/video_state.XXXXXX`

trap 'rm -f $TMP_FILE' 0 1 15

# switch to virtual terminal 1 to avoid graphics

# corruption in X

chvt 1

# write all unwritten data (just in case)

sync

# dump current data from the video card to the

# temporary file

cat /proc/bus/pci/$ID > $TMP_FILE

# suspend

echo -n mem > /sys/power/state

# restore video card data from the temporary file

# on resume

cat $TMP_FILE > /proc/bus/pci/$ID

/etc/init.d/networking restart

# switch back to virtual terminal 7 (running X)

chvt 9

sleep 4

# remove temporary file

rm -f $TMP_FILE

Edited by blinksilver
Link to comment
Share on other sites

I would be interested to know, as my machine appears to sleep and wake correctly, except the display never comes back. The machine is fully active - responsive to ping, SSH, and I can access its drives over the network etc. I can connect with a VNC client, but while the window appears (indicating it connected successfully), it remains black.

 

I guess the key is this line:

# restore video card data from the temporary file

# on resume

cat $TMP_FILE > /proc/bus/pci/$ID

 

But I suspect that we dont have a /proc on Mac OS X, but rather we need to poke around the IO tree. Anyone got any ideas where I can prod the machine to try to resurrect the gfx?

Link to comment
Share on other sites

often, so does my laptop, that is what this is really for, the videostate is not being reinitalized by hardware, i think they expect "windows" to do it, but alas nothing. So it was the fix.

 

As for the no /proc, i was reading about it here http://www.kernelthread.com/mac/apme/procfs/, someone tried to port procfs over but with no luck, that does however mean that indeed all the data is there, we just need to get our hands on it.

 

 

happy hacking : )

(my 10.4.8 SSE2 ISO just finished, so i am going to try to be more helpful now) I am really just getting to the point where i can really code stuff that matter (just finshed my second year).

Edited by blinksilver
Link to comment
Share on other sites

Hmm, i dunno, but i doubt it. If your cpu only supports two states then thats all you'll get i guess. You have to enable EST in the bios for it to work, imho.

 

I'll look into it some more tonight

 

Thanks for explaination again, Kiko

 

 

It seems to me that cputhrottle can set desire FID to control the frequency.

 

in the log the

ACPICPUThrottle: rtc_cycle_count=170000000, newcount=170000000, cutoff=50000000

 

(from what I can see, the rtc_cycle_count may be the part it send FID to cpu and the cutoff it the "step size"???)

 

 

Since it only read the min and max FID from bios

so it only sending 2 FID in order to control the cpu frequency

 

 

I think one way may slove this question is to MANUALLY set all availble FIDs into cputhrottle

(just my wild guess, forgive me if it is silly, may be modify the kext to make the cutoff=1000000 instead of 50000000 ? to enable all the FIDs as in windows using rightmark utility shown in following screenshot)

untitleddt5.jpg,

then wec an force it to use more FIDs (more steps) instead of just 2

 

 

Actually I think this is not only me, now the new CD or C2D have mutliple FIDs avaible (and mutilple VIDs, I don't know if cputhrottle can controll that),

but from what I read in this thread, ppl only get max of 3-4 states lisited in cputhrottle kext , which is way less than the avaible ones, if you can manually add all the other aviablet PIDs to cputhrottle.kext , it will help to dynamiclly adjust the cpu speed.

Edited by offall
Link to comment
Share on other sites

Offal: It is possible to define your own steps in the source, this is what was done with the original speedstep kexts, so you could choose from a full range of FID/VID pairs. Im writing a kext to test, so once i get it working at home, i'll post a beta here

 

Blinksilver: THe source tree for my kexts is basically nial's kext, just recompiled, with the fsb setting commented out (where it sets the fsb to 100mhz) and states lower than 1ghz enabled, im currently working on a new kext that will be easier for me to understand (as i would have coded it), and should allow full control and cpu state and that will read the available states from the acpi table or by defining them the source

 

P.S: The kext will take some time, im pretty tied up at the moment

P.P.S: The CPU Throttler App included in my pkg, isnt mine, i do not have source for it so i cant change it. Maybe once this kext is done, i'll write a app to control it

Link to comment
Share on other sites

Offal: It is possible to define your own steps in the source, this is what was done with the original speedstep kexts, so you could choose from a full range of FID/VID pairs. Im writing a kext to test, so once i get it working at home, i'll post a beta here

 

Blinksilver: THe source tree for my kexts is basically nial's kext, just recompiled, with the fsb setting commented out (where it sets the fsb to 100mhz) and states lower than 1ghz enabled, im currently working on a new kext that will be easier for me to understand (as i would have coded it), and should allow full control and cpu state and that will read the available states from the acpi table or by defining them the source

 

P.S: The kext will take some time, im pretty tied up at the moment

P.P.S: The CPU Throttler App included in my pkg, isnt mine, i do not have source for it so i cant change it. Maybe once this kext is done, i'll write a app to control it

 

 

Great to hear back from you Kiko, concentrate on your own stuff first, we will wait for your good news!

Edited by offall
Link to comment
Share on other sites

Heh, it seems i rushed to much to make my own kext. I think you can just add your own values into the source of the current kext. I'll also play around with the switching time. i'll up it from 10 to 15 to see if it makes a diffeernce

Link to comment
Share on other sites

Wow,

 

I step away fore a few weeks and you guys fixed it :) thats awesome.

 

I had continued work to CPUThrottler2, but had quit when i found out it wouldnt work in 10.4.8. However, i have a much improved version nearly completed and after my midterm tommorow, I will get seriously back to work on it.

 

Kiko, i just recieved your PM asking for the source for CPUTHrottler. Let me finish up what I have started and clean up the code and then I will be willing to share it with you.

Link to comment
Share on other sites

 Share

×
×
  • Create New...