{"id":210,"date":"2016-01-04T04:27:18","date_gmt":"2016-01-04T04:27:18","guid":{"rendered":"http:\/\/www.ferzkopp.org\/wordpress\/?p=210"},"modified":"2016-01-11T18:59:51","modified_gmt":"2016-01-12T02:59:51","slug":"pcdunio-mongodb-cluster","status":"publish","type":"post","link":"https:\/\/www.ferzkopp.net\/wordpress\/2016\/01\/04\/pcdunio-mongodb-cluster\/","title":{"rendered":"pcdunio MongoDB Cluster"},"content":{"rendered":"<p>This years X-mas project was to build a little ARM based cluster of pcdunio (Raspberry Pie 2+ like) boards running a MongoDB 3.0 NoSQL database for under $200.<\/p>\n<p><!--more--><\/p>\n<h6>Hardware<\/h6>\n<p>The base board was a <a href=\"http:\/\/www.linksprite.com\/linksprite-pcduino3nano-lite\/\" target=\"_blank\">pcDunio3 nano lite<\/a> that was a mere $15 on Amazon and is more powerful and has better ethernet connectivity than a RP2.<\/p>\n<p>A stack of 4 of these boards needs to be build, and I opted to use a laser cut acrylic plate (had some left) and some M2 and M3 nylon spacers for the job. Below is the progression from circuitboard scan, to final cut plate. SVG files for laser cutters are <a href=\"http:\/\/www.ferzkopp.org\/Projects\/pcDunio3nano\/pcDunioNanoBoard-WithSupports.svg\" target=\"_blank\">here<\/a> and <a href=\"http:\/\/www.ferzkopp.org\/Projects\/pcDunio3nano\/BaseBoard-WithSupports.svg\" target=\"_blank\">here<\/a>.<\/p>\n<p><a href=\"http:\/\/www.ferzkopp.org\/wordpress\/wp-content\/uploads\/2016\/01\/pcDunioMount.png\"><img loading=\"lazy\" decoding=\"async\" title=\"pcDunioMount\" style=\"border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; margin: 0px 0px 18px; display: inline; padding-right: 0px; border-top-width: 0px\" border=\"0\" alt=\"pcDunioMount\" src=\"http:\/\/www.ferzkopp.org\/wordpress\/wp-content\/uploads\/2016\/01\/pcDunioMount_thumb.png\" width=\"614\" height=\"207\"><\/a><\/p>\n<p>The boards were equiped with a 16GB UHCI SD card for the OS and a 8GB USB2 flash drive for swap space. The stack was wired with a 5-port switch to the LAN and a 4-port charge station supplied power.<\/p>\n<p>The final stack looked like this:<\/p>\n<p><a href=\"http:\/\/www.ferzkopp.org\/wordpress\/wp-content\/uploads\/2016\/01\/XmasProject.jpg\"><img loading=\"lazy\" decoding=\"async\" title=\"XmasProject\" style=\"border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; margin: 0px 0px 18px; display: inline; padding-right: 0px; border-top-width: 0px\" border=\"0\" alt=\"XmasProject\" src=\"http:\/\/www.ferzkopp.org\/wordpress\/wp-content\/uploads\/2016\/01\/XmasProject_thumb.jpg\" width=\"353\" height=\"624\"><\/a><\/p>\n<h6>Update (1\/6\/2015)<\/h6>\n<p>Added also a smallish (aka cheap) SSD for good measures; mostly to see if the performance is any better than the SD card or USB (of course it is).<\/p>\n<p><a href=\"http:\/\/www.ferzkopp.net\/wordpress\/wp-content\/uploads\/2016\/01\/SSDInCluster.png\"><img loading=\"lazy\" decoding=\"async\" title=\"SSDInCluster\" style=\"border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; padding-top: 0px; padding-left: 0px; border-left: 0px; margin: 0px 0px 18px; display: inline; padding-right: 0px\" border=\"0\" alt=\"SSDInCluster\" src=\"http:\/\/www.ferzkopp.net\/wordpress\/wp-content\/uploads\/2016\/01\/SSDInCluster_thumb.png\" width=\"365\" height=\"207\"><\/a><\/p>\n<h6>Software<\/h6>\n<p>The OS installed was <a href=\"http:\/\/www.armbian.com\/pcduino3\" target=\"_blank\">armbian<\/a> (latest Debian version is fine, since I did not care about the missing accelerated graphics support), the database was a self-compiled MongoDB3.0 (vs. the stock 2.4), and rockmongo was used as web based UI for the database.<\/p>\n<p><a href=\"http:\/\/www.ferzkopp.org\/wordpress\/wp-content\/uploads\/2016\/01\/image.png\"><img loading=\"lazy\" decoding=\"async\" title=\"image\" style=\"border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; margin: 0px 0px 18px; display: inline; padding-right: 0px; border-top-width: 0px\" border=\"0\" alt=\"image\" src=\"http:\/\/www.ferzkopp.org\/wordpress\/wp-content\/uploads\/2016\/01\/image_thumb.png\" width=\"682\" height=\"659\"><\/a><\/p>\n<h4>BOM<\/h4>\n<p>&#8230; under $200 \ud83d\ude42<\/p>\n<p><a href=\"http:\/\/www.ferzkopp.org\/wordpress\/wp-content\/uploads\/2016\/01\/image-1.png\"><img loading=\"lazy\" decoding=\"async\" title=\"image\" style=\"border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; margin: 0px 0px 18px; display: inline; padding-right: 0px; border-top-width: 0px\" border=\"0\" alt=\"image\" src=\"http:\/\/www.ferzkopp.org\/wordpress\/wp-content\/uploads\/2016\/01\/image_thumb-1.png\" width=\"689\" height=\"164\"><\/a><\/p>\n<p>+ $26 for the SSD (cables I had laying around)<\/p>\n<h4>Installation Steps<\/h4>\n<p>&#8211; local network is DHCP based and 192.168.1.x<br \/>&#8211; download and flash Armbian_4.5_Pcduino3nano_Debian_jessie_4.2.3 to SD card using win32diskimager-v0.7-binary<\/p>\n<p>&#8211; boot and wait<\/p>\n<p>&#8211; log into initial user using ssh (or putty)<br \/>root\/1234<\/p>\n<p>&#8211; edit hostname and set it to cluster[#]<\/p>\n<p># install preferred editor, here: joe<br \/>apt-get -y install joe<\/p>\n<p>joe \/etc\/hostname<br \/>cluster[#]<\/p>\n<p>joe \/etc\/hosts<br \/>127.0.0.1&nbsp;&nbsp; localhost cluster[#]<br \/>::1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; localhost cluster[#] ip6-localhost ip6-loopback<br \/>fe00::0&nbsp;&nbsp;&nbsp;&nbsp; ip6-localnet<br \/>ff00::0&nbsp;&nbsp;&nbsp;&nbsp; ip6-mcastprefix<br \/>ff02::1&nbsp;&nbsp;&nbsp;&nbsp; ip6-allnodes<br \/>ff02::2&nbsp;&nbsp;&nbsp;&nbsp; ip6-allrouters<br \/>192.168.1.11 cluster1<br \/>192.168.1.12 cluster2<br \/>192.168.1.13 cluster3<br \/>192.168.1.14 cluster4<\/p>\n<p>joe \/etc\/network\/interfaces<br \/>iface eth0 inet static<br \/>address 192.168.1.1[#]<br \/>netmask 255.255.255.0<br \/>gateway 192.168.1.1<\/p>\n<p>&#8211; Add user<\/p>\n<p>adduser aschiffler<br \/>usermod -aG sudo aschiffler<\/p>\n<p>&#8211; Initial kernel upgrade:<br \/>apt-get -y update<br \/>apt-get -y upgrade<\/p>\n<p>&#8211; Prep swap<\/p>\n<p># Swap on SD card (file)<br \/>#dd if=\/dev\/zero of=\/swapfile4G bs=4096 count=1024000<br \/>#mkswap \/swapfile4G<br \/>#chmod 0600 \/swapfile4G<br \/>#swapon \/swapfile4G<\/p>\n<p># Swap on USB drive (primary partition, type 82)<br \/>fdisk \/dev\/sda<br \/># optional slow wipe: dd if=\/dev\/zero of=\/dev\/sda1<br \/>mkswap \/dev\/sda1<br \/>swapon \/dev\/sda1 # add to startup \/etc\/rc.local<\/p>\n<p>&#8211; Activate changes<\/p>\n<p>reboot<\/p>\n<p>&#8211; Install default MongoDB (2.4)<\/p>\n<p>apt-get -y install mongodb mongodb-server<\/p>\n<p>&#8211; switch to custom version of MongoDB (3.0, <strong>see below<\/strong> on how to compile the new version)<\/p>\n<p>#\/root\/mongodb\/bin\/mongo<br \/>#\/root\/mongodb\/bin\/mongod<br \/>#\/root\/mongodb\/bin\/mongoperf<br \/>#\/root\/mongodb\/bin\/mongos<br \/># from<br \/>#\/usr\/bin\/mongo<br \/>#\/usr\/bin\/mongod<br \/>#\/usr\/bin\/mongoperf<br \/>#\/usr\/bin\/mongos<\/p>\n<p>\/etc\/init.d\/mongodb stop<\/p>\n<p>cp \/usr\/bin\/mongo \/usr\/bin\/mongo.orig<br \/>cp \/usr\/bin\/mongod \/usr\/bin\/mongod.orig<br \/>cp \/usr\/bin\/mongoperf \/usr\/bin\/mongoperf.orig<br \/>cp \/usr\/bin\/mongos \/usr\/bin\/mongos.orig<\/p>\n<p>mv \/var\/lib\/mongodb \/var\/lib\/mongodb.orig<\/p>\n<p>cp -f \/root\/mongodb\/bin\/mongo \/usr\/bin\/mongo<br \/>cp -f \/root\/mongodb\/bin\/mongod \/usr\/bin\/mongod<br \/>cp -f \/root\/mongodb\/bin\/mongoperf \/usr\/bin\/mongoperf<br \/>cp -f \/root\/mongodb\/bin\/mongos \/usr\/bin\/mongos<\/p>\n<p>mkdir \/var\/lib\/mongodb<br \/>chown mongodb.mongodb \/var\/lib\/mongodb<\/p>\n<p>\/etc\/init.d\/mongodb start<\/p>\n<p>&#8211; Add a user to MonoDB<\/p>\n<p>joe \/etc\/mongodb.conf<br \/>auth = false<\/p>\n<p>\/etc\/init.d\/mongodb restart<\/p>\n<p>mongo<\/p>\n<p># Mongo 2.4 (old, see&nbsp; also <a href=\"https:\/\/docs.mongodb.org\/v2.4\/tutorial\/add-user-to-database\/\">https:\/\/docs.mongodb.org\/v2.4\/tutorial\/add-user-to-database\/<\/a>)<br \/>#use admin<br \/>#db.system.users.remove(<br \/>#&nbsp;&nbsp; { user:&#8221;aschiffler&#8221; }<br \/>#)<br \/>#db.addUser( { user:&#8221;aschiffler&#8221;, pwd:&#8221;***EDITME***&#8221;, roles: [ &#8216;clusterAdmin&#8217;, &#8216;userAdminAnyDatabase&#8217;, &#8216;readAnyDatabase&#8217; ] } )<br \/>#db.system.users.find()<br \/>#exit<\/p>\n<p># Mongo 3.0<br \/>use admin<br \/>db.system.version.remove({ &#8220;_id&#8221; : &#8220;authSchema&#8221; })<br \/>db.system.version.insert({ &#8220;_id&#8221; : &#8220;authSchema&#8221;, &#8220;currentVersion&#8221; : 3 })<br \/>db.system.users.remove({ user:&#8221;aschiffler&#8221; })<br \/>db.createUser( { user:&#8221;aschiffler&#8221;, pwd:&#8221;***EDITME***&#8221;, roles: [ &#8216;clusterAdmin&#8217;, &#8216;userAdminAnyDatabase&#8217;, &#8216;readAnyDatabase&#8217; ] } )<br \/>db.system.users.find()<br \/>exit<\/p>\n<p>joe \/etc\/mongodb.conf<br \/>auth = true<\/p>\n<p>\/etc\/init.d\/mongodb restart<\/p>\n<p>&#8211; Install rockmongo (cluster1)<\/p>\n<p>apt-get install apache2 php5 php-pear<\/p>\n<p>apt-get install php5-mongo<br \/>cd \/var\/www\/html<br \/>tar xvf ~aschiffler\/rockmongo-1.1.7.tar<br \/>ln -s rockmongo-1.1.7 rockmongo<br \/>\/etc\/init.d\/apache2 restart<\/p>\n<p>joe \/var\/www\/html\/rockmongo\/config.php<br \/>$MONGO[&#8220;servers&#8221;][$i][&#8220;mongo_name&#8221;] = &#8220;cluster1&#8221;;\/\/mongo server name<br \/>$MONGO[&#8220;servers&#8221;][$i][&#8220;mongo_host&#8221;] = &#8220;cluster1&#8221;;\/\/mongo host<br \/>$MONGO[&#8220;servers&#8221;][$i][&#8220;mongo_port&#8221;] = &#8220;27017&#8221;;\/\/mongo port<br \/>$MONGO[&#8220;servers&#8221;][$i][&#8220;mongo_timeout&#8221;] = 0;\/\/mongo connection timeout<br \/>$MONGO[&#8220;servers&#8221;][$i][&#8220;mongo_auth&#8221;] = true;<\/p>\n<p>&#8211; configure firewall and bind<\/p>\n<p>joe \/etc\/rc.local<br \/>iptables -A INPUT -s 192.168.1.0\/24 -p tcp &#8211;destination-port 27017 -m state &#8211;state NEW,ESTABLISHED -j ACCEPT<br \/>iptables -A OUTPUT -d 192.168.1.0\/24 -p tcp &#8211;source-port 27017 -m state &#8211;state ESTABLISHED -j ACCEPT<\/p>\n<p>. \/etc\/rc.local<\/p>\n<p>joe \/etc\/mongodb.conf<br \/>bind_ip = 0.0.0.0<\/p>\n<p>\/etc\/init.d\/mongodb restart<\/p>\n<p>&#8211; prepare replication<\/p>\n<p>cp \/etc\/mongodb.conf \/etc\/mongodb.conf.orig<br \/>joe \/etc\/mongodb.conf<\/p>\n<p>systemLog:<br \/>destination: file<br \/>path: &#8220;\/var\/log\/mongodb\/mongodb.log&#8221;<br \/>logAppend: true<br \/>processManagement:<br \/>fork: false<br \/>net:<br \/>bindIp: 0.0.0.0<br \/>port: 27017<br \/>storage:<br \/>dbPath: &#8220;\/var\/lib\/mongodb&#8221;<br \/>journal:<br \/>enabled: false<br \/>engine: &#8220;mmapv1&#8221;<br \/>mmapv1:<br \/>smallFiles: true<br \/>replication:<br \/>replSetName: &#8220;rs1&#8221;<br \/>setParameter:<br \/>enableLocalhostAuthBypass: false<\/p>\n<p>\/etc\/init.d\/mongodb restart<\/p>\n<p>&#8211; enable replication<\/p>\n<p>mongo cluster1\/admin -u aschiffler \u2013p ***EDITME*** &#8211;authenticationMechanism MONGODB-CR<\/p>\n<p>rs.initiate()<br \/>rs.conf()<\/p>\n<p>rs.add(&#8220;cluster2&#8221;)<br \/>rs.add(&#8220;cluster3&#8221;)<br \/>rs.add(&#8220;cluster4&#8221;)<br \/>rs.status()<\/p>\n<h4>MongoDB 3.0 on ARM<\/h4>\n<p>These steps are based on the steps provided on:<br \/><a href=\"http:\/\/andyfelong.com\/2015\/12\/mongodb-3-0-7-on-raspberry-pi-2\/\">http:\/\/andyfelong.com\/2015\/12\/mongodb-3-0-7-on-raspberry-pi-2\/<\/a><\/p>\n<p>&#8211; login as user<\/p>\n<p>sudo bash<\/p>\n<p># &#8212; ensure we have 4G+ swap<\/p>\n<p>apt-get -y install build-essential libssl-dev git scons libboost-filesystem-dev libboost-program-options-dev libboost-system-dev libboost-thread-dev<\/p>\n<p>cd<br \/>mkdir build_mongodb<br \/>cd build_mongodb\/<br \/>git clone git:\/\/github.com\/mongodb\/mongo.git<br \/>cd mongo<br \/>git checkout <strong>r3.0.8<\/strong><\/p>\n<p>&#8211; patch data_view.h<\/p>\n<p>cd ~\/build_mongodb\/mongo<br \/>joe src\/mongo\/base\/data_view.h<\/p>\n<p>and add<br \/>#define MONGO_HAVE_STD_IS_TRIVIALLY_COPYABLE 0<br \/>or<br \/>#undef MONGO_HAVE_STD_IS_TRIVIALLY_COPYABLE<\/p>\n<p>&#8211; patch SConscript<\/p>\n<p>cd ~\/build_mongodb\/mongo\/src\/third_party\/v8-3.25\/<br \/># wget <a href=\"http:\/\/andyfelong.com\/wp-content\/uploads\/2015\/12\/SConscript\">http:\/\/andyfelong.com\/wp-content\/uploads\/2015\/12\/SConscript<\/a><br \/>wget <a href=\"https:\/\/gist.githubusercontent.com\/kitsook\/f0f53bc7acc468b6e94c\/raw\/93ebc8dc0adf7afb0a38c1b6bf702f8a8c6b70c2\/SConscript\">https:\/\/gist.githubusercontent.com\/kitsook\/f0f53bc7acc468b6e94c\/raw\/93ebc8dc0adf7afb0a38c1b6bf702f8a8c6b70c2\/SConscript<\/a><br \/>mv -f SConscript SConscript.old &amp;&amp; mv -f SConscript.1 SConscript<\/p>\n<p>&#8211; patch boost<\/p>\n<p>cd ~\/build_mongodb\/mongo\/src\/third_party\/boost\/boost\/smart_ptr\/detail\/<br \/>wget &#8220;<a href=\"https:\/\/svn.boost.org\/trac\/boost\/changeset\/77315?format=diff&amp;new=77315&quot;\">https:\/\/svn.boost.org\/trac\/boost\/changeset\/77315?format=diff&amp;new=77315&#8243;<\/a> -O patch.diff<br \/>patch &lt;patch.diff<\/p>\n<p>&#8211; update linux_syscall_support<\/p>\n<p>cd ~\/build_mongodb\/mongo\/src\/third_party\/gperftools-2.2\/src<br \/>wget <a href=\"https:\/\/raw.githubusercontent.com\/plexinc\/breakpad-lss\/master\/linux_syscall_support.h\">https:\/\/raw.githubusercontent.com\/plexinc\/breakpad-lss\/master\/linux_syscall_support.h<\/a><br \/>mv -f linux_syscall_support.h linux_syscall_support.h.old &amp;&amp; mv -f linux_syscall_support.h.1 linux_syscall_support.h<\/p>\n<p>&#8211; build (takes hours)<\/p>\n<p>cd ~\/build_mongodb\/mongo<br \/>scons -j 1 &#8211;ssl &#8211;wiredtiger=off &#8211;js-engine=v8-3.25 &#8211;c++11=on &#8211;disable-warnings-as-errors CXXFLAGS=&#8221;-std=gnu++11&#8243; &#8211;allocator=system core<\/p>\n<p>&#8211; install (takes hours)<\/p>\n<p>cd ~\/build_mongodb\/mongo<br \/>scons -j 1 &#8211;ssl &#8211;wiredtiger=off &#8211;js-engine=v8-3.25 &#8211;c++11=on &#8211;disable-warnings-as-errors CXXFLAGS=&#8221;-std=gnu++11&#8243; &#8211;allocator=system &#8211;prefix=\/root\/mongodb install<\/p>\n<p>&#8211; check binaries<\/p>\n<p>cd ~\/mongodb\/bin<br \/>ls -l<\/p>\n<p>&#8211; clean up<\/p>\n<p>rm -rf ~\/build_mongodb<\/p>\n<p>&nbsp;<\/p>\n<h4>Benchmark Results<\/h4>\n<h6>CPU<\/h6>\n<p>sysbench &#8211;test=cpu &#8211;cpu-max-prime=20000 run<\/p>\n<p>Maximum prime number checked in CPU test: 20000<br \/>Test execution summary:<br \/>total time:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 764.2113s<br \/>total number of events:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 10000<br \/>total time taken by event execution: 764.1989<br \/>per-request statistics:<br \/>min:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 76.34ms<br \/>avg:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 76.42ms<br \/>max:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 141.03ms<br \/>approx.&nbsp; 95 percentile:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 76.64ms<br \/>Threads fairness:<br \/>events (avg\/stddev):&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 10000.0000\/0.00<br \/>execution time (avg\/stddev):&nbsp;&nbsp; 764.1989\/0.00<\/p>\n<p>&nbsp;<\/p>\n<h6>SD<\/h6>\n<p># <strong>Random<\/strong> read write &#8212; 514.5MB in 300sec = <strong>1.7 MB\/sec<\/strong><\/p>\n<p>sysbench &#8211;test=fileio &#8211;file-total-size=4G prepare<br \/>sysbench &#8211;test=fileio &#8211;file-total-size=4G &#8211;file-test-mode=rndrw &#8211;init-rng=on &#8211;max-time=300 &#8211;max-requests=0 run<br \/>sysbench &#8211;test=fileio &#8211;file-total-size=4G cleanup<\/p>\n<p>Operations performed:&nbsp; 19757 Read, 13171 Write, 42112 Other = 75040 Total<br \/>Read 308.7Mb&nbsp; Written 205.8Mb&nbsp; Total transferred 514.5Mb&nbsp; (1.715Mb\/sec) 109.76 Requests\/sec executed<br \/>Test execution summary:<br \/>total time:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 300.0024s<br \/>total number of events:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 32928<br \/>total time taken by event execution: 27.9480<br \/>per-request statistics:<br \/>min:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0.05ms<br \/>avg:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0.85ms<br \/>max:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 423.34ms<br \/>approx.&nbsp; 95 percentile:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1.57ms<br \/>Threads fairness:<br \/>events (avg\/stddev):&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 32928.0000\/0.00<br \/>execution time (avg\/stddev):&nbsp;&nbsp; 27.9480\/0.00<\/p>\n<p># 512MB <strong>block<\/strong> write &#8212; 512MB in 0:28min = <strong>18.3 MB\/sec<\/strong><br \/>cd \/<br \/>time sh -c &#8220;dd if=\/dev\/zero of=ddfile bs=8k count=65536 &amp;&amp; sync&#8221;; rm ddfile<\/p>\n<p># 64MB <strong>block read<\/strong> &#8212; 66 MB in&nbsp; 3.09 seconds =&nbsp; <strong>21.35 MB\/sec<br \/><\/strong>hdparm -t \/dev\/mmcblk0p1<\/p>\n<p>&nbsp;<\/p>\n<h6>USB<\/h6>\n<p># 512MB <strong>block write<\/strong> &#8212; 512MB in 1:54min = <strong>4.5 MB\/sec<br \/><\/strong>mke2fs \/dev\/sda1<br \/>mkdir \/x<br \/>mount \/dev\/sda1 \/x<br \/>cd \/x<br \/>time sh -c &#8220;dd if=\/dev\/zero of=ddfile bs=8k count=65536 &amp;&amp; sync&#8221;; rm ddfile<br \/>cd \/<br \/>umount \/x<\/p>\n<p># 64MB <strong>block read<\/strong> &#8212; 64 MB in&nbsp; 3.09 seconds =&nbsp; <strong>20.73 MB\/sec<\/strong><br \/>hdparm -t \/dev\/sda1<\/p>\n<p>&nbsp;<\/p>\n<h6>SSD<\/h6>\n<p># 512MB <strong>block write<\/strong> &#8212; 512MB in 14.38s = <strong>35.6 MB\/s<\/strong><br \/>mke2fs -t ext4 \/dev\/sdb1<br \/>mkdir \/x<br \/>mount \/dev\/sdb1 \/x<br \/>cd \/x<br \/>time sh -c &#8220;dd if=\/dev\/zero of=ddfile bs=8k count=65536 &amp;&amp; sync&#8221;; rm ddfile<br \/>cd \/<br \/>umount \/x<\/p>\n<p># 440MB <strong>block read<\/strong> &#8212; 440 MB in&nbsp; 3.00 seconds = <strong>146.55 MB\/sec<\/strong><br \/>hdparm -t \/dev\/sdb1<\/p>\n","protected":false},"excerpt":{"rendered":"<p>This years X-mas project was to build a little ARM based cluster of pcdunio (Raspberry Pie 2+ like) boards running a MongoDB 3.0 NoSQL database for under $200.<\/p>\n","protected":false},"author":1,"featured_media":212,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"ngg_post_thumbnail":0,"footnotes":""},"categories":[71],"tags":[75,72,73,74],"class_list":["post-210","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-hardware","tag-armbian","tag-mongodb","tag-pdcunio","tag-rp2"],"_links":{"self":[{"href":"https:\/\/www.ferzkopp.net\/wordpress\/wp-json\/wp\/v2\/posts\/210","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.ferzkopp.net\/wordpress\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.ferzkopp.net\/wordpress\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.ferzkopp.net\/wordpress\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.ferzkopp.net\/wordpress\/wp-json\/wp\/v2\/comments?post=210"}],"version-history":[{"count":7,"href":"https:\/\/www.ferzkopp.net\/wordpress\/wp-json\/wp\/v2\/posts\/210\/revisions"}],"predecessor-version":[{"id":266,"href":"https:\/\/www.ferzkopp.net\/wordpress\/wp-json\/wp\/v2\/posts\/210\/revisions\/266"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.ferzkopp.net\/wordpress\/wp-json\/wp\/v2\/media\/212"}],"wp:attachment":[{"href":"https:\/\/www.ferzkopp.net\/wordpress\/wp-json\/wp\/v2\/media?parent=210"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.ferzkopp.net\/wordpress\/wp-json\/wp\/v2\/categories?post=210"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.ferzkopp.net\/wordpress\/wp-json\/wp\/v2\/tags?post=210"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}