# Dell Precision M6400 Throttle issue.



## Blohsh (Jan 6, 2021)

i am running M6400 on a 110W non genuine ac adapter which is making my cpu throttle, to fix this issue im using throttlestop in windows and it works perfect with these settings.




but on another hard drive i use linux (debian 10) im still finding a fix to fix this  issue on linux but always failed from 2 or more years till now. my cpu is stuck at 1.2Ghz. the solution which i think is a fix is by changing msr ( i dont really not if that would work ) so i found something https://github.com/DivyanshuVerma/throttlestop-linux   it is for x86 but my processor is x64 (core 2 duo p8400) i did not know the msr register value of my processor so i asked dell for it with same github link as for reference this is their reply:



so by the msr 0x1A0 i find this with msr tool



so any help is appreciated. i don't even know proper commands to execute so can someone help?


----------



## unclewebb (Jan 6, 2021)

Blohsh said:


> this is their reply:


That is not Dell's reply. That was my reply. I wrote that. 

Your RT MSR Tool screenshot, which is a program that I wrote, shows that BD PROCHOT is disabled. Are you using the MSR Tool in Windows? If that is how MSR 0x1A0 looks when you are in Windows with BD PROCHOT disabled, go into Linux and write that same information to MSR 0x1A0 and your problem should be solved.

Wrmsr 0x1A0, 0x0000001068952489

I am not familiar with the Write MSR command in Linux. If you can find out the exact syntax, you just need to write that value to that register.


----------



## Blohsh (Jan 6, 2021)

thanks for the reply. but no this also did not work for me, cpu still at 1.2Ghz at load.


----------



## unclewebb (Jan 6, 2021)

@Blohsh - Did you write that value to both cores? That might make a difference.

In Windows, when you toggle BD PROCHOT on and off in ThrottleStop, does the value of MSR 0x1A0 change? What does the MSR Tool show when BD PROCHOT is enabled and disabled?

Make sure MSR 0x199 has the same values in both Windows and Linux. That is the CPU multiplier and voltage request register in the Core 2 Duo CPUs.


----------



## Blohsh (Jan 7, 2021)

unclewebb said:


> @Blohsh - Did you write that value to both cores? That might make a difference.
> 
> In Windows, when you toggle BD PROCHOT on and off in ThrottleStop, does the value of MSR 0x1A0 change? What does the MSR Tool show when BD PROCHOT is enabled and disabled?
> 
> Make sure MSR 0x199 has the same values in both Windows and Linux. That is the CPU multiplier and voltage request register in the Core 2 Duo CPUs.


yup i tried 0x199 and i was able to write on 1 cpu not on both, and i am able to get 1.7ghz now and max it could atain is 1.82Ghz. and yes BD PROCHOT on or off changes msr values. my all current throttlestop values are in the screenshot in this forum above. this is the commands i run: https://paste.debian.net/plainh/b1fae00c


----------



## unclewebb (Jan 7, 2021)

@Blohsh - You are not using the rdmsr and wrmsr commands correctly.





__





						Ubuntu Manpage:         wrmsr - tool for writing CPU machine specific registers (MSR)
					






					manpages.ubuntu.com
				







__





						Ubuntu Manpage:         rdmsr - tool for reading CPU machine specific registers (MSR)
					






					manpages.ubuntu.com
				




```
blohsh@blohsh:~$ sudo wrmsr 0x1A0 0x0000001068952489
blohsh@blohsh:~$ sudo wrmsr 1x1A0 0x0000001068952489
```

Why are you using *1x*1A0? If you think that you should use 0x to access the first core and 1x to access the second core, that is wrong. That is why you keep getting those error messages, Failed to parse register number. That means it has no idea what you are trying to do. When reading or writing to both cores, all you need to do is use the -a option. That means perform the command on all cores or in your case, send this command to both cores at the same time. No need to enter the same command twice.

When using these commands, the -d option displays output in decimal base 10 numbers. You do not want to use base 10 when reading and writing to CPU registers. Use the -X option when using rdmsr so your results are in hexadecimal. That makes it so much easier to see when you are trying to change a single bit of a CPU register.

The first rdmsr command in the paste you posted shows a decimal value of

