11

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

10 Answers 10

20
+100

dmidecode is the tool you're looking for.

7
  • There's lots of info here - but the speed is in ns, I want the speed in MHz?
    – barfoon
    Aug 6, 2009 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, 2009 at 2:19
  • 1
    So 30 ns memory = 33 MHz? Is my math correct there? 1 / (30 / 1,000,000) = speed in Hz
    – barfoon
    Aug 6, 2009 at 2:32
  • 3
    @barfoon: Yes, 30ns == 33MHz. The quicker calculation is 1000/(ns) == speed in MHz.
    – womble
    Aug 6, 2009 at 4:47
15

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      
1
  • this is great, but on my version it does not show the speed under description. Thanks anyways,
    – barfoon
    Aug 6, 2009 at 13:18
2

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

1
  • 1
    I think he just wants to know what frequency his RAM is rated at without opening the machine.
    – MDMarra
    Aug 9, 2009 at 13:15
2

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

1
2

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
1
  • 2
    dimm-decode? I think you meant decode-dimms. Anyway, it doesn't work for me: says 0 SDRAM DIMMs were detected. Oct 24, 2015 at 17:34
1

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.

1

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.

3
  • I believe that this answer makes the most sense, ive posted the output of dmidecode above
    – barfoon
    Aug 10, 2009 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, 2009 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, 2013 at 11:17
1

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.

0

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

0

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

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .