Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Enabling EDI PFT creates very high UDP packet rate #46

Closed
nickpiggott opened this issue Jul 9, 2020 · 1 comment
Closed

Enabling EDI PFT creates very high UDP packet rate #46

nickpiggott opened this issue Jul 9, 2020 · 1 comment

Comments

@nickpiggott
Copy link
Contributor

Enabling EDI output over UDP unicast.

  • With PFT disabled, I see one UDP packet transmitted every 24ms, apparently of 3 196 bytes in length
sudo tcpdump -i any -n host 127.0.0.1 and port 9023
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on any, link-type LINUX_SLL (Linux cooked), capture size 262144 bytes
11:58:51.061054 IP 127.0.0.1.9023 > 127.0.0.1.9025: UDP, length 3196
11:58:51.085071 IP 127.0.0.1.9023 > 127.0.0.1.9025: UDP, length 3196
11:58:51.109070 IP 127.0.0.1.9023 > 127.0.0.1.9025: UDP, length 3196
  • With PFT enabled (but FEC = 0 and no interleaving), I see three UDP packets transmitted about every 24ms, of 1 084, 1 084, 1 082 bytes in length (total 3 250 bytes)
sudo tcpdump -i any -n host 127.0.0.1 and port 9023
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode 
listening on any, link-type LINUX_SLL (Linux cooked), capture size 262144 bytes
12:06:52.831394 IP 127.0.0.1.9023 > 127.0.0.1.9025: UDP, length 1084 
12:06:52.831421 IP 127.0.0.1.9023 > 127.0.0.1.9025: UDP, length 1082 
12:06:52.855366 IP 127.0.0.1.9023 > 127.0.0.1.9025: UDP, length 1084 
12:06:52.855402 IP 127.0.0.1.9023 > 127.0.0.1.9025: UDP, length 1084 
12:06:52.855425 IP 127.0.0.1.9023 > 127.0.0.1.9025: UDP, length 1082 
12:06:52.879281 IP 127.0.0.1.9023 > 127.0.0.1.9025: UDP, length 1084 
  • Enabling FEC and interleaving decreases the packet size and increases the packet rate again. 15 packets every 24ms, each of 268 bytes in length (total 4 020 bytes)
sudo tcpdump -i any -n host 127.0.0.1 and port 9023 | more 
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode 
listening on any, link-type LINUX_SLL (Linux cooked), capture size 262144 bytes
12:09:16.171119 IP 127.0.0.1.9023 > 127.0.0.1.9025: UDP, length 268
12:09:16.194488 IP 127.0.0.1.9023 > 127.0.0.1.9025: UDP, length 268
12:09:16.194510 IP 127.0.0.1.9023 > 127.0.0.1.9025: UDP, length 268
12:09:16.194523 IP 127.0.0.1.9023 > 127.0.0.1.9025: UDP, length 268
12:09:16.194535 IP 127.0.0.1.9023 > 127.0.0.1.9025: UDP, length 268
12:09:16.194546 IP 127.0.0.1.9023 > 127.0.0.1.9025: UDP, length 268
12:09:16.194557 IP 127.0.0.1.9023 > 127.0.0.1.9025: UDP, length 268
12:09:16.194572 IP 127.0.0.1.9023 > 127.0.0.1.9025: UDP, length 268
12:09:16.194583 IP 127.0.0.1.9023 > 127.0.0.1.9025: UDP, length 268
12:09:16.194594 IP 127.0.0.1.9023 > 127.0.0.1.9025: UDP, length 268
12:09:16.194605 IP 127.0.0.1.9023 > 127.0.0.1.9025: UDP, length 268
12:09:16.194615 IP 127.0.0.1.9023 > 127.0.0.1.9025: UDP, length 268
12:09:16.194628 IP 127.0.0.1.9023 > 127.0.0.1.9025: UDP, length 268
12:09:16.194639 IP 127.0.0.1.9023 > 127.0.0.1.9025: UDP, length 268
12:09:16.194649 IP 127.0.0.1.9023 > 127.0.0.1.9025: UDP, length 268
12:09:16.194660 IP 127.0.0.1.9023 > 127.0.0.1.9025: UDP, length 268
12:09:16.194672 IP 127.0.0.1.9023 > 127.0.0.1.9025: UDP, length 268
12:09:16.218745 IP 127.0.0.1.9023 > 127.0.0.1.9025: UDP, length 268 

The increase in overall payload (3 195 -> 3 250 -> 4 020) looks correct as additional headers and FEC payload is added.

However, this rate of UDP packet generation is difficult for the machine and intermediate network appliances to process reliably. Even with FEC and interleaving enabled, the packet loss is too high to correct.

I'm not sure why the UDP packet size is decreasing - it may be there is some maximum imposed by the spec I'm not aware of.

I'm guessing the problem lies in lib/edioutput/PFT.cpp around line 166, where the maximum payload size is calculated when PFT is enabled.

tl;dr; - turning on EDI PFT, FEC and interleaving shrinks the UDP packet sizes so small they have to be transmitted too rapidly for most devices to handle confidently.

@mpbraendli
Copy link
Member

Commit e9bb5ee in "next" spreads out the UDP packets over time, that should fix the burst you're seeing.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants