What are the best possible ways to benchmark RAM (no-ECC) under linux / arm?
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:
*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.
Related videos on Youtube
Dibyendu Dutta
Updated on September 18, 2022Comments
-
Dibyendu Dutta almost 2 years
while installing
osm(order & service management)
after installingOracle Database
andOracle 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 over 12 yearsIt 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 over 12 yearsI 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 about 8 yearsWhy does this question have the OpenStreetMap tag? This is obviously something completely different.
-
-
Mircea Vutcovici over 12 yearsThis benchmark will be affected by CPU cache, but it is a good idea.
-
Manuel almost 11 yearsDidn'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 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 over 7 yearsI have adapted this in a simple bash script that I use to benchmark VPS providers - bitbucket.org/snippets/danielsokolowski/G5oeA
-
Kangarooo almost 7 yearsoh cool @DanielSokolowski ill ty to contact im @ g mail.com
-
Mark Booth almost 6 yearsSomething 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 almost 6 yearsMight 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 almost 6 yearsIt's very odd, I've tried with a variety of
bs
andcount
s and the best combination was withbs=512K
but it never goes above 4.2GB/s on a machine which gives 43GB/s with the STREAM benchmark. -
Ciro Santilli Путлер Капут 六四事 over 5 yearsInteresting how the RAMspeed link now redirects to spammy websites.
-
Jason Huntley over 5 yearsyep, looks like their site is gone, updating link to github.
-
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.