What are the best possible ways to benchmark RAM (no-ECC) under linux / arm?

130

Solution 1

Here's the way I sometimes test ram: first mount two tmpfs (by default tmpfs is half the ram):

# mount -t tmpfs /mnt/test1 /mnt/test1
# mount -t tmpfs /mnt/test2 /mnt/test2

Check free memory and free space:

# free
             total       used       free     shared    buffers     cached
Mem:        252076     234760      17316          0      75856      62328
-/+ buffers/cache:      96576     155500
Swap:      1048820        332    1048488

# df -h -t tmpfs
Sys. de fich.         Tail. Occ. Disp. %Occ. Monté sur
tmpfs                 124M     0  124M   0% /lib/init/rw
udev                   10M  104K  9,9M   2% /dev
tmpfs                 124M     0  124M   0% /dev/shm
/mnt/test1            124M     0  124M   0% /mnt/test1
/mnt/test2            124M     0  124M   0% /mnt/test2

Now fill the tmpfs with dd:

# dd if=/dev/zero of=/mnt/test1/test bs=1M 
dd: écriture de `/mnt/test1/test': Aucun espace disponible sur le périphérique
123+0 enregistrements lus
122+0 enregistrements écrits
128802816 octets (129 MB) copiés, 1,81943 seconde, 70,8 MB/s

# dd if=/dev/zero of=/mnt/test2/test bs=1M 
dd: écriture de `/mnt/test2/test': Aucun espace disponible sur le périphérique
123+0 enregistrements lus
122+0 enregistrements écrits
128802816 octets (129 MB) copiés, 5,78563 seconde, 22,3 MB/s

You can check that your memory is actually quite full:

# free
             total       used       free     shared    buffers     cached
Mem:        252076     248824       3252          0       1156     226380
-/+ buffers/cache:      21288     230788
Swap:      1048820      50020     998800

Now you may run various tests, for instance check that both temp files are identical, directly or running md5sum, sha1sum, etc:

# time cmp /mnt/test1/test /mnt/test2/test 

real    0m4.328s
user    0m0.041s
sys     0m1.117s

About temperature monitoring, I know only of lm-sensors. I don't know if it manages your particular hardware, but you probably could give it a try anyway.

Solution 2

What are the best possible ways to benchmark RAM (no-ECC) under linux / arm?

RamSpeed is the only multiplatform memory benchmark tool I'm aware of. You might be able to compile it for arm, if supported:

https://github.com/cruvolo/ramspeed-smp

If it's not supported, you might be able to benchmark using stream:

https://web.archive.org/web/20211104122453/http://www.cs.virginia.edu/stream/

want to test integrity and global performances of no-ECC memory chips on a custom board

Here, I've used memtest on many occasions for integrity checking and it works great:

http://www.memtest.org/

*Note, I've only read this supports Arm. However, I haven't tested on an Arm.

Are there some tools that run under linux so I can monitor system and global temperature in the same time ?

If the distribution you're using supports yum, you can easily install lm_sensors:

yum install lm_sensors

You can also download and compile from: here http://www.lm-sensors.org/

However, I'm not certain it will provide temperature data regarding your memory. Your motherboard also has to have sensors for reading mem temperature.

Are there some no-ECC specific tests to do in general ?

memtest does include tests for both ECC and non-ECC

I just remembered one last thing you could try. Get fedora for arm architecture or the rpm. You can run the stress package which will stress test your cpu and memory:

stress-1.0.4-4.fc13.armv5tel.rpm

If busybox has an rpm installer packaged with it, you might be able to deploy one of the arm rpms from the fedora distribution.

Solution 3

Write a file into an existing tmpfs like /tmp with dd as wazoox suggested, but limit its size to less then half of your free memory.

First, find out how much memory is available:

> free -h                                                                       
              total        used        free      shared  buff/cache  available 
Mem:            15G        3.0G         11G        540M        1.0G         11G 
Swap:            9G        1.2M          9G                                     

Then, write a file, in this case 4GB in total using 4000 blocks of 1MB:

> dd if=/dev/zero of=/tmp/testfile bs=1M count=4000 
4000+0 records in
4000+0 records out
4194304000 bytes (4.2 GB, 3.9 GiB) copied, 1.1395 s, 3.7 GB/s

This way you will avoid swapping and there is no need to mount anything.

Share:
130

Related videos on Youtube

Dibyendu Dutta
Author by

Dibyendu Dutta

Updated on September 18, 2022

