Editing
Core Offloads
(section)
Jump to navigation
Jump to search
Warning:
You are not logged in. Your IP address will be publicly visible if you make any edits. If you
log in
or
create an account
, your edits will be attributed to your username, along with other benefits.
Anti-spam check. Do
not
fill this in!
=== Configuration === The following features can be configured on Linux using ethtool. The following setters should succeed and the getters should confirm the setting. Reading back configuration settings does not verify that the behavior matches the stated configuration. This is a necessary, but not sufficient test. The subsequent section will present functional behavior tests. <span id="queue-length"></span> ===== Queue Length ===== The device must support queue lengths between 512 and 4096 slots. <pre>For VAL in 512 1024 4096: ethtool -G eth0 rx $VAL tx $VAL ethtool -g eth0</pre> It should allow reconfiguration without bringing the link down. Link changes can be counted with <pre>cat /sys/class/net/eth0/carrier_up_count</pre> <span id="queue-count"></span> ===== Queue Count ===== The device must support up to 1K queues. It must support independent configuration of receive and transmit queue count. <pre>For VAL in 1 128 1024: ethtool -L eth0 rx $VAL tx $VAL ethtool -l eth0 ethtool -L eth0 rx 1 tx $VAL ethtool -l eth0 ethtool -L eth0 rx $VAL tx 1 ethtool -l eth0</pre> <span id="interrupt-moderation"></span> ===== Interrupt Moderation ===== The device must support [2, 200] usec delay. It should support [2, 128] events batched. <pre>For VAL in 1 2 20 32 200: ethtool -C eth0 rx-usecs $VAL ethtool -c ethtool -C eth0 tx-usecs $VAL ethtool -c For VAL in 1 2 20 24 128: ethtool -C eth0 rx-frames $VAL ethtool -c ethtool -C eth0 tx-frames $VAL ethtool -c</pre> <span id="receive-side-scaling-1"></span> ===== Receive Side Scaling ===== The device must support an indirection table with 1K slots. It may support non-equal weight load balancing <pre>ethtool -L eth0 rx 1024 ethtool -X eth0 equal 1024 ethtool -x eth0 ethtool -X eth0 equal 2 ethtool -x eth0 ethtool -X eth0 weight 2 1 ethtool -x eth0</pre> It must allow reconfiguration without bringing the link down. Link changes can be counted with <pre>cat /sys/class/net/eth0/carrier_up_count</pre> <span id="programmable-flow-steering-1"></span> ===== Programmable Flow Steering ===== Programmable flow steering is an optional feature. But if supported on Linux it must implement this standard interface <pre>ethtool -X eth0 equal 1 # steer all non-matching traffic to queue 0 ethtool -K eth0 ntuple on ethtool -N eth0 flow-type tcp6 src-port 8000 action 1</pre> ethtool -N eth0 flow-type tcp4 src-port 8000 action 2 <span id="offloads"></span> ===== Offloads ===== The device must advertise the following features and they must be configurable: <pre>For VAL in off on off: ethtool -K eth0 rx $VAL # rx checksum offload ethtool -K eth0 tx $VAL # tx checksum offload ethtool -K eth0 tso $VAL ethtool -K eth0 tx-udp-segmentation $VAL</pre> The device should advertise these offloads as well: <pre>For VAL in off on off: ethtool -K eth0 rxhash $VAL ethtool -K eth0 rx-gro-hw $VAL</pre> The device may advertise flow steering (including ARFS) as well: <pre>For VAL in off on off: ethtool -K eth0 ntuple $VAL</pre> In all cases the configuration must be tested to be successfully reflected in ethtool -k. <span id="jumbogram-segmentation-offload-1"></span> ====== Jumbogram Segmentation Offload ====== In Linux, jumbogram segmentation offload is enabled by explicitly configuring a maximum size that exceeds 64KB: ip link set dev eth0 gso_max_size 262144 <span id="link-layer"></span> ===== Link Layer ===== The device must support L2MTU up to 9216, which is L3MTU of 9198. It should optimize for 4KB payload: 4096 + 40B IPv6 + 20B TCP + 12B TCP options (RFC 7323 timestamp). TCP options are included in MSS calculation [ref_id:rfc_6691], so this gives an MSS of 4108 and L3MTU of 4168. <pre>For VAL in 1500 4168 9198: ip link set dev eth0 mtu $VAL</pre> The device must support 64 concurrent unicast and multicast MAC filters: <pre>For BYTE in {1..64}: ip link add link eth0 dev eth0.$BYTE address 22:22:22:22:22:$BYTE type macvlan</pre> The device must support promiscuous (all addresses) and allmulti (all multicast addresses) modes: <pre>For VAL in off on off: ip link set dev eth0 promisc $VAL ip link set dev eth0 allmulticast $VAL</pre> <span id="functional"></span>
Summary:
Please note that all contributions to OpenCompute may be edited, altered, or removed by other contributors. If you do not want your writing to be edited mercilessly, then do not submit it here.
You are also promising us that you wrote this yourself, or copied it from a public domain or similar free resource (see
OpenCompute:Copyrights
for details).
Do not submit copyrighted work without permission!
Cancel
Editing help
(opens in new window)
Navigation menu
Personal tools
Not logged in
Talk
Contributions
Create account
Log in
Namespaces
Page
Discussion
English
Views
Read
Edit
View history
More
Search
Navigation
Main page
Recent changes
Random page
Help about MediaWiki
Tools
What links here
Related changes
Special pages
Page information