Is there any way to identify the speed of your memory through software? I am on Fedora 9 and looking to find out the speed of the DIMM's I have in there currently.
I have tried a 'lshw' but it doesnt display the speed. I know the motherboard supports 3 different speeds, but I dont know whats in there and dont want to turn off the box.
Any ideas?
Thanks,
EDIT: I have found the ram to be '30 ns' according to dmidecode. How can it be 33 MHz if the board only supports 400, 533, 667 Mhz RAM?
EDIT 2: Are there any other tools to do this?
EDIT 3: I actually surrendered and ended up powering down for a few minutes and opening up the case. It turned out to be 667 MhZ - this model: http://www.directron.com/rm12864aa667.html. Despite not being able to actually figure out it was 667 through software, I have marked HD's answer as the correct one as that seems to be the best tool for the job.
Here is the output of demidecode --type memory
# dmidecode 2.7
SMBIOS 2.4 present.
Handle 0x0008, DMI type 5, 20 bytes.
Memory Controller Information
Error Detecting Method: 64-bit ECC
Error Correcting Capabilities:
None
Supported Interleave: One-way Interleave
Current Interleave: One-way Interleave
Maximum Memory Module Size: 1024 MB
Maximum Total Memory Size: 2048 MB
Supported Speeds:
70 ns
60 ns
50 ns
Supported Memory Types:
DIMM
SDRAM
Memory Module Voltage: 3.3 V
Associated Memory Slots: 2
0x0009
0x000A
Enabled Error Correcting Capabilities:
None
Handle 0x0009, DMI type 6, 12 bytes.
Memory Module Information
Socket Designation: DIMM0
Bank Connections: 9 11
Current Speed: 30 ns
Type: Unknown FPM Parity SDRAM
Installed Size: 1024 MB (Single-bank Connection)
Enabled Size: 1024 MB (Single-bank Connection)
Error Status: OK
Handle 0x000A, DMI type 6, 12 bytes.
Memory Module Information
Socket Designation: DIMM1
Bank Connections: 9 11
Current Speed: 30 ns
Type: Unknown FPM Parity SDRAM
Installed Size: 1024 MB (Single-bank Connection)
Enabled Size: 1024 MB (Single-bank Connection)
Error Status: OK
Handle 0x002F, DMI type 16, 15 bytes.
Physical Memory Array
Location: System Board Or Motherboard
Use: System Memory
Error Correction Type: None
Maximum Capacity: 4 GB
Error Information Handle: Not Provided
Number Of Devices: 2
Handle 0x0031, DMI type 17, 27 bytes.
Memory Device
Array Handle: 0x002F
Error Information Handle: Not Provided
Total Width: 64 bits
Data Width: 64 bits
Size: 1024 MB
Form Factor: DIMM
Set: None
Locator: DIMM0
Bank Locator: BANK0
Type: SDRAM
Type Detail: Synchronous
Speed: Unknown
Manufacturer: Manufacturer0
Serial Number: SerNum0
Asset Tag: AssetTagNum0
Part Number: PartNum0
Handle 0x0033, DMI type 17, 27 bytes.
Memory Device
Array Handle: 0x002F
Error Information Handle: Not Provided
Total Width: 64 bits
Data Width: 64 bits
Size: 1024 MB
Form Factor: DIMM
Set: None
Locator: DIMM1
Bank Locator: BANK1
Type: SDRAM
Type Detail: Synchronous
Speed: Unknown
Manufacturer: Manufacturer1
Serial Number: SerNum1
Asset Tag: AssetTagNum1
Part Number: PartNum1
dmidecode is the tool you're looking for.
On my Debian, lshw give me that information.
If you really want to benchmark the speed of the memory, you can't do it in a 32bit processor 386 protected mode since the page faults and the layout of the pagetables will weight a lot in the results.
Your best bet is coding the benchmark in 16bit "real mode" where you have direct access to the memory physical addresses.
For a nice bootup code that can be easily customizable, check the GRUB bootloader stage1 source. stage1 is the MBR that resides in the first 512 bytes of your hard disk. You'll find it in the source directory stage1/stage1.S file; it's heavily commented and easily understandable.
Once you have the MBR customized to your needs, compile it using the following method:
Now you have an x86 MBR ready. It's desirable to test your code on a virtual machine like Qemu or Bochs before running it on the real machine; it will also ease the compilation/debugging cycle.
Hope it helps
Can you post your output of dmidecode for the memory section? (dmidecode --type memory)
You might want to read this: http://www.howtoforge.com/dmidecode-finding-out-hardware-details-without-opening-the-computer-case
The "NS" references "nanosecond" the speed in which the memory is able to reply. The lower the number the faster the speed. Unfortunately this doesn't reference an exact Mhz number. DMIDECODE is supposed to output the Mhz as well. Check at the very bottom of the output or simply dmidecode --type memory | grep Mhz
Just to clarify, the 33mhz memory you see at the end is your bios memory :)
If you want to use a better tool, install lm_sensors (https://wiki.archlinux.org/index.php/Lm_sensors) and i2c-tools (https://www.archlinux.org/packages/?name=i2c-tools)
Then you can get much more details specifics about your memory with dimm-decode (here is a sample of the output):
If you're really lucky, the tool you're looking for is a flashlight. Some memory you can open the case up and look and see a sticker that has it on the label. Depends entirely on your case though as to how easy it is to get to it, and you don't need to turn off the machine as long as you're really really REALLY careful. I don't know how experienced you are with working on machine internals, but this is the next thing I try when I can't use Linux software commands to figure it out.
I'm guessing it's something like this:
Each individual chip on a SIMM/DIMM runs at 30ns, or 33MHz. There are 8 chips per SIMM, so 8 x 33MHz = 266MHz; or 16 chips per DIMM, giving 533 MHz.
So while each chip runs at 33 MHz, the whole memory module can deliver data at 533 MHz.
I know this is a bit late, but:
If you take the supported timings, and halve them, they fit with the given rate of 30. Then if you halve this and divide 10000 by it, gives (800, 666, 571.4)
I have no idea why, although I thing the connection between timings and data-rate might be complicated; Also, one of these might be a double data rate.
If possible try running Memtest, IIRC it shows the troughout as well as the memory speed in the top left corner (20000MB/s @ 667MHz for instance).
The timings with DDR sdram are a multiple from 8 AND from 2. From what I remember, DDR means Double Data Rate (please check this, because I could not find the information to check again). That memory is able to transfer both ways (in & out) in the mean time.
The reason is easy. The DDR is timed twice faster than the given bus frequency. Please do not confuse bus frequency and transfer rate capacity for the bus. The bus transfers 32, 64, 128 or 256 bits at the bus frequency. One set of 128 bits of data PER CYCLE is a huge amount of data.
As an example: DDR400 was found on buses @ 200 MHz. The other name is PC3200. To get from 400 to 3200, you will find a factor 8. This factor is ALWAYS verified whatever the DDR (1/2/3/4...)
The following link is good enough to get the basics (and probably better and more complete than my explanations :) )