Linux - Existe alguma maneira de identificar a velocidade da sua memória através de software?

9

Existe alguma maneira de identificar a velocidade da sua memória através do software? Estou no Fedora 9 e estou procurando descobrir a velocidade dos DIMMs que tenho atualmente.

Eu tentei um 'lshw', mas ele não exibe a velocidade. Sei que a placa-mãe suporta três velocidades diferentes, mas não sei o que há lá e não quero desligar a caixa.

Alguma ideia?

Obrigado,

EDIT: Eu encontrei o ram para ser '30 ns 'de acordo com dmidecode. Como pode ser 33 MHz se a placa suporta apenas 400, 533, 667 Mhz RAM?

EDIT 2: Existem outras ferramentas para fazer isso?



EDIT 3: Na verdade, eu me rendi e acabei desligando por alguns minutos e abrindo o caso. Acabou sendo 667 MhZ - este modelo: http://www.directron.com/rm12864aa667.html . Apesar de não ser capaz de descobrir que era 667 por meio de software, marquei a resposta de HD como a correta, pois parece ser a melhor ferramenta para o trabalho.




Aqui está a saída da memória - tipo de código de identificação de dados

# 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
barfoon
fonte
De que fornecedor é a máquina? Você não pode procurar no site deles?
MDMarra 09/08/2009
Não, é uma máquina personalizada
#

Respostas:

18

O dmidecode é a ferramenta que você está procurando.

hdanniel
fonte
Há muita informação aqui - mas a velocidade está em ns, quero a velocidade em MHz?
Barfoon 6/08/09
Meu código dmid me fornece velocidades em ns e MHz, mas alguns segundos de aritmética (ou unidades em execução) realizarão a conversão, se necessário.
Womble
1
Então 30 ns de memória = 33 MHz? Minha matemática está correta aí? 1 / (30/1000000) = velocidade em Hz
barfoon
3
@ barfoon: Sim, 30ns == 33MHz. O cálculo mais rápido é 1000 / (ns) == velocidade em MHz.
Womble
13

No meu Debian, lshw me dá essa informação.

# 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      
sebthebert
fonte
isso é ótimo, mas na minha versão não mostra a velocidade na descrição. Obrigado de qualquer forma,
barfoon
2

Você pode postar sua saída do dmidecode para a seção de memória? ( dmidecode --type memory )

Você pode ler isto: http://www.howtoforge.com/dmidecode-finding-out-hardware-details-without-opening-the-computer-case

O "NS" faz referência a "nanossegundo" a velocidade na qual a memória é capaz de responder. Quanto menor o número, mais rápida a velocidade. Infelizmente, isso não faz referência a um número exato de Mhz. O DMIDECODE também deve produzir o Mhz. Verifique na parte inferior da saída ou simplesmente dmidecode --type memory | grep Mhz

David Rickman
fonte
Posso sugerir que você atualize sua versão do dmidecode para 2.8 ou posterior. Você pode pegar o rpm aqui: icewalkers.com/rpm/dmidecode/fedora-core-9/download/… e apenas rpm -i dmidecode * rpm Ver. 2.7 não suporta mostrar o Mhz no qual sua memória é executada.
21410 David Rickman
1

Se você realmente deseja comparar a velocidade da memória, não poderá fazê-lo em um modo protegido de processador de 32 bits 386, pois as falhas de página e o layout das tabelas de paginação pesarão muito nos resultados.

Sua melhor aposta é codificar a referência no "modo real" de 16 bits, onde você tem acesso direto aos endereços físicos da memória.

Para um bom código de inicialização que possa ser facilmente personalizável, verifique a fonte stage1 do carregador de inicialização GRUB. stage1 é o MBR que reside nos primeiros 512 bytes do seu disco rígido. Você o encontrará no arquivo stage1 / stage1.S do diretório de origem; é muito comentado e facilmente compreensível.

Depois de personalizar o MBR de acordo com suas necessidades, compile-o usando o seguinte método:

$ 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

Agora você tem um x86 MBR pronto. É desejável testar seu código em uma máquina virtual como Qemu ou Bochs antes de executá-lo na máquina real; também facilitará o ciclo de compilação / depuração.

Espero que ajude


fonte
1
Acho que ele só quer saber em que frequência sua RAM é avaliada sem abrir a máquina.
MDMarra 09/08/2009
1

