oscourse-tsinghua / rcore_plus

Rust version of THU uCore OS. Linux compatible.

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Improve IXGBE driver performance

jiegec opened this issue · comments

commented

Based on iperf.

Current status (tcp, maximum observed):
rcore -> linux 1.24Gb/s -> 1.40Gb/s -> 2.18Gb/s -> 2.62Gb/s -> 3.50Gb/s
linux -> rcore 308Mb/s -> 320Mb/s -> 379Mb/s -> 407Mb/s -> 1.40Gb/s -> 2.47Gb/s -> 2.53Gb/s -> 3.74Gb/s -> 4.44Gb/s

Udp is not working because smoltcp does not support segmentation.

Possible ways to improve:

  • IP checksum TX
  • IP checksum RX: little improvement
  • UDP checksum TX
  • UDP checksum RX
  • TCP checksum TX
  • TCP checksum RX
  • TCP segmentation offload
  • Interrupt throttling: good for tx, bad for rx without spinning
  • Spin for some times before waiting for condvar: observable improvement for rx
  • Enlarge TCP recv/trans buffers: observable improvement for rx
  • Replace linked_list_allocator with buddy_system_allocator: a little improvement for rx
  • Enable jumbo frame: observable improvement

Manually disable RX checksum for smoltcp seems to have little improvement.

I think we have met smoltcp's performance limit.

Test under linux:

Put two interfaces into two netns, then use iperf to test:

tcp: 9.38Gb/s

commented

Idea:
Check performance of sending raw ethernet packets, skipping network stack.