UDP data rate slow with 1GBE ethernet connection
Show older comments
hi folks,
i have a two work station that are connects via 1GBE ethernet.
when transfering data at this setup i've encountered that the data rate is ~20MBs which is mach lower then the expected data rate of a 1GBe comminication. i've used udp object and udpport object that ended up with the same results in MATLAB. Code below>>
ferther investing this ive found out that an off the shelf Cpp code gets 800MBs data rate.
- is there a way to enhance or controll the data rate from within MATLAB?
- if not how can i work with higher data rates inder my setup, use external C\Java code?
--------------------------------------- Code ---------------------------------------
% TASK send data from port A to Port B
% UDP test for the same computer nIP = 1
% UDP test for the two computers nIP = 2
clc, clear all, close all
n_packets = 200;
packet_size = 4096;
BufferSize = packet_size * 2;
nIP = 1;
%
ipA = '192.168.1.100'; portA = 9092;
if nIP == 1
ipB = '192.168.1.100'; portB = 9093;
else
ipB = '192.168.1.101'; portB = 9093;
end
u=udp(ipB,'RemotePort',portB,'Localport',portA);
set(u, 'InputBufferSize', BufferSize);
set(u, 'OutputBufferSize', BufferSize);
set(u,'DatagramTerminateMode','off')
set(u,'Timeout',0.01);
a = zeros(packet_size,1,'int16');
b = zeros(packet_size,1,'int16');
a = ones(packet_size,1,'int16');
i = 1;
miss_count = 0;
fopen(u);
tic
% Loop over write
while 1 %i<n_packets
a(1) = mod(i,32767);
fwrite(u,a,'int16');
i = i + 1;
end
t_proc = toc;
echoudp('off');
fclose(u);
delete(u);
data_rate = ((n_packets * packet_size * 16)/1e6)/t_proc;
fprintf('\n n_miss_packet = %g',miss_count);
fprintf('\n tudp_trx_sec = %g',t_proc);
fprintf('\n udp_rate_Mbit/s = %g',data_rate);
% TASK get data from port A to Port B
% TASK send data from port A to Port B
% UDP test for the same computer nIP = 1
% UDP test for the two computers nIP = 2
clc, clear, close all
n_packets = 200;
packet_size = 4096; % 16 bits
BufferSize = packet_size * 2;
nIP = 1;
%Shimmi
ii_max = 15;
t_proc_sum = zeros(size(1:ii_max));
miss_count_sum = zeros(size(1:ii_max));
date_rate_sum = zeros(size(1:ii_max));
ipA = '10.1.21.81'; portA = 9092;
if nIP == 1
ipB = '192.168.1.100'; portB = 9093;
else
ipB = '192.168.1.100'; portB = 9093;
end
for ii=1:ii_max
u=udp(ipA,'RemotePort',portA,'Localport',portB);
set(u, 'InputBufferSize', BufferSize);
set(u, 'OutputBufferSize', BufferSize);
a = zeros(packet_size,1,'int16');
b = zeros(packet_size,1,'int16');
a = ones(packet_size,1,'int16');
set(u,'DatagramTerminateMode','off')
set(u,'Timeout',0.01);
i = 1;
iprev = 1;
miss_count = 0;
% Open UDP
fopen(u);
tic
% Loop over read
while i<n_packets
b=fread(u,packet_size,'int16');
icurr = b(1);
if (iprev ~= icurr)
miss_count = miss_count + 1;
end
iprev = icurr + 1;
i = i + 1;
end
t_proc = toc;
echoudp('off');
fclose(u);
delete(u);
data_rate = ((n_packets * packet_size * 16)/t_proc)/1e6;
%
% fprintf('\n n_miss_packet = %g',miss_count);
% fprintf('\n tudp_rx_sec = %g',t_proc);
% fprintf('\n udp_rate_Mbit/s = %g',data_rate);
%analytics
miss_count_sum(ii) = miss_count;
t_proc_sum (ii) =t_proc;
date_rate_sum (ii) = data_rate;
ii = ii+1;
end
fprintf('\n n_miss_packet = %f',mean(miss_count_sum));
fprintf('\n tudp_rx_sec = %f',mean(t_proc_sum));
fprintf('\n udp_rate_Mbit/s = %f',mean(date_rate_sum));
fprintf('\n ');
Answers (1)
Vinayak
on 17 Jan 2024
0 votes
Hi Shimon,
The issues with UDP performance that you've outlined could stem from various factors. To address this, I recommend the following actions:
- Confirm that the network infrastructure can accommodate the required transfer speeds.
- Optimize the Buffer Size and Packet Sizes; experimenting with different combinations of values can help find the optimal balance, minimizing overhead and fragmentation.
- Explore the potential of parallel processing capabilities, if applicable to your specific problem.
- Consider utilizing external language interfaces such as C or Python.
For further information on “udpport”, and the Parallel Computing Toolbox, please refer to the following links:
- UDP Port: https://www.mathworks.com/help/instrument/udpport.html
- External Interfaces: https://www.mathworks.com/help/matlab/external-language-interfaces.html
- Parallel Computing Toolbox: https://www.mathworks.com/help/parallel-computing/index.html
Hope this helps!
Categories
Find more on Instrument Control Toolbox in Help Center and File Exchange
Products
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!