Take the 2-minute tour ×
Server Fault is a question and answer site for professional system and network administrators. It's 100% free, no registration required.

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
share|improve this question
    
What vendor is the machine from? You can't look it up on their site? –  MDMarra Aug 9 '09 at 13:16
    
No, its a custom built machine –  barfoon Aug 10 '09 at 13:22

9 Answers 9

up vote 13 down vote accepted
+100

dmidecode is the tool you're looking for.

share|improve this answer
    
There's lots of info here - but the speed is in ns, I want the speed in MHz? –  barfoon Aug 6 '09 at 2:16
    
My dmidecode gives me speeds in ns and MHz, but a few seconds of arithmetic (or running units) will perform the conversion if necessary. –  womble Aug 6 '09 at 2:19
    
    
So 30 ns memory = 33 MHz? Is my math correct there? 1 / (30 / 1,000,000) = speed in Hz –  barfoon Aug 6 '09 at 2:32
2  
@barfoon: Yes, 30ns == 33MHz. The quicker calculation is 1000/(ns) == speed in MHz. –  womble Aug 6 '09 at 4:47

On my Debian, lshw give me that information.

# lshw -version
B.02.13
# lshw -short -C memory
H/W path             Device     Class       Description
=======================================================
/0/1                            memory      128KiB BIOS
/0/5/6                          memory      20KiB L1 cache
/0/5/7                          memory      1MiB L2 cache
/0/27                           memory      System Memory
/0/27/0                         memory      256MiB DIMM DDR Synchronous 400 MHz (2.5 ns)
/0/27/1                         memory      256MiB DIMM DDR Synchronous 400 MHz (2.5 ns)
/0/27/2                         memory      256MiB DIMM DDR Synchronous 266 MHz (3.8 ns)
/0/27/3                         memory      256MiB DIMM DDR Synchronous 400 MHz (2.5 ns)
/0/28                           memory      Flash Memory
/0/28/0                         memory      512KiB Chip FLASH Non-volatile
/0/0                            memory      
/0/2                            memory
share|improve this answer
    
this is great, but on my version it does not show the speed under description. Thanks anyways, –  barfoon Aug 6 '09 at 13:18

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

share|improve this answer
    
Might I suggest that you upgrade your verision of dmidecode to 2.8 or later. You can grab the rpm here: icewalkers.com/rpm/dmidecode/fedora-core-9/download/… and just rpm -i dmidecode*rpm Ver. 2.7 doesn't support showing the Mhz at which your memory runs. –  David Rickman Aug 11 '09 at 12:44

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.

share|improve this answer

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?

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.

share|improve this answer
    
I believe that this answer makes the most sense, ive posted the output of dmidecode above –  barfoon Aug 10 '09 at 13:20
    
Unfortunately it's not that simple as i have seen such thing as reported speed being 30ns and actual memory speed being 667MHz... So i'm not certain tehre is a clear relationship between the two of them. –  olefebvre Aug 11 '09 at 14:42
    
@pgs - Synchronous Dram doesn't work like that. All chips are accessed in parallel. It is more likely that this 30ns is the total time to access the first word, taking into account row and column address latencies. Even if it takes a total of 30ns to access the first word, subsequent words should come out much faster. Modern CPU's spend a lot of effort hiding such latencies using cache, branch prediction and other optimisations. –  Mark Booth Jan 9 '13 at 11:17

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.

share|improve this answer

Just to clarify, the 33mhz memory you see at the end is your bios memory :)

    Type: Flash
    Type Detail: Non-Volatile
    Speed: 33 MHz
    Manufacturer: ATMEL

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):

Decoding EEPROM: /sys/bus/i2c/drivers/eeprom/0-0055
Guessing DIMM is in                             bank 6

---=== SPD EEPROM Information ===---
EEPROM CRC of bytes 0-116                       OK (0x4422)
# of bytes written to SDRAM EEPROM              176
Total number of bytes in EEPROM                 256
Fundamental Memory type                         DDR3 SDRAM
Module Type                                     RDIMM

---=== Memory Characteristics ===---
Fine time base                                  2.500 ps
Medium time base                                0.125 ns
Maximum module speed                            1066MHz (PC3-8533)
Size                                            16384 MB
Banks x Rows x Columns x Bits                   8 x 15 x 11 x 64
Ranks                                           4
SDRAM Device Width                              4 bits
tCL-tRCD-tRP-tRAS                               7-7-7-20
Supported CAS Latencies (tCL)                   8T, 7T, 6T

---=== Timing Parameters ===---
Minimum Write Recovery time (tWR)               15.000 ns
Minimum Row Active to Row Active Delay (tRRD)   7.500 ns
Minimum Active to Auto-Refresh Delay (tRC)      50.625 ns
Minimum Recovery Delay (tRFC)                   160.000 ns
Minimum Write to Read CMD Delay (tWTR)          7.500 ns
Minimum Read to Pre-charge CMD Delay (tRTP)     7.500 ns
Minimum Four Activate Window Delay (tFAW)       37.500 ns

---=== Optional Features ===---
Operable voltages                               1.5V, 1.35V
RZQ/6 supported?                                Yes
RZQ/7 supported?                                Yes
DLL-Off Mode supported?                         Yes
Operating temperature range                     0-95C
Refresh Rate in extended temp range             1X
Auto Self-Refresh?                              No
On-Die Thermal Sensor readout?                  No
Partial Array Self-Refresh?                     No
Thermal Sensor Accuracy                         0
SDRAM Device Type                               0

---=== Physical Characteristics ===---
Module Height (mm)                              30
Module Thickness (mm)                           4 front, 4 back
Module Width (mm)                               133.5
Module Reference Card                           F

---=== Registered DIMM ===---
# DRAM Rows                                     2
# Registers                                     2
Register manufacturer                           IDT
Register device type                            SSTE32882
Register revision                               0x61
Heat spreader characteristics                   00
SSTE32882 RC0/RC1                               00
SSTE32882 RC2/RC3                               50
SSTE32882 RC4/RC5                               50
SSTE32882 RC6/RC7                               00
SSTE32882 RC8/RC9                               00
SSTE32882 RC10/RC11                             00
SSTE32882 RC12/RC13                             00
SSTE32882 RC14/RC15                             00

---=== Manufacturer Data ===---
Module Manufacturer                             Samsung
DRAM Manufacturer                               Samsung
Manufacturing Location Code                     0x02
Manufacturing Date                              2011-W39
Assembly Serial Number                          xxx
Part Number                                     M393B2K70CM0-YF8
share|improve this answer

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:

$ BOOT=mbr
$ gcc -O2 -fno-builtin -nostdinc -falign-jumps=1 -falign-loops=1 -falign-functions=1 -Wundef -g -c $BOOT.S
$ gcc  -g  -nostdlib -Wl,-N,-Ttext,7C00 -o $BOOT.exec  $BOOT.o  
$ objcopy -O binary $BOOT.exec $BOOT

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

share|improve this answer
1  
I think he just wants to know what frequency his RAM is rated at without opening the machine. –  MDMarra Aug 9 '09 at 13:15

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).

share|improve this answer

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.