mirror of
https://github.com/xdp-project/bpf-examples.git
synced 2024-05-06 15:54:53 +00:00
Update documentation to reflect the current state of pping (after merging pping_kern_tc and pping_kern_xdp into a single file). Also add another point to the TODO list that has been discussed at a previous meeting. Signed-off-by: Simon Sundberg <simon.sundberg@kau.se>
2.6 KiB
2.6 KiB
TODO
Protocols
- TCP (based on timestamp options)
- Skip pure ACKs for egress
- Timestamping pure ACKs may lead to erroneous RTTs (ex. delay between application attempting to send data being recognized as an RTT)
- Add fallback to SEQ/ACK in case of no timestamp?
- Some machines may not use TCP timestamps (either not supported at all, or disabled as in ex. Windows 10)
- If one only considers SEQ/ACK (and don't check for SACK options), could result in ex. delay from retransmission being included in RTT
- Skip pure ACKs for egress
- ICMP (ex Echo/Reply)
- QUIC (based on spinbit)
General pping
- Add sampling so that RTT is not calculated for every packet
(with unique value) for large flows
- Allow short bursts to bypass sampling in order to handle delayed ACKs
- Keep some per-flow state
- Will likely be needed for the sampling
- Could potentially include keeping track of average RTT, which may be useful for some decisions (ex. how often to sample, when entry can be removed etc)
- Could potentially include keeping track of minimum RTT (as done by the original pping), ex. to track bufferbloat
- Could potentially include keeping track of if flow is
bi-directional
- Original pping checks if flow is bi-directional before adding timestamps, but this could miss shorter flows
- Dynamically grow the maps if they are starting to get full
- Improve map cleaning: Use a dynamic time to live for map entries
based on flow's RTT, instead of static 10s limit
- Keeping entries around for a long time allows the map to grow unnecessarily large, which slows down the cleaning and may block new entries
- Use libxdp to load XDP program
- Add option for machine-readable output (as original pping)
- It may be a good idea to keep the same format as original pping, so that tools such as ppviz works for both pping implementations.
- Add timestamps to output (as original pping)
- Add support for other hooks
- Ex TC-BFP on ingress instead of XDP?
Done
- Clean up commits and add signed-off-by tags
- Add SPDX-license-identifier tags
- Format C-code in kernel style
- Use existing functionality to reuse maps by using BTF-defined
maps
- Use BTF-defined maps for TC-BPF as well if iproute has libbpf support
- Cleanup: Unload TC-BPF at program shutdown, and unpin map - In userspace part
- Add IPv6 support
- Refactor to support easy addition of other protocols
- Load tc-bpf program with libbpf (only attach it with tc)