Project Home
Project Home
Wiki
Wiki
Discussion Forums
Discussions
Project Information
Project Info
Forum Topic - QNX 6.5.0 Fast Retransmission: (4 Items)
   
QNX 6.5.0 Fast Retransmission  
We are using QNX 6.5.0 base install (not SR1).  We can configure our products in a leader/follower (master/slave has 
been declared politically incorrect) setup where multiple units are interconnected and communicate to each other via TCP
.  We normally experience an acceptable up to 300 ms command/response times with this setup.  However, we occasionally 
lose a packet from one of the followers.  When this happens, there is a 1.5 second or longer delay before TCP 
retransmits.  I have confirmed the packet loss by simultaneously monitoring the internal traffic using tcpdump and the 
output traffic with Wireshark.  The actual packet loss seems to be an incompatibility between the card we are using and 
our internal switch.  I am working with our vendor to find a solution.

I have a question about io-pkt-v4, which we are using.  RFC2581, TCP Congestion Control, Secion 3.2 describes TCP Fast 
Retransmissions, which should alleviate this problem.  I'm guessing that io-pkt-v4 does not support this RFC.  We have 
avoided upgrading to SR1 due to the amount of regression testing of our product with such a change.  Is RFC2581 
supported in later releases of io-pkt-v4?
Re: QNX 6.5.0 Fast Retransmission  
I ran sysclt -a on the troubled unit and here are the results.  Of particular note are "net.inet.tcp.sack.enable = 1" 
and "net.inet.tcp.congctl.selected = newreno".  If my reading is correct, Fast Retransmission is enabled and the packet 
loss should be detected.

kern.ostype = QNX
kern.osrelease = 6.5.0
kern.version = 2010/07/09-14:44:03EDT
kern.hostname = localhost
kern.clockrate: tick = 8403, hz = 119
kern.mbuf.msize = 256
kern.mbuf.mclbytes = 2048
kern.mbuf.nmbclusters = 8192
kern.mbuf.mblowat = 16
kern.mbuf.mcllowat = 8
kern.sbmax = 262144
net.inet.ip.forwarding = 0
net.inet.ip.redirect = 1
net.inet.ip.ttl = 64
net.inet.ip.forwsrcrt = 1
net.inet.ip.directed-broadcast = 0
net.inet.ip.allowsrcrt = 1
net.inet.ip.subnetsarelocal = 1
net.inet.ip.mtudisc = 1
net.inet.ip.anonportmin = 49152
net.inet.ip.anonportmax = 65535
net.inet.ip.mtudisctimeout = 600
net.inet.ip.maxflows = 256
net.inet.ip.hostzerobroadcast = 1
net.inet.ip.lowportmin = 600
net.inet.ip.lowportmax = 1023
net.inet.ip.maxfragpackets = 200
net.inet.ip.grettl = 0
net.inet.ip.checkinterface = 0
net.inet.ip.ifq.len = 0
net.inet.ip.ifq.maxlen = 256
net.inet.ip.ifq.drops = 0
net.inet.ip.random_id = 0
net.inet.ip.do_loopback_cksum = 0
net.inet.icmp.maskrepl = 0
net.inet.icmp.returndatabytes = 8
net.inet.icmp.errppslimit = 100
net.inet.icmp.rediraccept = 1
net.inet.icmp.redirtimeout = 600
net.inet.icmp.tstamprepl = 1
net.inet.tcp.rfc1323 = 1
net.inet.tcp.sendspace = 22528
net.inet.tcp.recvspace = 32768
net.inet.tcp.mssdflt = 536
net.inet.tcp.syn_cache_limit = 10255
net.inet.tcp.syn_bucket_limit = 105
net.inet.tcp.init_win = 0
net.inet.tcp.mss_ifmtu = 0
net.inet.tcp.sack.enable = 1
net.inet.tcp.sack.maxholes = 32
net.inet.tcp.sack.globalmaxholes = 1024
net.inet.tcp.sack.globalholes = 0
net.inet.tcp.win_scale = 1
net.inet.tcp.timestamps = 1
net.inet.tcp.compat_42 = 0
net.inet.tcp.cwm = 0
net.inet.tcp.cwm_burstsize = 4
net.inet.tcp.ack_on_push = 0
net.inet.tcp.keepidle = 14400
net.inet.tcp.keepintvl = 1
net.inet.tcp.keepcnt = 20
net.inet.tcp.slowhz = 2
net.inet.tcp.log_refused = 0
net.inet.tcp.init_win_local = 4
net.inet.tcp.rstppslimit = 100
net.inet.tcp.delack_ticks = 23
net.inet.tcp.hiwat_adjust = 1
net.inet.tcp.do_loopback_cksum = 0
net.inet.tcp.congctl.available = reno newreno
net.inet.tcp.congctl.selected = newreno
net.inet.tcp.ecn.enable = 0
net.inet.tcp.ecn.maxretries = 1
net.inet.tcp.iss_hash = 0
net.inet.tcp.abc.enable = 1
net.inet.tcp.abc.aggressive = 1
net.inet.udp.checksum = 1
net.inet.udp.sendspace = 9216
net.inet.udp.recvspace = 41600
net.inet.udp.do_loopback_cksum = 0
net.inet.arp.prune = 300
net.inet.arp.keep = 1118
net.inet.arp.down = 20
net.inet.arp.refresh = 300
net.bpf.maxbufsize = 1048576
hw.machine = x86pc
hw.machine_arch = x86
hw.alignbytes = 3
qnx.kern.enmap = 1
qnx.net.inet.tcp.hiwat_adjust = 1
Re: QNX 6.5.0 Fast Retransmission  
Fast retransmission is supported. It is triggered by a 3 duplicate ACKs being received. If your application isn't 
sending enough data that there are 3 more segments in flight after the lost segment to trigger the 3 duplicate ACKs then
 that would be why you are not seeing the fast retransmission.

Do you have a wireshark trace showing the 3 duplicate ACKs?
Re: QNX 6.5.0 Fast Retransmission  
I don't know if my previous attempt succeeded because the files were large.  Here are smaller traces.

File "events_delayed_start_01-23_1_rec_3043.pcapng" Wireshart trace.  Filter on ip.addr==172.23.165.253.  Record 3043 is
 where the problem starts.

FIle "events_delayed_start_01-23_1_sp4_rec_520.pcap" is the tcpdump from 172.23.165.253.  Record 520 is the packet that 
was lost.
Attachment: Text events_delayed_start_01-23_1_sp4_rec_520.pcap 62.36 KB Text events_delayed_start_01-23_1_rec_3043.pcapng 864.04 KB