83291874441

This value in base 16 hexadecimal is 

0x1364952489

That value is slightly different than the value you got when you used the MSR Tool in Windows. That is OK. I am not surprised that Windows and Linux set the CPU up slightly differently. That value shows that BD PROCHOT is already disabled. Try using the following command to see if that is the default value for MSR 0x1A0 in Linux.

rdmsr -a -X 0x1A0

That should show you the same value twice. Once for each core. If the value is different than what I just posted, let me know so we can come up with the correct value.

You were also having problems with your other command for MSR 0x199. Your CPU supports Intel Dynamic Acceleration (IDA) which was the early version of Intel Turbo Boost. It speeds the CPU up slightly when it is lightly loaded.



			https://www.cpu-world.com/CPUs/Core_2/Intel-Core%202%20Duo%20Mobile%20P8400%20AW80577SH0513M%20-%20AW80577SH0513MN%20(BX80577P8400).html
		


Your CPU supports the 9 multiplier. The 8.5 multiplier is the default multiplier and 9.0 is the IDA multiplier. To request that your CPU use the IDA 9.0 multiplier enter this.

wrmsr -a 0x199 0x91B

If all you want is the 8.5 multiplier use this command.

wrmsr -a 0x199 0x481B

The 4 is a trick to request the 0.5 multiplier. The 1B in that request represents the voltage. If you want to use the 9.0 multiplier and you are not stable, to increase the voltage change 1B in that command to 1C, 1D, 1E or 1F or whatever it takes.


----------



## Blohsh (Jan 8, 2021)

unclewebb said:


> Replied:


so i tried voltage from 1A-1F with both "wrmsr -a 0x199 0x91B" & "wrmsr -a 0x199 0x481B" commands. im still getting max 1.81Ghz. governor is set to performance.


----------



## unclewebb (Jan 8, 2021)

The problem you are having now might be because of Clock Modulation throttling. I am not sure if Linux reports the CPU speed correctly when the CPU is being throttled by clock modulation throttling. Do you need to check the Clock Mod box in ThrottleStop to get maximum performance when in Windows?

Does ThrottleStop show the FSB speed as 266.0 MHz? That is the default bus speed for a P8400. The minimum multiplier is 6.0. It almost seems that Linux was originally reporting your CPU as,

6.0 x 200.0 MHz = 1.2 GHz

and now it is reporting it as

9.0 x 200.0 MHz = 1.8 GHz

Not sure if that is correct or it is reporting this because of throttling. The original Core 2 Duo mobile CPUs used a bus frequency of 200.0 MHz while the newer 45nm Core 2 Duo mobile CPUs used a bus frequency of 266.0 MHz. Include the entire ThrottleStop window in your screenshot.

Keep using this command to set your maximum CPU speed.
wrmsr -a 0x199 0x91B

After that, run this command
rdmsr -a -X 0x19A

This will show if your CPU is using clock modulation throttling. Once I see the contents of that register, I can show you how to disable clock modulation throttling if necessary. You can check this register while in Windows with the MSR Tool to see what it is set to.


----------



## Blohsh (Jan 8, 2021)

unclewebb said:


> Reply


----------



## unclewebb (Jan 9, 2021)

@Blohsh - MSR 0x199 and MSR 0x19A look OK in Windows. Now go into Linux and use these commands,

rdmsr -a -X 0x199

rdmsr -a -X 0x19A

MSR 0x91B does not exist so do not try and read that one. 

Your laptop appears to have a lot of stuff running in the background in Windows. A two core processor can get overloaded pretty easy these days. The 9.0 multiplier is only used when a single core is active. Both of your cores are active in your screenshot so 8.5 is appropriate.


----------



## Blohsh (Jan 9, 2021)

unclewebb said:


> Reply







__





						debian Pastezone
					





					paste.debian.net


----------



## unclewebb (Jan 9, 2021)

You finally found the problem. In Linux, MSR 0x19A shows that your CPU is using clock modulation throttling. This slows your CPU down internally. When you see the value 1C in this register, the 1 means that clock modulation throttling is enabled and the C means that it is set to 75.0%. 

It is easy to fix this.

