Class IoUringIoHandlerConfig

java.lang.Object
io.netty.channel.uring.IoUringIoHandlerConfig

public final class IoUringIoHandlerConfig extends Object
Configuration class for an IoUringIoHandler, managing the settings for a RingBuffer and its io_uring file descriptor.

Option Map

These options are used exclusively during the initialization of the IoUringIoHandler to configure the associated io_uring instance.

The IoUringIoHandlerConfig class provides the following configurable options:

Available Configuration Options
Setter Method Description
setRingSize(int) Sets the size of the submission queue for the io_uring instance.
If you want to submit a large number of io_uring requests at once, it is recommended to properly configure this option. The default value is 4096, which is sufficient for most scenarios.
setMaxBoundedWorker(int) Defines the maximum number of bounded io_uring worker threads.
If you extend io_uring-related file operations based on Netty, it is recommended to properly configure this option. For more details, refer to the invalid input: '<'a href="https://man7.org/linux/man-pages/man3/io_uring_register_iowq_max_workers.3.html> manual.
setMaxUnboundedWorker(int) Defines the maximum number of unbounded io_uring worker threads.
If you use FileRegion to perform `sendfile` operations in io_uring, it is recommended to properly configure this option as otherwise you might end up with an invalid input: '<'a href="https://github.com/netty/netty/issues/15125>unexpected number of kernel threads.
setCqSize(int) Sets the size of the completionQueue queue for the io_uring instance.
If your current kernel supports some multishot variants (such as IORING_RECV_MULTISHOT, IORING_ACCEPT_MULTISHOT) or IORING_RECVSEND_BUNDLE, and you want to handle more CQEs in a single syscall it is recommended to properly configure this option. The default value is twice the ring size, which is sufficient for most scenarios.
setBufferRingConfig(IoUringBufferRingConfig...) Adds a buffer ring configuration to the list of buffer ring configurations. It will be used to register the buffer ring for the io_uring instance.
setSingleIssuer(boolean) Enable or disable the use of IORING_SETUP_SINGLE_ISSUER.
  • Constructor Details

    • IoUringIoHandlerConfig

      public IoUringIoHandlerConfig()
  • Method Details

    • getRingSize

      public int getRingSize()
      Return the ring size of the io_uring instance.
      Returns:
      the ring size of the io_uring instance.
    • getCqSize

      public int getCqSize()
      Return the size of the io_uring cqe.
      Returns:
      the cq size of the io_uring.
    • getMaxBoundedWorker

      public int getMaxBoundedWorker()
      Return the maximum number of bounded iowq worker threads.
      Returns:
      the maximum number of bounded iowq worker threads.
    • getMaxUnboundedWorker

      public int getMaxUnboundedWorker()
      Return the maximum number of unbounded iowq worker threads.
      Returns:
      the maximum number of unbounded iowq worker threads.
    • setRingSize

      public IoUringIoHandlerConfig setRingSize(int ringSize)
      Set the ring size of the io_uring instance.
      Parameters:
      ringSize - the ring size of the io_uring instance.
      Returns:
      reference to this, so the API can be used fluently
    • setCqSize

      public IoUringIoHandlerConfig setCqSize(int cqSize)
      Set the size of the io_uring cqe.
      Parameters:
      cqSize - the size of the io_uring cqe.
      Returns:
      reference to this, so the API can be used fluently
      Throws:
      IllegalArgumentException - if cqSize is less than ringSize, or not a power of 2
    • setMaxBoundedWorker

      public IoUringIoHandlerConfig setMaxBoundedWorker(int maxBoundedWorker)
      Set the maximum number of bounded iowq worker threads.
      Parameters:
      maxBoundedWorker - the maximum number of bounded iowq worker threads, or 0 for the Linux kernel default
      Returns:
      reference to this, so the API can be used fluently
    • setMaxUnboundedWorker

      public IoUringIoHandlerConfig setMaxUnboundedWorker(int maxUnboundedWorker)
      Set the maximum number of unbounded iowq worker threads.
      Parameters:
      maxUnboundedWorker - the maximum number of unbounded iowq worker threads, of 0 for the Linux kernel default
      Returns:
      reference to this, so the API can be used fluently
    • setBufferRingConfig

      public IoUringIoHandlerConfig setBufferRingConfig(IoUringBufferRingConfig... ringConfig)
      Add a buffer ring configuration to the list of buffer ring configurations. Each IoUringBufferRingConfig must have a different IoUringBufferRingConfig.bufferGroupId().
      Parameters:
      ringConfig - the buffer ring configuration to append.
      Returns:
      reference to this, so the API can be used fluently
    • setSingleIssuer

      public IoUringIoHandlerConfig setSingleIssuer(boolean singleIssuer)
      Set if IORING_SETUP_SINGLE_ISSUER should be used when setup the ring. This is true by default for performance reasons but also means that the Thread that is used to drive the IoHandler can never change. If you want the flexibility to change the Thread, to for example make use of the AutoScalingEventExecutorChooserFactory it's possible to not use IORING_SETUP_SINGLE_ISSUER. This will trade scalibility / flexibility and performance.
      Parameters:
      singleIssuer - true if IORING_SETUP_SINGLE_ISSUER should be used, false otherwise
      Returns:
      reference to this, so the API can be used fluently
    • getBufferRingConfigs

      public List<IoUringBufferRingConfig> getBufferRingConfigs()
      Get the list of buffer ring configurations.
      Returns:
      the copy of buffer ring configurations.