usrp-users@lists.ettus.com

Discussion and technical support related to USRP, UHD, RFNoC

View all threads

Incorrect disk throughput measurement in rx_samples_to_file

EG
Eugene Grayver
Tue, Jan 14, 2025 4:40 PM

Hi,

The rx_samples_to_file example uses 'dd' to estimate disk throughput. It is not done correctly.  The code below uses /dev/random as the data source.  This was OK for old SATA drives, but for fast NMVE drives the rate is limited by the random number generator (which maxes out at around 1 GB/s on a modern machine).  Therefore the example incorrectly reports that the disk throughput is too low if the expected write rate is > 1 GB/s (well within modern drives).  I suggest replacing /dev/random with /dev/zero.

std::string disk_check_proc_str =
"dd if=/dev/random of=" + temp_file.native()
+ " bs=" + std::to_string(samps_per_buff * channel_count * sample_type_size)
+ " count=100";

Hi, The rx_samples_to_file example uses 'dd' to estimate disk throughput. It is not done correctly. The code below uses /dev/random as the data source. This was OK for old SATA drives, but for fast NMVE drives the rate is limited by the random number generator (which maxes out at around 1 GB/s on a modern machine). Therefore the example incorrectly reports that the disk throughput is too low if the expected write rate is > 1 GB/s (well within modern drives). I suggest replacing /dev/random with /dev/zero. std::string disk_check_proc_str = "dd if=/dev/random of=" + temp_file.native() + " bs=" + std::to_string(samps_per_buff * channel_count * sample_type_size) + " count=100";
MD
Marcus D. Leech
Tue, Jan 14, 2025 4:44 PM

On 14/01/2025 11:40, Eugene Grayver wrote:

Hi,

The rx_samples_to_file example uses 'dd' to estimate disk throughput.
It is not done correctly.  The code below uses /dev/random as the data
source.  This was OK for old SATA drives, but for fast NMVE drives the
rate is limited by the random number generator (which maxes out at
around 1 GB/s on a modern machine).  Therefore the example incorrectly
reports that the disk throughput is too low if the expected write rate
is > 1 GB/s (well within modern drives).  I suggest replacing
/dev/random with /dev/zero.

|std::string disk_check_proc_str =|
|"dd if=/dev/random of="||+ temp_file.||native||()|
|+ " bs="||+ std::to_string(samps_per_buff * channel_count *
sample_type_size)|
|+ " count=100";|


USRP-users mailing list --usrp-users@lists.ettus.com
To unsubscribe send an email tousrp-users-leave@lists.ettus.com

Good catch!   I've run into this problem in another context.

On 14/01/2025 11:40, Eugene Grayver wrote: > Hi, > > The rx_samples_to_file example uses 'dd' to estimate disk throughput. > It is not done correctly.  The code below uses /dev/random as the data > source.  This was OK for old SATA drives, but for fast NMVE drives the > rate is limited by the random number generator (which maxes out at > around 1 GB/s on a modern machine).  Therefore the example incorrectly > reports that the disk throughput is too low if the expected write rate > is > 1 GB/s (well within modern drives).  I suggest replacing > /dev/random with /dev/zero. > > |std::string disk_check_proc_str =| > |"dd if=/dev/random of="||+ temp_file.|*|native|*|()| > |+ " bs="||+ std::to_string(samps_per_buff * channel_count * > sample_type_size)| > |+ " count=100";| > > > > _______________________________________________ > USRP-users mailing list --usrp-users@lists.ettus.com > To unsubscribe send an email tousrp-users-leave@lists.ettus.com Good catch!   I've run into this problem in another context.