wrmsr -a 0x19A 0x0

The problem is that after you fix the clock modulation register, I am not sure how long that fix will last. That register might change back to 1C. What ThrottleStop does is it constantly monitors that register. If it sees that register has changed, it sets it back to 0. This is how ThrottleStop prevents clock modulation throttling.

after you use the above command, check this register. Check it right away and check it 30 seconds later or a minute later or five minutes later. Keep checking it to see if it ever changes back.

rdmsr -a -X 0x19A

If it keeps changing back to 1C, you will have to write a small script that keeps setting this register to 0.

If this works, your CPU speed should report correctly in Linux.

// fix CPU speed command
wrmsr -a 0x199 0x91B

// fix clock modulation command
wrmsr -a 0x19A 0x0


----------



## Blohsh (Jan 11, 2021)

unclewebb said:


> Reply:


Yup Thanks! finally found the solution! now i am able to get max Ghz.  how can i mark your answer as solved? i can't find any way to do.


----------



## unclewebb (Jan 11, 2021)

Blohsh said:


> solved


This forum does not have that feature. Max GHz is great news.


----------



## Blohsh (Jan 12, 2021)

unclewebb said:


> Question:


I just wanted to ask "for future issues if i change processor" how can i find the correct register value of my cpu? like 0x199 & 0x19A. intel does not have the documentation of discontinued products. so it is not possible to find help from documentation.


----------



## unclewebb (Jan 12, 2021)

Blohsh said:


> the correct register value


Setting MSR 0x19A is easy. You never want any clock modulation throttling so set that register to 0.

If you have access to Windows and the MSR Tool, set ThrottleStop up correctly so your CPU has access to the maximum multiplier and then have a look at MSR 0x199 to see what value ThrottleStop is using. Use the same value in Linux. 

I do not have access to any Core 2 Duo based computers at the moment. MSR 0xCE might have default voltage and multiplier info in there. Post a screenshot of that register for your P8400.


----------



## Blohsh (Jan 12, 2021)

unclewebb said:


> Result:


this is the result of 0xCE with throttlestop running on its best values.


----------



## unclewebb (Jan 12, 2021)

Blohsh said:


> 0xCE


The last four digits in the EDX register are 092B.

The first two digits are the maximum multiplier so your maximum multiplier is 9. If the first digit was a 4, that signifies an extra +0.5 multiplier. If the first two digits were 48, the 4 is the half multiplier (0.5) + the 8 multiplier for a total of 8.5.

The last two digits, 2B represents the maximum voltage. 2B in hexadecimal format is 43 in base 10 decimal format.

(43 X  0.0125) + 0.7125 = 1.250 V

In Windows if you adjust the ThrottleStop voltage to the maximum, ThrottleStop should show a value of 1.250 V.

You are undervolting so when you set MSR 0x199 to 091B, you are requesting the 9 multiplier and the 1B is 27 in decimal.

(27 X 0.0125) + 0.7125 = 1.050 V

This should work for any 45nm Core 2 Duo. For the older 65nm Core 2 Duo, use 0.8250 in the voltage formula instead of 0.7125. The 65 nm did not use the half multipliers.


----------



## Blohsh (Jan 13, 2021)

unclewebb said:


> Reply:


Thanks a lot again!


----------



## Blohsh (Dec 27, 2021)

unclewebb said:


> Reply:


I switched my cpu to core 2 extreme qx9300 i also have same problem of throttle, in windows its going ok with throttle stop, but in linux i need to edit msr again and im having issues finding the correct values.. can you help me again? thanks. i did try to figure out my self but i am unable to.


----------



## Blohsh (Jan 23, 2022)

So i tried
//First, to fix clock modulation command
wrmsr -a 0x19A 0x0

//Second, to fix CPU speed command
wrmsr -a 0x199 0x4A1B

By default clock was at 1.6 after above mentioned commands i saw cpu constantly at 2.54, i wanted it to be lower when not in use. so i set governor at "ondemand" then it went back to 1.6, i tried to put load it remain on 1.6, i tried to apply the clock and cpu speed command again, after the cpu speed command it shows 2.54 for 1 second and then again turns back to 1.6, even i am putting load on it.


----------