Comments

  • Dibyendu Dutta
    Dibyendu Dutta almost 2 years

    enter image description here

    while installing osm(order & service management)after installing Oracle Database and Oracle WebLogic Server, i am getting this error which is in the pic.

    and in install log i am getting this below error.

    Caused by: com.mslv.install.db.util.DbManagerException: ORA-00600: internal error code, arguments: [qkkCombine:1], [], [], [], [], [], [], [], [], [], [], [] sql: alter table om_orch_item_hier add CONSTRAINT XFK2OM_ORCH_ITEM_HIER FOREIGN KEY (order_seq_id, child_node_index) REFERENCES OM_ORCH_ORDER_ITEM(order_seq_id, item_node_index) ON DELETE CASCADE NOT DEFERRABLE NORELY ENABLE VALIDATENested Exception: ORA-00600: internal error code, arguments: [qkkCombine:1], [], [], [], [], [], [], [], [], [], [], [] Nested Exception: java.sql.SQLException: ORA-00600: internal error code, arguments: [qkkCombine:1], [], [], [], [], [], [], [], [], [], [], []

    at com.mslv.install.db.util.SqlHelper.execute(SqlHelper.java:202) at com.mslv.install.db.load.impl.AbstractObjectRootProxyImpl.processSqlStatement(AbstractObjectRootProxyImpl.java:399) at com.mslv.install.db.load.impl.AbstractObjectRootProxyImpl.processSql(AbstractObjectRootProxyImpl.java:388) at com.mslv.install.db.load.impl.AbstractObjectRootProxyImpl.processDDL(AbstractObjectRootProxyImpl.java:215) at com.mslv.install.db.load.impl.AbstractObjectRootProxyImpl.processObject(AbstractObjectRootProxyImpl.java:159) at com.mslv.install.db.processor.ApplicationProcessor.processCreateAction(ApplicationProcessor.java:577) at com.mslv.install.db.processor.ApplicationProcessor.processCreationActions(ApplicationProcessor.java:608) at com.mslv.install.db.processor.ApplicationProcessor.importApplicationItems(ApplicationProcessor.java:458) at com.mslv.install.db.processor.ApplicationProcessor.installApplicationModel(ApplicationProcessor.java:764) at com.mslv.install.db.processor.ApplicationProcessor.importApplicationModel(ApplicationProcessor.java:144) at com.mslv.install.db.ImportDBTask.execute(ImportDBTask.java:39) ... 14 more Caused by: java.sql.SQLException: ORA-00600: internal error code, arguments: [qkkCombine:1], [], [], [], [], [], [], [], [], [], [], []

    at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:439) at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:395) at oracle.jdbc.driver.T4C8Oall.processError(T4C8Oall.java:802) at oracle.jdbc.driver.T4CTTIfun.receive(T4CTTIfun.java:436) at oracle.jdbc.driver.T4CTTIfun.doRPC(T4CTTIfun.java:186) at oracle.jdbc.driver.T4C8Oall.doOALL(T4C8Oall.java:521) at oracle.jdbc.driver.T4CStatement.doOall8(T4CStatement.java:194) at oracle.jdbc.driver.T4CStatement.executeForRows(T4CStatement.java:1000) at oracle.jdbc.driver.OracleStatement.doExecuteWithTimeout(OracleStatement.java:1307) at oracle.jdbc.driver.OracleStatement.executeInternal(OracleStatement.java:1882) at oracle.jdbc.driver.OracleStatement.execute(OracleStatement.java:1847) at oracle.jdbc.driver.OracleStatementWrapper.execute(OracleStatementWrapper.java:301) at com.mslv.install.db.util.SqlHelper.execute(SqlHelper.java:194)

    • Jason Huntley
      Jason Huntley over 12 years
      It would help if you provide us the linux distribution you're working with. Are you running a server or desktop distribution? Does it include XServer?
    • moul
      moul over 12 years
      I use linux 3.0 bare metal with busybox, rootfs is on nfs, so I compile tools from another host with an arm cross compiler. There is no XServer.
    • scai
      scai about 8 years
      Why does this question have the OpenStreetMap tag? This is obviously something completely different.
  • Mircea Vutcovici
    Mircea Vutcovici over 12 years
    This benchmark will be affected by CPU cache, but it is a good idea.
  • Manuel
    Manuel almost 11 years
    Didn't test myself, but Mircea is probably right: so i would "echo 3 > /proc/sys/vm/drop_caches" to free pagecaches, dentries and inodes, that should do it.
  • Lumi
    Lumi over 10 years
    +1 This dd method (on an old AMD Athlon 64 3200+) has given me results consistently proportional to changes in memory clock speed, which I take to mean that it is good enough. Not sure, though, why you would want to clog the entire system memory with /dev/zero - my system froze when I attempted to do that.
  • Daniel Sokolowski
    Daniel Sokolowski over 7 years
    I have adapted this in a simple bash script that I use to benchmark VPS providers - bitbucket.org/snippets/danielsokolowski/G5oeA
  • Kangarooo
    Kangarooo almost 7 years
    oh cool @DanielSokolowski ill ty to contact im @ g mail.com
  • Mark Booth
    Mark Booth almost 6 years
    Something seems to be artificially limiting the speed of tmpfs on my RHEL6/7 machines. I get the same 4GB/s as you whether I run this command on quad channel DDR3-1866 machine, a quad channel DDR4-2666 machine, or that same machine with only two memory channels populated. These should be writing to memory at 60, 85 and 42GB/s respectivly, not 4GB/s.
  • baldrianbandit
    baldrianbandit almost 6 years
    Might be dd is just doing loops with a constant waiting intervall and thus, limiting the speed of the whole action. Try it the other way around: dd if=/dev/zero of=/tmp/testfile bs=4000M count=1
  • Mark Booth
    Mark Booth almost 6 years
    It's very odd, I've tried with a variety of bs and counts and the best combination was with bs=512K but it never goes above 4.2GB/s on a machine which gives 43GB/s with the STREAM benchmark.
  • Ciro Santilli Путлер Капут 六四事
    Ciro Santilli Путлер Капут 六四事 over 5 years
    Interesting how the RAMspeed link now redirects to spammy websites.
  • Jason Huntley
    Jason Huntley over 5 years
    yep, looks like their site is gone, updating link to github.
  • wazoox
    wazoox about 2 years
    @Lumi I fill in the RAM to test it (that's why I ran cmp, md5sum, etc afterwards), it's a poor man's Memtest86+ :) If it crashes your system, either you have no swap, or your RAM may be faulty.