Apalis T30 Ethernet and Sata Packet Transfer

Hello,

I selected the Apalis-T30 module to build a server for a specific application. The module will be connected via a ethernet cable (cat 5e or cat6) and will listen for packets incoming to the socket. The main job is to receive data that is incoming at a rate of 60 MB/s. The application must receive the data and save it to an onboard SSD. I can provide the data sheet for the ssd if needed, but the drive supports SATA Revision 3.1. I setup the SSD as an ext3 filesystem. The software application (in C) is setting up a UDP socket to receive the data and and then write to the drive. Although UDP is unreliable it was chosen due to being able to handle high transfer speed. The software starts a clock to measure the write speed to the SSD. The results average between 3~4 MB/s. For the client I am using a python script that basically reads a file (100MB) and sends it to the server.

I attempted to run hdparm to benchmark the read speed of the SSD and this is what I get:

root@apalis-t30:~# hdparm -t /dev/sda

/dev/sda:
 Timing buffered disk reads: 150 MB in  3.00 seconds =  49.94 MB/sec

This really concerns me as I am thinking that the read should be much faster than the write speed. I understand that there are other factors in play such as the network and the speed limitation is controlled by whatever is slowest. However I would like to begin ruling out possible issues beginning with the module capabilities. Is there anyway we can test the theoretical speed values of the Apalis T30?

The main goal is to achieve the 60 MB/s write speed coming into the module via ethernet and then write to the SSD drive. Can the T30 handle this? Thanks in advance for your help.

alt text

I used the gui benchmarking tool to test the ssd we have and this was the result. Does not look like the Sata is the problem.

How did you make this test? Which Hardware (Host/module) and Software (Operating System) did you use?

This was done on the toradex module testing the ssd on /dev/sda. I just used the GUI that comes with the linux os on the toradex board.

@jaski.tx I noted that the I only have one CPU core enabled. Could this be a cause for the issue?

But what exact software versions of things are you talking about? Did you forcefully disable cores or how exactly do you determine only one being enabled?

I check which cores are online by following the instructions here: https://developer.toradex.com/knowledge-base/cpu-hot-plugging-(linux)

That is normal on Tegras. They are turning off Cpus that are not needed in order to save energy. If you stress the cpu for example with stress -c 4 all cpus will be activated.

Be careful what the options on hdparm mean, exerpt from man hdparm:


-T
Perform timings of cache reads for benchmark and comparison purposes. For meaningful results, this operation should be repeated 2-3 times on an otherwise inactive system (no other active processes) with at least a couple of megabytes of free memory. This displays the speed of reading directly from the Linux buffer cache without disk access. This measurement is essentially an indication of the throughput of the processor, cache, and memory of the system under test.

-t
Perform timings of device reads for benchmark and comparison purposes. For meaningful results, this operation should be repeated 2-3 times on an otherwise inactive system (no other active processes) with at least a couple of megabytes of free memory. This displays the speed of reading through the buffer cache to the disk without any prior caching of data. This measurement is an indication of how fast the drive can sustain sequential data reads under Linux, without any filesystem overhead. To ensure accurate measurements, the buffer cache is flushed during the processing of -t using the BLKFLSBUF ioctl.


try once: hdparm -tT /dev/sda

I think you are not going to have sequential data reads. So you could also benchmark the device with other tools like “bonnie++” for example, or with dd:

time sh -c ‘dd if=/dev/zero of=/media/sda/testfile bs=4M count=100 && sync’