envoyproxy/envoy

How to tell if io_uring is being used?

Open

#40 838 ouverte le 24 août 2025

Voir sur GitHub
 (9 commentaires) (0 réactions) (0 assignés)C++ (5 373 forks)batch import
help wantedquestion

Métriques du dépôt

Stars
 (27 997 stars)
Métriques de merge PR
 (Merge moyen 8j) (378 PRs mergées en 30 j)

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

Guide contributeur