<html xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns:m="http://schemas.microsoft.com/office/2004/12/omml" xmlns="http://www.w3.org/TR/REC-html40">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=us-ascii">
<meta name="Generator" content="Microsoft Word 15 (filtered medium)">
<style><!--
/* Font Definitions */
@font-face
{font-family:"Cambria Math";
panose-1:2 4 5 3 5 4 6 3 2 4;}
@font-face
{font-family:Calibri;
panose-1:2 15 5 2 2 2 4 3 2 4;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
{margin:0in;
margin-bottom:.0001pt;
font-size:11.0pt;
font-family:"Calibri",sans-serif;}
a:link, span.MsoHyperlink
{mso-style-priority:99;
color:#0563C1;
text-decoration:underline;}
a:visited, span.MsoHyperlinkFollowed
{mso-style-priority:99;
color:#954F72;
text-decoration:underline;}
p.MsoListParagraph, li.MsoListParagraph, div.MsoListParagraph
{mso-style-priority:34;
margin-top:0in;
margin-right:0in;
margin-bottom:0in;
margin-left:.5in;
margin-bottom:.0001pt;
font-size:11.0pt;
font-family:"Calibri",sans-serif;}
span.EmailStyle17
{mso-style-type:personal-compose;
font-family:"Calibri",sans-serif;
color:windowtext;}
.MsoChpDefault
{mso-style-type:export-only;
font-family:"Calibri",sans-serif;}
@page WordSection1
{size:8.5in 11.0in;
margin:1.0in 1.0in 1.0in 1.0in;}
div.WordSection1
{page:WordSection1;}
/* List Definitions */
@list l0
{mso-list-id:207884671;
mso-list-type:hybrid;
mso-list-template-ids:163765398 67698703 67698713 67698715 67698703 67698713 67698715 67698703 67698713 67698715;}
@list l0:level1
{mso-level-tab-stop:none;
mso-level-number-position:left;
text-indent:-.25in;}
@list l0:level2
{mso-level-number-format:alpha-lower;
mso-level-tab-stop:none;
mso-level-number-position:left;
text-indent:-.25in;}
@list l0:level3
{mso-level-number-format:roman-lower;
mso-level-tab-stop:none;
mso-level-number-position:right;
text-indent:-9.0pt;}
@list l0:level4
{mso-level-tab-stop:none;
mso-level-number-position:left;
text-indent:-.25in;}
@list l0:level5
{mso-level-number-format:alpha-lower;
mso-level-tab-stop:none;
mso-level-number-position:left;
text-indent:-.25in;}
@list l0:level6
{mso-level-number-format:roman-lower;
mso-level-tab-stop:none;
mso-level-number-position:right;
text-indent:-9.0pt;}
@list l0:level7
{mso-level-tab-stop:none;
mso-level-number-position:left;
text-indent:-.25in;}
@list l0:level8
{mso-level-number-format:alpha-lower;
mso-level-tab-stop:none;
mso-level-number-position:left;
text-indent:-.25in;}
@list l0:level9
{mso-level-number-format:roman-lower;
mso-level-tab-stop:none;
mso-level-number-position:right;
text-indent:-9.0pt;}
@list l1
{mso-list-id:1452895582;
mso-list-type:hybrid;
mso-list-template-ids:1078873462 67698703 67698713 67698715 67698703 67698713 67698715 67698703 67698713 67698715;}
@list l1:level1
{mso-level-tab-stop:none;
mso-level-number-position:left;
text-indent:-.25in;}
@list l1:level2
{mso-level-number-format:alpha-lower;
mso-level-tab-stop:none;
mso-level-number-position:left;
text-indent:-.25in;}
@list l1:level3
{mso-level-number-format:roman-lower;
mso-level-tab-stop:none;
mso-level-number-position:right;
text-indent:-9.0pt;}
@list l1:level4
{mso-level-tab-stop:none;
mso-level-number-position:left;
text-indent:-.25in;}
@list l1:level5
{mso-level-number-format:alpha-lower;
mso-level-tab-stop:none;
mso-level-number-position:left;
text-indent:-.25in;}
@list l1:level6
{mso-level-number-format:roman-lower;
mso-level-tab-stop:none;
mso-level-number-position:right;
text-indent:-9.0pt;}
@list l1:level7
{mso-level-tab-stop:none;
mso-level-number-position:left;
text-indent:-.25in;}
@list l1:level8
{mso-level-number-format:alpha-lower;
mso-level-tab-stop:none;
mso-level-number-position:left;
text-indent:-.25in;}
@list l1:level9
{mso-level-number-format:roman-lower;
mso-level-tab-stop:none;
mso-level-number-position:right;
text-indent:-9.0pt;}
ol
{margin-bottom:0in;}
ul
{margin-bottom:0in;}
--></style><!--[if gte mso 9]><xml>
<o:shapedefaults v:ext="edit" spidmax="1026" />
</xml><![endif]--><!--[if gte mso 9]><xml>
<o:shapelayout v:ext="edit">
<o:idmap v:ext="edit" data="1" />
</o:shapelayout></xml><![endif]-->
</head>
<body lang="EN-US" link="#0563C1" vlink="#954F72">
<div class="WordSection1">
<p class="MsoNormal">I received an Odroid N2 4GB model, shipped direct to me from Korea for $94 (including shipping). I installed the following:<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<ol style="margin-top:0in" start="1" type="1">
<li class="MsoListParagraph" style="margin-left:0in;mso-list:l1 level1 lfo1">Image of Odroid Ubuntu from
<a href="https://wiki.odroid.com/odroid-n2/os_images/ubuntu">https://wiki.odroid.com/odroid-n2/os_images/ubuntu</a><o:p></o:p></li><li class="MsoListParagraph" style="margin-left:0in;mso-list:l1 level1 lfo1">HDF5 development package: libhdf5- serial dev<o:p></o:p></li><li class="MsoListParagraph" style="margin-left:0in;mso-list:l1 level1 lfo1">Digital RF from github<o:p></o:p></li><li class="MsoListParagraph" style="margin-left:0in;mso-list:l1 level1 lfo1">A few other packages necessary to run the above<o:p></o:p></li></ol>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">BENCHMARKS<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">Digital rf comes with some examples; the interesting one for this is the c benchmark, which writes out about 1500 M of data using raw binary (to check write speed independent of Digital rf); then writes data using Digital RF simple, with
checksum, and finally with compression. I tried writing to a Western Digital Elements spinning hard drive, and also writing to a ramdisk (the 4 GB Odroid has enough RAM than you can create a 2 GB ram disk and still have RAM left).<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">Values below are all in MB/sec. I tried 3 runs; each gave different results, so the values are the average of the 3 runs.<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal"><span style="font-size:10.0pt;font-family:"Courier New""> Raw binary write Digital RF simple Digital RF with checksum Digital RF with checksum/compression<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:10.0pt;font-family:"Courier New"">Western Digital HDD 198.53 187.03 116.63 11.14<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:10.0pt;font-family:"Courier New"">Ramdisk 1320.95 1020.58 270.72 11.76<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:10.0pt;font-family:"Courier New""><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="font-size:10.0pt;font-family:"Courier New""><o:p> </o:p></span></p>
<p class="MsoNormal">TESTING WITH RED PITAYA<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">I compiled the John Melton (not to be confused with the 17<sup>th</sup> century poet
<a href="https://en.wikipedia.org/wiki/John_Milton">John Milton</a>) program pihpsdr which works nicely with the Red Pitaya when it is in HPSDR emulation mode. The Red Pitaya runs at 48 ksps, one channel of I & Q, so I duplicate the I & Q data across 16 subchannels
(8 channels each with 2 antennas), and write it out 4 times (4 X 48 = 197) to simulate the planned speed of Tangerine, writing out Digital RF.
<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">The Odroid N2 provides much better results than the Odroid XU4. It is no problem to achieve this data rate writing to ramdisk. Writing to the Western Digital Elements HDD occasionally does miss 6 to 10 buffers, so it appears that the
HDD writing speed is slightly lower than needed for error-free operation. I have discussed this with the MIT Digital RF team; the software does not do internal threading (which makes sense because formatting and storing this data is a serial operation). My
previous tests with forking off threads for the writes led to crashes due to Digital RF trying to access the same memory in multiple threads (I interpret this to mean the Digital RF is not designed as a thread-safe system). However, there are a couple of
ways to deal with this:<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<ol style="margin-top:0in" start="1" type="1">
<li class="MsoListParagraph" style="margin-left:0in;mso-list:l0 level1 lfo2">Use a solid state drive. While technically possible, I have found that SDD in the size we need (~ 4 TB) is very expensive (>$800).<o:p></o:p></li><li class="MsoListParagraph" style="margin-left:0in;mso-list:l0 level1 lfo2">Set up 2 HDDs and write 4 channels to each. A pair of 2 TB spinning HDs can be had for less than $150. This might be a very practical solution, which I plan to test. Since the N2
has 4 USB-3 ports, you can put 2 HDDs on and still have mouse & keyboard connected.<o:p></o:p></li></ol>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">Another open question is: how will a cheap spinning HD do, after running it in ~ 100% duty cycle for a while? Probably not well; but remember that SSDs are not able to handle an infinite number of read/write cycles either; they also have
a lifetime.<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">-73- AB4EJ<o:p></o:p></p>
<p class="MsoNormal">W. D. Engelke (Bill), Asst. Research Engr.<o:p></o:p></p>
<p class="MsoNormal">Center for Advanced Public Safety<o:p></o:p></p>
<p class="MsoNormal">Cyber Hall<o:p></o:p></p>
<p class="MsoNormal">The University of Alabama<o:p></o:p></p>
<p class="MsoNormal">Tuscaloosa, AL 35487<o:p></o:p></p>
<p class="MsoNormal">Desk: (205) 348-7244<o:p></o:p></p>
<p class="MsoNormal">Mobile: (205) 764-3099<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
</body>
</html>