envoyproxy/envoy

How to tell if io_uring is being used?

Open

#40.838 aberto em 24 de ago. de 2025

Ver no GitHub
 (9 comments) (0 reactions) (0 assignees)C++ (5.373 forks)batch import
help wantedquestion

Métricas do repositório

Stars
 (27.997 stars)
Métricas de merge de PR
 (Mesclagem média 8d) (378 fundiu PRs em 30d)

Description

I'm experimenting with the new io_uring support. Minimal config provided below.

I'm trying to figure out if its actually enabled/working during runtime?

I have tracing enabled ( io: trace, actually I set everything to trace) but I'm not seeing any io logs from https://github.com/envoyproxy/envoy/blob/9b71b5a27debfc63194c0817adfc466c9c719c19/source/common/io/io_uring_worker_impl.cc To clarify, I do see lots of debug and trace logs, but nothing indicating io_uring.

How can I tell if io_uring is actually in use?

@soulxu @zhxie maybe can help?

References: https://www.envoyproxy.io/docs/envoy/latest/configuration/other_features/io_uring.html https://www.envoyproxy.io/docs/envoy/latest/api-v3/extensions/network/socket_interface/v3/default_socket_interface.proto.html#envoy-v3-api-msg-extensions-network-socket-interface-v3-iouringoptions

version: '3'
services:
  envoy:
    image: envoyproxy/envoy:v1.35.1
    ports:
      - "10000:10000"
      - "9901:9901"
    volumes:
      - ./envoy.yaml:/etc/envoy/envoy.yaml
    command: ["-c", "/etc/envoy/envoy.yaml", "-l", "trace"]
admin:
  address:
    socket_address: { address: 0.0.0.0, port_value: 9901 }

static_resources:
  listeners:
  - name: listener_0
    address:
      socket_address: { address: 0.0.0.0, port_value: 10000 }
    filter_chains:
    - filters:
      - name: envoy.filters.network.http_connection_manager
        typed_config:
          "@type": type.googleapis.com/envoy.extensions.filters.network.http_connection_manager.v3.HttpConnectionManager
          stat_prefix: ingress_http
          codec_type: AUTO
          route_config:
            name: local_route
            virtual_hosts:
            - name: local_service
              domains: ["*"]
              routes:
              - match: { prefix: "/" }
                route: { cluster: some_service }
          http_filters:
            - name: envoy.filters.http.router
              typed_config:
                "@type": type.googleapis.com/envoy.extensions.filters.http.router.v3.Router
  clusters:
  - name: some_service
    connect_timeout: 5s
    type: STRICT_DNS
    lb_policy: ROUND_ROBIN
    upstream_http_protocol_options:
      auto_sni: true
      override_auto_sni_header: set-custom-sni
    load_assignment:
      cluster_name: some_service
      endpoints:
      - lb_endpoints:
        - endpoint:
            address:
              socket_address:
                address: httpbin.org
                port_value: 443
    transport_socket:
      name: envoy.transport_sockets.tls
      typed_config:
        "@type": type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.UpstreamTlsContext

bootstrap_extensions:
  - name: iouringtest
    typed_config:
      "@type": type.googleapis.com/envoy.extensions.network.socket_interface.v3.DefaultSocketInterface
      io_uring_options:
        read_buffer_size: 32000
default_socket_interface: iouringtest

Guia do colaborador