Create a Post
cancel
Showing results for 
Search instead for 
Did you mean: 
Danny
MVP Diamond
MVP Diamond

Maestro RX Ring Buffer Configuration

To mitigate RX-DROPs on a Maestro Security Group I wanted to increase the RX ring buffer on the backplane interfaces.

Background:

After rerouting a high PPS 100G traffic flow through a Maestro Security Group I observed increasing RX-DROPs on the active chassis backplane interfaces.

Investigation showed the drops were reported as rx_out_of_buffer while SND and worker cores remained largely idle. Based on the observed behavior, increasing the RX ring buffer was recommended as a mitigation for potential microburst-induced queue overflows.


Related SKs
 
Show current settings:
  • Gaia Clish (excerpt for SG member 1)
    [Global] FWSG-s01-01> show interface BPEth0 rx-ringsize
    1_01:
    Receive buffer ring size: 256
    Maximum receive buffer ring size: 4096

  • Expert mode
    # grep ringsize /config/active
    
    # cat /proc/net/bonding/BPEth0 | grep eths
    Slave Interface: ethsBP1-01
    Slave Interface: ethsBP1-02
    Slave Interface: ethsBP1-03
    Slave Interface: ethsBP1-04
    
    # ethtool -g ethsBP1-01
    Ring parameters for ethsBP1-01:
    Pre-set maximums:
    RX:             8160
    Current hardware settings:
    RX:             1024

Increasing the RX ringsize:
  • Expert Mode (requires a maintenance window as some SG members will reboot)
    # g_all -a "dbset interface:ethsBP1-01:rx-ringsize 4096"
    # g_all -a "dbset interface:ethsBP1-02:rx-ringsize 4096"
    # g_all -a "dbset interface:ethsBP1-03:rx-ringsize 4096"
    # g_all -a "dbset interface:ethsBP1-04:rx-ringsize 4096"
    # g_all -a "dbset :save"​

Verify the increased RX ringsize:
  • Expert mode
    # grep ringsize /config/active
    interface:ethsBP1-01:rx-ringsize 4096
    interface:ethsBP1-02:rx-ringsize 4096
    interface:ethsBP1-03:rx-ringsize 4096
    interface:ethsBP1-04:rx-ringsize 4096​
    
    # ethtool -g ethsBP1-01
    Ring parameters for ethsBP1-01:
    Pre-set maximums:
    RX:             8160
    Current hardware settings:
    RX:             4096
  • Gaia Clish (excerpt for SG member 1)
    [Global] FWSG-s01-01> show configuration interface
    set interface ethsBP1-01 rx-ringsize 4096
    set interface ethsBP1-02 rx-ringsize 4096
    set interface ethsBP1-03 rx-ringsize 4096
    set interface ethsBP1-04 rx-ringsize 4096
    
    [Global] FWSG-s01-01> show interface BPEth0 rx-ringsize
    1_01:
    Receive buffer ring size:256
    Maximum receive buffer ring size:4096
  • Persistence validation
    After rebooting the Security Group the configuration remained present in grep ringsize /config/active
    ethtool -g continued to report RX = 4096 on the slave interfaces.
    This was observed without adding any commands to rc.local as documented in sk183094.
Documentation gaps and validation questions:
  • Questions
    1. Why does Gaia Clish continue to report 256?
    2. Is ethtool -g on the slave interfaces the authoritative validation method?
    3. Is modifying rc.local still required on R82 Maestro?
    4. Why does Gaia automatically generate set interface ethsBP* rx-ringsize entries after a successful dbset operation, and are these intended to be valid Gaia configuration commands or merely a representation of the underlying database configuration? I'm asking because these commands are rejected when executed manually.
    5. When increasing the RX ring buffer to mitigate RX-DROPs, should the TX ring buffer always be increased as well (as shown in sk183094) or only when transmit-side issues are observed?
    6. Why are four slave interfaces shown behind BPEth0 when only one backplane connection is physically connected, and is this expected Maestro behavior?
    7. Is configuring ethsBP* now the officially recommended method?
    8. Can the SKs be updated with complete validation examples?

---
@Lari_Luoma @Anatoly @Tom_Kendrick @Laszlo_Csosza @Jochen_Hoechner @Tom_Hartig @Timothy_Hall 

