Jump to content

VoodooPower 1.2.3


Superhai
 Share

VoodooPower User Survey  

736 members have voted

  1. 1. Which CPU do you use this on?

    • Intel Pentium M
      29
    • Intel Pentium 4/D
      40
    • Intel Core (2) Solo/Duo/Quad
      464
    • Intel Atom
      100
    • AMD K8
      31
    • AMD K10
      22
    • Intel I7 or newer
      19
    • AMD K11 or newer
      11
    • Other
      20
  2. 2. Does it work successfully?

    • Yes, no issues
      363
    • Yes, minor issues/annoyances
      237
    • No, Intel Pentium M/4/D
      20
    • No, Intel Core or newer
      58
    • No, AMD K8
      22
    • No, AMD K10 or newer
      15
    • No, other CPU
      21
  3. 3. How do you rate the usefullness of VoodooPower?

    • No use
      105
    • Poor
      32
    • Mediocre
      54
    • Useful
      193
    • Very useful
      273
    • My life depend on it
      79


351 posts in this topic

Recommended Posts

This one runs smooth so far, thanks a lot hnak, I'll be testing for a while and report any issue.

I'm sorry to be such a pain, I promess to build the next proyect. :)

 

 

This is way more than I expected but just to keep on bothering you... can I keep my cpu frequency, cause it resets to factory default when it loads.

Link to comment
Share on other sites

This is way more than I expected but just to keep on bothering you... can I keep my cpu frequency, cause it resets to factory default when it loads.

It is just a display issue. Your actual clock is what you set.

Though kext changes fid/vid, it does not account for overclocking at calculating frequency. It alway assumes base {censored} = 200. Unless your process is a black edition ( of which multiplier is unlimited ), p-state 0 of ACPI should have its maximum value.

In case of K8, display frequency = 800 + fid * 100.

Link to comment
Share on other sites

You need to install Xcode first. Then use subversion to get the project files from superhai's google code. After that, replace VoodooPower.cpp and build the project.

 

Anyway, I upload Release binary here. It contains a small utility named pstate (which requires this kext installed).

pstate without argument shows current state/voltage/frequency/temperature (temperature value may be bogus).

"pstate a" turns auto throttle on.

"pstate 0 (1,2...)" turns auto throttle off and change the p-state to specified value. Of source, p-state is limited by ACPI table count.

VoodooPowerAMD.zip

 

Why can't you upload the modified kext without .cpp? So that people wouldn't have to build... Its easyer :) You have it built anyway...

Link to comment
Share on other sites

Kext is included. Did you download it ?

 

Hi hnak,

I want to limit processor speed just up to ~1.7GHz instead full throttle 1.83GHz. Can you help me? Without VoodooPower the processor just stuck at 1GHz but with it I will get extreme temperature (>75 celsius) if in full load.

 

kizwan

Link to comment
Share on other sites

Hi everyone...

 

maybe someone can help....

 

I've updated my CPU form E2160(9x300MHz) to E5200(12.5x240MHz).

 

with E2160 everything was fine 4 steps from 1.8 to 2.7GHz....voltage from 1.150 to 1.350

 

now with E5200 speed step is OK but can't make voltage works (to low) form 1.050 to 1.137

 

tried to change max min voltage in plist (min=0 max=0 min=1.275 max=1.275 min 1.150 max 1.275) but no change....

 

always form 1.050 to 1.137

 

maybe someone with E5200 can help me???

 

one more thing: with MSRTools it shows 1.144 1.322....and thats ok....

 

don't know which value is right.... with E2160 everything worked great....

 

used 1.2.1 and 1.2.2....

 

 

any ideas??

 

p.s. sorry about me english

Link to comment
Share on other sites

Hi hnak,

I want to limit processor speed just up to ~1.7GHz instead full throttle 1.83GHz. Can you help me? Without VoodooPower the processor just stuck at 1GHz but with it I will get extreme temperature (>75 celsius) if in full load.

 

kizwan

As my version is AMD only patch, it is useless on Intel system. The original VoodooPower worked neither on K8/K10 and modified the code, as I wanted to use the functionality on my system.

You should ask superhai.

If such functionality is not supported, get the source files, modify them and build your own kext according to your needs.

You should investigate VoodooPower.cpp's method Probe() where it initializes its p-state values.

Link to comment
Share on other sites

As my version is AMD only patch, it is useless on Intel system. The original VoodooPower worked neither on K8/K10 and modified the code, as I wanted to use the functionality on my system.

You should ask superhai.

If such functionality is not supported, get the source files, modify them and build your own kext according to your needs.

You should investigate VoodooPower.cpp's method Probe() where it initializes its p-state values.

 

