"deploy/vscode:/vscode.git/clone" did not exist on "33e7272093bf8069981483826792a316d61aeb50"
tcp_codec_perf.rs 4.13 KB
Newer Older
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
// SPDX-FileCopyrightText: Copyright (c) 2024-2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
// SPDX-License-Identifier: Apache-2.0

//! Micro-benchmarks for TCP codec performance
//!
//! Run with: cargo bench --bench tcp_codec_perf

use bytes::Bytes;
use criterion::{BenchmarkId, Criterion, Throughput, black_box, criterion_group, criterion_main};
use dynamo_runtime::pipeline::network::codec::{TcpRequestMessage, TcpResponseMessage};

/// Benchmark request encoding (hot path operation)
fn bench_request_encoding(c: &mut Criterion) {
    let mut group = c.benchmark_group("tcp_request_encoding");

    // Test different payload sizes
    for size in [102_400, 1_024_000, 31_000_000].iter() {
        let payload = Bytes::from(vec![0u8; *size]);
        let endpoint = "api.endpoint.test".to_string();

        group.throughput(Throughput::Bytes(*size as u64));
        group.bench_with_input(BenchmarkId::from_parameter(size), size, |b, _| {
            b.iter(|| {
                let msg = TcpRequestMessage::new(endpoint.clone(), payload.clone());
                let encoded = msg.encode().unwrap();
                black_box(encoded);
            });
        });
    }

    group.finish();
}

/// Benchmark response encoding
fn bench_response_encoding(c: &mut Criterion) {
    let mut group = c.benchmark_group("tcp_response_encoding");

    for size in [100, 1024, 10_240, 102_400].iter() {
        let data = Bytes::from(vec![0u8; *size]);

        group.throughput(Throughput::Bytes(*size as u64));
        group.bench_with_input(BenchmarkId::from_parameter(size), size, |b, _| {
            b.iter(|| {
                let msg = TcpResponseMessage::new(data.clone());
                let encoded = msg.encode().unwrap();
                black_box(encoded);
            });
        });
    }

    group.finish();
}

/// Benchmark request decoding
fn bench_request_decoding(c: &mut Criterion) {
    let mut group = c.benchmark_group("tcp_request_decoding");

    for size in [100, 1024, 10_240, 102_400].iter() {
        let payload = Bytes::from(vec![0u8; *size]);
        let msg = TcpRequestMessage::new("api.endpoint.test".to_string(), payload);
        let encoded = msg.encode().unwrap();

        group.throughput(Throughput::Bytes(*size as u64));
        group.bench_with_input(BenchmarkId::from_parameter(size), size, |b, _| {
            b.iter(|| {
                let decoded = TcpRequestMessage::decode(&encoded).unwrap();
                black_box(decoded);
            });
        });
    }

    group.finish();
}

/// Benchmark response decoding
fn bench_response_decoding(c: &mut Criterion) {
    let mut group = c.benchmark_group("tcp_response_decoding");

    for size in [100, 1024, 10_240, 102_400].iter() {
        let data = Bytes::from(vec![0u8; *size]);
        let msg = TcpResponseMessage::new(data);
        let encoded = msg.encode().unwrap();

        group.throughput(Throughput::Bytes(*size as u64));
        group.bench_with_input(BenchmarkId::from_parameter(size), size, |b, _| {
            b.iter(|| {
                let decoded = TcpResponseMessage::decode(&encoded).unwrap();
                black_box(decoded);
            });
        });
    }

    group.finish();
}

/// Benchmark full encode-decode cycle for requests
fn bench_request_roundtrip(c: &mut Criterion) {
    let mut group = c.benchmark_group("tcp_request_roundtrip");

    for size in [100, 1024, 10_240].iter() {
        let payload = Bytes::from(vec![0u8; *size]);
        let endpoint = "api.endpoint.test".to_string();

        group.throughput(Throughput::Bytes(*size as u64));
        group.bench_with_input(BenchmarkId::from_parameter(size), size, |b, _| {
            b.iter(|| {
                let msg = TcpRequestMessage::new(endpoint.clone(), payload.clone());
                let encoded = msg.encode().unwrap();
                let decoded = TcpRequestMessage::decode(&encoded).unwrap();
                black_box(decoded);
            });
        });
    }

    group.finish();
}

criterion_group!(
    benches,
    bench_request_encoding,
    bench_response_encoding,
    bench_request_decoding,
    bench_response_decoding,
    bench_request_roundtrip,
);
criterion_main!(benches);