Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Support plugin network stack #9551

Merged
merged 1 commit into from
Sep 23, 2024

Commits on Jul 12, 2024

  1. Support plugin network stack

    This commit supports a third-party network stack as a plugin stack for
    gVisor.
    
    The overall plugin package structure is the following:
    
    - pkg/sentry/socket/plugin:
      Interfaces for initializing plugin network stack. It will be used
      in network setting up during sandbox creating.
    
    - pkg/sentry/socket/plugin/stack:
      Glue layer for plugin stack's socket and stack ops with sentry. It
      will also register plugin stack operations if imported.
    
    - pkg/sentry/socket/plugin/cgo:
      Interfaces defined in C for plugin network stack to support.
    
    To build target runsc-plugin-stack, which imports
    pkg/sentry/socket/plugin/stack package and enables CGO:
    
    bazel build --config=plugin-tldk runsc:runsc-plugin-stack
    
    (i.e. --config=plugin-tldk indicates that using TLDK as plugin stack)
    
    By using runsc-plugin-stack binary and setting "--network=plugin" in
    runtimeArgs, user can use third-party network stack instead of
    netstack embedded in gVisor to get better network performance.
    
    Redis benchmark with following setups:
    1. KVM platform
    2. 4 physical cores for target pod
    3. target pod as redis server
    
    Runc:
    $redis-benchmark -h [target ip] -n 100000 -t get,set -q
    SET: 115207.38 requests per second, p50=0.215 msec
    GET: 92336.11 requests per second, p50=0.279 msec
    
    $redis-benchmark -h [target ip] -n 100000 -t get,set -q
    SET: 113895.21 requests per second, p50=0.247 msec
    GET: 96899.23 requests per second, p50=0.271 msec
    
    $redis-benchmark -h [target ip] -n 100000 -t get,set -q
    SET: 126582.27 requests per second, p50=0.199 msec
    GET: 95969.28 requests per second, p50=0.271 msec
    
    Runsc with plugin stack:
    $redis-benchmark -h [target ip] -n 100000 -t get,set -q
    SET: 123915.74 requests per second, p50=0.343 msec
    GET: 115473.45 requests per second, p50=0.335 msec
    
    $redis-benchmark -h [target ip] -n 100000 -t get,set -q
    SET: 120918.98 requests per second, p50=0.351 msec
    GET: 117647.05 requests per second, p50=0.351 msec
    
    $redis-benchmark -h [target ip] -n 100000 -t get,set -q
    SET: 119904.08 requests per second, p50=0.367 msec
    GET: 112739.57 requests per second, p50=0.375 msec
    
    Runsc with netstack:
    $redis-benchmark -h [target ip] -n 100000 -t get,set -q
    SET: 59952.04 requests per second, p50=0.759 msec
    GET: 61162.08 requests per second, p50=0.631 msec
    
    $redis-benchmark -h [target ip] -n 100000 -t get,set -q
    SET: 52219.32 requests per second, p50=0.719 msec
    GET: 58719.91 requests per second, p50=0.663 msec
    
    $redis-benchmark -h [target ip] -n 100000 -t get,set -q
    SET: 59952.04 requests per second, p50=0.751 msec
    GET: 60827.25 requests per second, p50=0.751 msec
    
    Updates google#9266
    
    Co-developed-by: Tianyu Zhou <wentong.zty@antgroup.com>
    Signed-off-by: Anqi Shen <amy.saq@antgroup.com>
    amysaq2023 committed Jul 12, 2024
    Configuration menu
    Copy the full SHA
    56f2530 View commit details
    Browse the repository at this point in the history