3 Replies
_Val_
Admin
Admin

Thanks for sharing, @Danny 

0 Kudos
CP_Chris
Employee Employee
Employee

I believe I need to first start with stating that not all Scalable Platforms are the same. When reviewing documentation and KB Solutions, care needs to be taken to determine if the information is specific for ElasticXL, Maestro, or Scalable Chassis. This is not always apparent at first glance, so be extra careful when applying information to Scalable Platforms. Specifically, within the Scalable Platform Admin guide, there is a section about how to make changes to BPEthX. This is within the Scalable Chassis section of the guide, and can only be applied to Scalable Chassis. 

Something to note: on Maestro, BPEthX is a pseudo interface, whereas on a Scalable Chassis, BPEthX is a physical interface. This causes confusion in situations as described here. 

The pseudo interfaces BPEthX within Maestro specifically represent the aggregation of multiple physical backplane interfaces. The actual packet processing and buffering happen on the physical interfaces—not on the pseudo interface itself. Pseudo interfaces like BPEth0 do not have their own hardware buffers. Even though you see the setting from clish, it does nothing to affect the traffic across the physical interfaces. 

As you found out, using the ethtool -g or -G options provide errors when run against pseudo interfaces like BPEth0. This is supposed to prevent conflicts that could arise from trying to set or display buffer sizes on a logical interface that does not directly interact with hardware queues. Therefore, the changes need to be done on the underlying physical interfaces ethsBP* that are associated with the pseudo interface.

To change the buffer size for the underlying physical interfaces, the dbset command is the way to set it, along with the dbset :save command to save the changes for future boots - like the save config within clish. To see the setting, the ethtool -g command can be used on the physical interface, or the dbget command. Note: the dbget command will only show anything if it has previously been set manually.

These changes should be made in incremental changes, not immediately going to the largest value allowed. The ringsize can affect other things on the system, such as:

  • Increased Memory Usage - be sure to monitor before and after making any changes
  • Higher latency - packets can spend more time in the buffer before being processed. 
  • Diminished returns - depends on where the bottleneck is (CPU, driver, hardware, etc.)
  • Modifying buffer sizes can cause interface resets or require a reboot, potentially impacting traffic. 
    • Always perform during a maintenance window, and make sure you have console access in case the system becomes unresponsive
    • Make sure you know the maximum supported buffer size and never exceed them when setting the value, otherwise there may be errors or unexpected behaviors. 

To answer your specific questions:

  1. You are reviewing the information for the pseudo interface, not the physical interface. This interface does not have it's own hardware buffers and can be ignored. If you look back at the information you presented, you will see the physical interfaces default with a setting of 1024, not 256. This shows even in a default state the settings do not affect each other. 
  2. Yes, this would be the expectation. If the setting has been modified from the default, you would also be able to see it with a dbget command. 
  3. Based on your experience, and what I have found, the "dbset :save" command is how to ensure the setting is saved. The rc.local file should not need to be changed. 
  4. Not sure, and I don't want to speculate here. The best way to get an answer would probably be from TAC. 
  5. Best practices are to only make changes where they are needed - don't make blanket changes unless it is specifically documented. sk183094 is only providing the commands for how to make the changes. It is not meant to be inferred that changing one automatically means the other should be changed. Make the change to the rx buffer and monitor.
  6. Not knowing your full topology and configuration I'm not sure. Making an assumption there are 2 MHOs, and 2 members within the Security Group, there would be 1 downlink from each MHO per member (2 links) * 2 member = 4 physical links making up the backplane. 
  7. Specifically for the rx and tx ringsize - yes. 
  8. This may be possible. Knowing how the different Scalable Platforms are different from each other is paramount for reading the solutions. If you know these, the information takes on a different light. We can take this back to the documentation team and see what can be done. 

Hope this helps...

Danny
MVP Diamond
MVP Diamond

@CP_Chris : Thanks for your comprehensive answer and confirmation of my findings. I'm aware that changes to the RX buffer should be made in incremental steps. As each of such steps requires a maintenance window, those steps can't be too small (SG members will reboot = service degradation in production environment for several minutes).