I just found out that I just need to change PStateLimitHigh value in the Info.plist file. Thanks for the clue (p-states values).

 

EDIT: I add code to check if thermal goes lower than 35, the processor speed will step down to maintain acceptable temperature.

 

kizwan

Link to comment
Share on other sites

Thanks hnak, been trying to look for amd cpu throttling for a couple of days. I have an AMD Turion x2 TL-64 ( so i'm assuming it's the K11 model) and it works fine. I'm currently using the VodooPower.kext that you posted within your VoodooPowerAMD.zip and it works great. One question; how do i know my true temperature? I've tried a couple of temperature software; genericcpumanagement and temperature monitor and it doesn't seem to work. Thanks again.

Link to comment
Share on other sites

Hello! I think I have a problem. I don't know much about CPUs but reading through this topic I found that everybody has lower CPU temperatures than mine. I have intel core 2 duo T7700 @ 2.40. My temperatures are between 45 and even 60 if I use youtube or any other flash player. Frequency is 552 on both cores and voltage 962. I have retail dvd installation 10.5.6. I used this driver voodooPower.kext and the GenericCpuPowerManagement app. please help ;)

Link to comment
Share on other sites

Thanks hnak, been trying to look for amd cpu throttling for a couple of days. I have an AMD Turion x2 TL-64 ( so i'm assuming it's the K11 model) and it works fine. I'm currently using the VodooPower.kext that you posted within your VoodooPowerAMD.zip and it works great. One question; how do i know my true temperature? I've tried a couple of temperature software; genericcpumanagement and temperature monitor and it doesn't seem to work. Thanks again.

Though both Intel and AMD have internal thermal sensors, their implementations are quite different.

Actually, I tried to read the sensor information in VoodooPower.cpp ( in AMDHardwareRead/AMDPowerNowRead ). Some return good-looking values, but others not. Furthermore, AMD developer guide says that the value of K10 temperature sensor is "relative" to some pre-defined value, while K8 returns absolute value.

The "pstate" utility in VoodooPowerAMD.zip just shows the raw value.

Windows utility CoreTemp does the same.

Using CoreTemp and MB manufacturer's utility at the same time, you will be able to get the relation between thermal sensors of CPU and MB, I hope.

Link to comment
Share on other sites

Hi everyone... I'm new on the argument but I downloaded the debug voodoopower.kext and the application CPUPM Control installed with kexthelper and it run correctly, but it shows me even 1602 Mhz only modifying the moltiplicator of my Q6600 cpu thath run standardly 2400 Mhz. How to see if the voodoopower do his work??? Also the fans runs even at the same speed I have a retail installation 10.5.6 vhit all vanilla on the hw on my sign but I don't use the dstd.patcher and the efiv9. Sorry for my english can anyone explain me how to determine the stepping of my cpu? Tnx

 

EDIT: I saw with his applicatio and cpu-x when it goes under pressure the moltiplier go up from 6 to 9 max. But when it is under max pressure cpu-x sign 2404 mhz and your application shows -1890. I know that is no important but i've seen also that the fsb and the bus speed doesn't change always 1066 and 266 is it a problem? And my temperature are when in idle 61-62° and when under pressure also 75-77° I can't believe that!!!

Please help me...

Link to comment
Share on other sites

Hi Superhai,

 

I found out that I have 6 P-state count.

 

Kernel Extension Name: VoodooPower.kext
			 Version: 1.2.3 Release Feb 24 2009 14:48:34
				 CPU: 2x Intel(R) Core(TM)2 CPU		 T5600  @ 1.83GHz
		  Technology: Intel Core Mobile [000006f6]
			P-States: P00 FID 0b DID 00 VID 24 
					: P01 FID 0a DID 00 VID 22 
					: P02 FID 09 DID 00 VID 1f 
					: P03 FID 08 DID 00 VID 1c 
					: P04 FID 07 DID 00 VID 19 
					: P05 FID 06 DID 00 VID 16

 

I added code to VoodooPower v1.2.3 source code that it will check for CPU thermal value where if it is equal or lower than 35 it will increase the P-state. For example if current P-state is 0 & thermal value is equal to 35 or lower, it will request to change the P-state from 0 to 1 & if thermal value still not increase it will continue to increase the P-state. My question is, is it possible for kernel panic to happen if it try to change the P-state from 6 to 7?

 

