This is the first public release of Real Temp which is a temperature monitoring program designed for all Intel single Core, dual Core and quad Core processors. Each core on these processors has a digital thermal sensor (DTS) that reports temperature data relative to TjMax which is the safe maximum operating core temperature for the CPU. As your CPU heats up, your Distance to TjMax will decrease. If it reaches zero your processor will start to throttle or slow down so obviously maximizing your distance away from TjMax will help your computer to run at full speed and more reliably too.
Other software like CoreTemp has taken this knowledge and tried to work backwards to convert DTS data to an absolute temperature which most users are more comfortable with and would like to compare.
If the DTS is reading 50 then you know you are 50 degrees away from the throttling point. If the maximum safe operating temperature for your processor (TjMax) is 85C and you are 50 degrees away then your processor must be running at an absolute temperature of 35C.
Absolute Temperature = TjMax - DTS
The formula is dead simple and you don't have to be smarter than a 5th grader to figure it out but there is one small problem.
Intel does not publicly document what TjMax is for desktop processors. TjMax is fully documented for their Mobile processors but not for their desktop Core processors. Without this reference point, your absolute temperature data could be meaningless. Intel has also confirmed that there is no secret bit hidden in these chips that a programmer can read to determine what TjMax really is. The only thing a programmer can do is guess at TjMax and if he gets lucky and the reported temps look more or less believable then everyone is happy.
By doing some testing with a Fluke IR Thermometer I have discovered a significant problem with the DTS data that programmers are basing their core temperature results on. The DTS does not output temperature data that is linear to the actual core temperature across the entire operating range of the processor. Intel individually calibrates each one to reliably trigger thermal throttling at TjMax. That's great but I've found that when the DTS moves more than 35 degrees away from TjMax, the DTS data no longer changes at the exact same rate that the core temperature is changing at.
The difference is slight at first but the further temperatures move away from TjMax, the larger this error can become. Programs that use the previously mentioned formula and do nothing to account for this error will end up reporting idle temperatures that are either too low or are too high. Worse yet are programs that try to correct for this error by adjusting TjMax higher. Now you'll have inaccurate idle temperatures as well as inaccurate load temperatures. A quick Google search will show how wide spread this problem really is.
This issue first came to light when top notch air coolers like the Thermalright Ultra 120 eXtreme were introduced. Some users with the original Conroe core processors were ending up with idle core temperatures being reported that were less than the ambient temperature. The eXtreme is a great cooler but even it can't change the laws of physics. Reported temperatures below ambient when air cooling are impossible to achieve. I noticed this problem with my E6400 but didn't realize the magnitude of error until I recently purchased an E8400.
I headed downstairs to my very cool basement for some comparative testing and found this.
This picture shows both processors operating at the exact same core voltage of 1.08 volts and at the same 1600 MHz. The amount of heat energy put out by a core processor when run like this is minimal. With a good air cooler, the idle temperatures should be very similar if not exactly the same but here there is a difference of 25C to explain (34C vs 9c). Core0 has the sticking DTS sensor problem that seems to be too common with the new 45nm Intel chips. The bottom line is that CoreTemp is not reporting either CPU 100% correctly. My E6400 can't run below the 12C ambient temperature and there's no way that a smaller, more efficient processor like the E8400 is runniing that far above ambient at idle.
I did some further testing with the E8400 and quickly found out that CoreTemp assuming that TjMax=105C is wrong.
I definitely didn't hold anything back on my new E8400 and went as high as 101C. From 60C onwards, it was clear that TjMax is 95C for the new E8000 series desktop processors. That explains 10C of the above difference in temperatures but still leaves a 15C difference at idle.
I've analyzed this from all angles and the theory I have is that my E6400 is reporting too low at idle and my E8400, even when using the correct TjMax=95C, is still reporting idle temperatures that are too high. I was able to measure with the IR thermometer a difference of 5C. After setting a -5C offset in SpeedFan to correct for TjMax, 40C reported by SpeedFan was still only showing up as 35C on the IR thermometer.
Using this knowledge and some more measurements, I came up with some simple correction factors to help compensate for errors in the DTS at idle. Using a setting in Real Temp of (--) for my E8400 and using a setting of (++) for my E6400 now gives me very accurate temperatures for both processors from 10C to 100C. Typically within 1C or 2C of what an IR thermometer shows near idle when pointed at the bare core and exactly equal higher up. The formulas were designed to bring the above two processors a lot more in line with each other which they should be given the identical core voltage. Power or heat generation is proportional to the square of voltage so that is the most important factor to equalize when making comparisons like this.
The above is the only reasonable explanation that I could come up with that takes the results of all of my testing into account. It's fine if you don't believe the above or have your own theories. You can start the discussion by explaining the huge difference in temperatures that the above picture shows. You can also set the Idle Temperature Calibration to 0 and Real Temp will simply use the standard formula as previously mentioned that other programs use to convert DTS data to absolute temperatures.
Idle Temperature Calibration:
If you are interested in this feature then you need a way to find out if your processor reads too high or too low at idle. The method I use is I set my processor to run at a front side bus speed of 266 MHz and then I set the multiplier to 6.0 which results in approximately 1600 MHz. I also lower the core voltage as low as it will go. My Asus board goes as low as 1.08 volts which is fine for this test. You could also use SpeedStep and set C1E to on in the bios to accomplish the same thing. The goal is to reduce the heat output of your processor to a minimum.
By reducing your processor down to a common fixed value, I've found that a well air cooled processor's cores will idle at approximately 3C to 5C above the ambient temperature. If your reported idle temperatures are going below the ambient temperature then you need to use a correction factor of (+) or (++) to get them up into a more believable range. If your CPU is like my E8400 and you notice reported temperatures that are significantly higher than the 3C to 5C range then you'll need to use a (-) or (--) Idle Temperature Calibration factor to bring them down to a reasonable range. That's all there is to it. As long as TjMax is chosen correctly and you do a simple calibration, your reported Core Temperatures will be very accurate and comparable to other users who are using the same software and have also individually calibrated their processor.
The quick reporting of Minimum and Maximum core temperatures is easier than searching through a CoreTemp log file. Each core is individually reported along with the time of the event.
Real Temp also reads and displays the internal PROCHOT# bit. This bit gets set by the processor internally to signal thermal throttling when the processor's core temperature is too hot. There is also a sitcky bit in a Core processor that gets set whenever a throttling episode has happened. This bit is set and won't be reset until after you power down and reboot. Even if Real Temp is not running, you can start it up after a throttling episode and it will report any history of throttling since power on in PROCHOT#: Status / History. No more wondering if your processor was throttling during an intense episode during a game. Start up Real Temp after the game or even let it run during the game and it will let you know.
The recent transition by Intel to 45nm has resulted in some of the DTS sensors showing signs of sticking at low temperatures and not functioning properly. If your DTS sensors are sticking then no software in the world is going to be able to tell you accurate core temperatures based on inaccurate data. Different idle temps is a good first sign of trouble. Test Sensors performs a quick test where it loads up each of your cores and measures the change in the individual DTS data for each core and reports the results.
Temperatures that don't change during this quick test are a sign of a sensor that is getting stuck. One sensor that always changes significantly more than the other sensor is also a sign that the one that moves the smallest amount might be stuck.
This part of the program is still in the experimental stage but it is accurate enough to report Core0 in my E8400 which gets stuck at a DTS value of 67 and won't go lower even if I were to go to the North Pole. This is outside my normal temperature range so isn't a problem for me but other users have reported their sensors getting stuck at much higher values. Don't rely on this program to report accurate temperatures on cores that have sensors that are sticking. If this sticking continues to occur at higher values then your load temperatures based on what the DTS is reporting won't be accurate either.
Log File Off / Log File On:
That's simple enough. Click on this button and if it displays "Log File On" then once an hour or when you exit the program, it will write out to a file called RealTempLog.txt in the directory where Real Temp is running. Logging occurs every 5 seconds but is only output once per hour to eliminate hard drive thrashing which I hate. The on disk log file will continue to grow so if you use this feature then it would be a good idea to delete this file once in a while and start again. The data is simple to transfer into Excel for further analysis. My E8400 shows two cores whose temperatures mirror each other from idle to full load. There is rarely a difference of even one degree between the two cores. Quad core processors that are really just two dual core processors joined together tend to show more difference with two cores running at one temperature and the other two cores running at a slightly different temperature.
This is just a quick benchmarking program I wrote years ago. It is single threaded so you can use it to quickly create a small amount of heat. It uses a very accurate timer, scales very linearly with CPU speed and is not effected by memory timings, etc. This is a quick and easy way to see how your computer is running. It has been normalized so a typical E8400 will score 1000 points and when overclocked to 4050 MHz should score approximately 1350 points. The time is reported to 3 decimal places and seems more accurate than the 3 decimal places that SuperPI uses.
Always on Top:
If you need this feature then double click anywhere on an empty part of the dialog to toggle this feature on and off. Handy when you need to watch the temps while working on something else.
Unlike other temperature monitoring programs, Real Temp uses an external device driver called ia32 which was written by Kaman Yotov:
The install procedure is a little complex but it's very operating system friendly for XP. It also saved me a lot of development time by not having to write my own device driver or borrow one from CrystalCPUID which other software uses. If Real Temp is not for you then it is easy to delete it and go into your Device Manager and remove the ia32 driver as well.
This freeware driver is very small and efficient. Here is the procedure you will need to go through to install it into Windows XP:
1) Go into the Control Panel and select "Add Hardware".
2) Click on Next and it will search your computer for new hardware and then will show this.
Select "Yes, I have already connected the hardware" and then push Next.
Scroll down to the bottom of the next Window and select, "Add a new hardware device." and then click Next.
On the next window select, "Install the hardware that I manually select from a list (Advanced)" and click on Next.
The default on the next window, "Show All Devices" is good so push Next again.
Older computers will take a while but finally the next screen will come up.
Click on the Have Disk... button and direct it to where you have the "sys" driver folder on your hard drive and click OK. Don't worry. You can ignore the first column and it won't try and install an IRDA driver.
Click Next to install the ia32 driver.
Click Next again.
Click on Finish and you are done. This driver is needed by Real Temp so it can read the Model Specific Register where the temperature data is located in an operating system friendly way with out any additional programming on my part. It took me only a week to write Real Temp from start to finish with the help of this driver.
For those with any C++ programming experience here's how simple it is:
// declare a variable from the ia32ring0 class
int DTS_Data = ( msr.readmsr( 0x19C ) >> 16 ) & 0x7F;
That's it. One header file, one variable declaration and one line of code will get you the DTS data from one of your cores. What you do with that info after that is up to you! This driver allows even a novice C++ programmer to easily read their core temperature data.
Finally, if you look in your Device Manager you will now see a small black icon labeled ia32 and Real Temp should be ready to go.
Here's the download.
I've never tried hosting anything there so let me know if you have any problems.