Se você tiver realmente sorte, a ferramenta que procura é uma lanterna. Um pouco de memória, você pode abrir o estojo, ver e ver um adesivo com o rótulo. Depende inteiramente do seu caso, porém, de como é fácil alcançá-lo, e você não precisa desligar a máquina desde que seja realmente muito REALMENTE cuidadoso. Não sei a sua experiência com o trabalho em máquinas internas, mas é a próxima coisa que tento quando não consigo usar os comandos do software Linux para descobrir isso.

Bart Silverstrim
fonte
1

EDIT: Eu encontrei o ram para ser '30 ns 'de acordo com dmidecode. Como pode ser 33 MHz se a placa suporta apenas 400, 533, 667 Mhz RAM?

Eu estou supondo que é algo como isto:

Cada chip individual em um SIMM / DIMM é executado em 30ns ou 33MHz. Existem 8 chips por SIMM, então 8 x 33MHz = 266MHz; ou 16 chips por DIMM, dando 533 MHz.

Assim, enquanto cada chip roda em 33 MHz, todo o módulo de memória pode fornecer dados em 533 MHz.

pgs
fonte
Acredito que esta resposta faz mais sentido, ive postou a saída do dmidecode acima
barfoon
Infelizmente, não é tão simples como eu já vi, como a velocidade relatada é de 30ns e a velocidade real da memória é de 667MHz ... Portanto, não tenho certeza de que haja uma relação clara entre os dois.
olefebvre
@pgs - O Dram síncrono não funciona assim. Todos os chips são acessados ​​em paralelo. É mais provável que esses 30ns sejam o tempo total para acessar a primeira palavra, levando em consideração as latências de endereço de linha e coluna. Mesmo que seja necessário um total de 30ns para acessar a primeira palavra, as palavras subsequentes devem sair muito mais rapidamente. As CPUs modernas gastam muito esforço ocultando essas latências usando cache, previsão de ramificação e outras otimizações.
Mark Booth
1

Eu sei que isso é um pouco tarde, mas:

Se você pegar os tempos suportados e reduzi-los pela metade, eles se ajustam à taxa especificada de 30. Então, se você reduzir pela metade e dividir 10000 por ela, dá (800, 666, 571,4)

Não sei por que, embora eu ache que a conexão entre horários e taxa de dados possa ser complicada; Além disso, um deles pode ser uma taxa de dados dupla .

Chris2048
fonte
1

Só para esclarecer, a memória de 33mhz que você vê no final é a sua memória bios :)

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

Se você deseja usar uma ferramenta melhor, instale lm_sensors ( https://wiki.archlinux.org/index.php/Lm_sensors ) e i2c-tools ( https://www.archlinux.org/packages/?name=i2c- ferramentas )

Então você pode obter muito mais detalhes específicos sobre sua memória com dimm-decode (aqui está uma amostra da saída):

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
tweak2
fonte
1
dimm-decode? Eu acho que você quis dizer decode-dimms. Enfim, isso não funciona para mim: diz que 0 DIMMs SDRAM foram detectados.
Underscore_d
0

Se possível, tente executar o Memtest, IIRC, que mostra a calha e a velocidade da memória no canto superior esquerdo (20000MB / s @ 667MHz, por exemplo).

olefebvre
fonte
0

Os tempos com sdram DDR são múltiplos de 8 E de 2. Pelo que me lembro, DDR significa Double Data Rate (por favor, verifique isto, porque não encontrei as informações para verificar novamente). Essa memória é capaz de transferir os dois sentidos (entrada e saída) nesse meio tempo.

O motivo é fácil. O DDR é cronometrado duas vezes mais rápido que a frequência de barramento especificada. Por favor, não confunda a frequência do barramento e a capacidade da taxa de transferência do barramento. O barramento transfere 32, 64, 128 ou 256 bits na frequência do barramento. Um conjunto de 128 bits de dados POR CICLO é uma quantidade enorme de dados.

Como exemplo: DDR400 foi encontrado em barramentos a 200 MHz. O outro nome é PC3200. Para ir de 400 a 3200, você encontrará um fator 8. Esse fator é SEMPRE verificado independentemente do DDR (1/2/3/4 ...)

O link a seguir é bom o suficiente para entender o básico (e provavelmente melhor e mais completo que minhas explicações :))

Speedstream
fonte