This is where I add the code (at Auto Power Manager. The code begin at //Step down CPU speed if temperature is too high):-

	// Auto Power Manager
 if (AutoPowerManager) {
	 for (UInt32 i = 0; i < GlobalIOCpuCount; i++) {
		 UInt32 CurrentLoad = Load[i][Usr] + Load[i][Sys];
		 // P-State change
		 Request[i] = 0;
		 if (PStateCount > 1) {
			 Request[i] = Current[i];
			 if (CurrentLoad >= DirectHighest) {
				 Request[i] = Profile[PowerSource].PStateLimitHigh; 
			 } else if (CurrentLoad <= DirectLowest) {
				 Request[i] = PStateCount - Profile[PowerSource].PStateLimitLow - 1;
			 } else if (CurrentLoad >= (Profile[PowerSource].Threshold + Profile[PowerSource].Hysteresis)) {
				 if (Current[i] > Profile[PowerSource].PStateLimitHigh) {
					 Request[i] = Current[i] - 1;
				 }
			 } else if (CurrentLoad <= (Profile[PowerSource].Threshold - Profile[PowerSource].Hysteresis)) {
				 if (Current[i] < (PStateCount - Profile[PowerSource].PStateLimitLow - 1)) {
					 Request[i] = Current[i] + 1;
				 }
			 } else {
				 if (Current[i] < Profile[PowerSource].PStateLimitHigh) {
					 Request[i] = Profile[PowerSource].PStateLimitHigh;
				 } else if (Current[i] > (PStateCount - Profile[PowerSource].PStateLimitLow - 1)) {
					 Request[i] = PStateCount - Profile[PowerSource].PStateLimitLow - 1;
				 }
			 }

			 DebugLog("ThermalCheck on CPU %u = %u", i, Thermal[i]);
			 //Step down CPU speed if temperature is too high
			 if (Thermal[i] <= 35) {
				 Request[i] = Current[i] + 1;
				 InfoLog("Thermal on CPU %u = %u. Switching from state %u to %u.", i, Thermal[i], Current[i], Request[i]);
			 }
		 }

 

Kernel panic did happen but I'm not sure what cause it. No information that mention about it in the log file.

 

I hope you can guide me on this. ;)

 

kizwan

Link to comment
Share on other sites

If you have P-States not yet defined, they will most likely be initialized with 0. Meaning, you try to feed the cpu with fid 0 and vid 0. How the cpu deals with this varies. You will also update 0 to some kernel structures. And they may cause a divide by 0 error.

Also, do not use InfoLog() in the loop, it will ruin your system.log, slow the kernel down severe when using a release compiled version. You can use DebugLog() as the debug version runs the loop with intervals of much longer so the kernel can cope with it.

All in all, if you want to program kernel extensions, make sure that there are no possibilities for mistakes and know where you are in the kernel ecosystem and the timings.

Link to comment
Share on other sites

hey... non one can help me??? I'd like to understand how to edit the plist file... I've a q6600 thw vodoopower 1.2.3 debug version and I've read that if i want the release version i've to edit the plist by myself.... please hoe to do?

Thanx in advance

Link to comment
Share on other sites

Hi Superhai,

 

Thank you for the info. I really appreciated it. I noticed that I called "Thermal" variable too soon. It will return wrong value (0) at first execution, so it will "unnecessarily" change the P-State from 0 to 1. I also add extra checking so that it will not try to increase the P-State higher than my P-State count.

 

At LoopTimerEvent procedure:-

	// Auto Power Manager
 if (AutoPowerManager) {
	 for (UInt32 i = 0; i < GlobalIOCpuCount; i++) {
		 UInt32 CurrentLoad = Load[i][Usr] + Load[i][Sys];
		 // P-State change
		 Request[i] = 0;
		 if (PStateCount > 1) {
			 Request[i] = Current[i];

			 ..........................................

			 // Control CPU temperature
			 const char * ThermalReadStatus;
			 if (ThermalInitialized[i]) {
				 ThermalReadStatus = "True";
			 } else if (!ThermalInitialized[i]) {
				 ThermalReadStatus = "False";
			 }
			 DebugLog("--> Thermal read status: CPU %u = %s", i, ThermalReadStatus);
			 if (ThermalInitialized[i]) {
				 DebugLog("--> Thermal on CPU %u = %u", i, Thermal[i]);
				 // Step down CPU speed by increasing P-State if temperature is too high
				 if (Thermal[i] <= 35) {
					 if (Current[i] < PStateCount - Profile[PowerSource].PStateLimitLow - 1) {
						 Request[i] = Current[i] + 1;
						 DebugLog("--> Thermal on CPU %u too low (%u); switching from P-State %u to %u.", i, Thermal[i], Current[i], Request[i]);
					 }
				 }
			 }
		 }

 

At ProcessorDriver procedure:-

	// Update final values
 for (UInt32 i = 0; i < GlobalIOCpuCount; i++) {
	 Current[i] = Request[i];
	 for (UInt8 u = 0; u < PStateCount; u++) {
		 if ((GlobalCurrent[i].ctl == PState[u].ctl) && (GlobalCurrent[i].did == PState[u].did)) Current[i] = u;
	 }
	 Thermal[i] = GlobalThermal[i];
	 // Set ThermalInitialized[i] to true when Thermal[i] value has been properly obtain.
	 ThermalInitialized[i] = true;

I do believe that I put my code at the right place but if you found something wrong please do correct me. I hope I'm not asking too much from you. :D I just want to be able to control the CPU temperature.

 

kizwan

Link to comment
Share on other sites

For K8 - AMD non constant TSC users. (how many are there ?)

 

When I created a VoodooPower patch for AMD, I noticed that invoking kernel to notify the frequency change causes random crash - DIVIDE error. So I removed the calls. Because of that, K8 users experience system timing drift (Dock animation, Screen saver) when p-state is low. (K10/K11 does not suffer the problem as their TSC is not affected by core clock change.)

 

I investigated the problem and found it is a Voodoo kernel (rtc_clock_stepping()/rtc_clock_stepped() imlementation) bug. As K8 takes longer in frequency transition, it has greater chance to meet the crash, but pre-core Intel may have the same issue.

 

I uploaded the fixed kernel (voodoo 9.5.0) and modified VoodooPower.kext for AMD. I tested them with Socket 939 and AM2 (rev. E and G) on iPC 10.5.6.

 

-------------------

Rev.F PC on 10.5.5 still crashes though less frequent. It seems I need some more work.

Link to comment
Share on other sites

Hello Peeps,

 

Would it be possible to make a GUI for this and copy/add the functionality found in RM Clock?

 

http://cpu.rightmark.org/products/rmclock.shtml

 

This would be as good if not better than the recent cpu-x which is a mac version of cpu-z

 

Maybe this would also help to visualize tings such as temperatures and cpu loads.

 

It may even help the development of this project?

 

Please let me know what you think.

 

Cheers,

 

HC :D

Link to comment
Share on other sites

For K8 - AMD non constant TSC users. (how many are there ?)

 

When I created a VoodooPower patch for AMD, I noticed that invoking kernel to notify the frequency change causes random crash - DIVIDE error. So I removed the calls. Because of that, K8 users experience system timing drift (Dock animation, Screen saver) when p-state is low. (K10/K11 does not suffer the problem as their TSC is not affected by core clock change.)

 

I investigated the problem and found it is a Voodoo kernel (rtc_clock_stepping()/rtc_clock_stepped() imlementation) bug. As K8 takes longer in frequency transition, it has greater chance to meet the crash, but pre-core Intel may have the same issue.

 

I uploaded the fixed kernel (voodoo 9.5.0) and modified VoodooPower.kext for AMD. I tested them with Socket 939 and AM2 (rev. E and G) on iPC 10.5.6.

 

 

Hi hnak,

 

Im experiencing kernel panic when booting with your modified kernel. In fact, i couldnt even reboot after I installed .kext, my system just hangs.

My system: AMD X2 6000+, Gigabyte GA-MA69G-S3H.

Link to comment
Share on other sites

Hi hnak,

 

Im experiencing kernel panic when booting with your modified kernel. In fact, i couldnt even reboot after I installed .kext, my system just hangs.

My system: AMD X2 6000+, Gigabyte GA-MA69G-S3H.

 

I have the same problem with AMD X2 6000+, Gygabyte GA-M65S-S3.

 

Boot in single user mode with -s and delete VooDooPower.kext from /System/Library/Extensions

 

/sbin/fsck -fy

/sbin/mount -uw /

rm /System/Library/Extensions/VooDooPower.kext

exit

Link to comment
Share on other sites

I have the same problem with AMD X2 6000+, Gygabyte GA-M65S-S3.

 

Boot in single user mode with -s and delete VooDooPower.kext from /System/Library/Extensions

 

/sbin/fsck -fy

/sbin/mount -uw /

rm /System/Library/Extensions/VooDooPower.kext

exit

 

Yes, but how do I solve this so that my CPU would stay cool and quiet ;) fan runs ±2600rpm cpu temp - 50 degrees. What do you use? Or maybe you just put up with the noise?

Link to comment
Share on other sites

Hi hnak,

 

Im experiencing kernel panic when booting with your modified kernel. In fact, i couldnt even reboot after I installed .kext, my system just hangs.

My system: AMD X2 6000+, Gigabyte GA-MA69G-S3H.

Sorry,

Boot with -x and "sudo rm -R -f /System/Library/Extensions/VoodooPower.kext".

 

I have the same MB and problem. I am currently working to fix it.

Link to comment
Share on other sites

 Share

×
×
  • Create New...