Skip to main content

dope_uring/driver/
config.rs

1#[derive(Clone, Copy, Debug, PartialEq, Eq)]
2pub struct DriverConfig {
3    pub ring_entries: u32,
4    pub fixed_buf_count: usize,
5    pub fixed_buf_len: usize,
6    pub fixed_file_slots: u32,
7    pub provided_buf_entries: u16,
8    pub provided_buf_len: usize,
9    pub defer_taskrun: bool,
10
11    pub cpu_id: Option<u16>,
12}
13
14impl Default for DriverConfig {
15    fn default() -> Self {
16        Self {
17            ring_entries: 1024,
18            fixed_buf_count: 64,
19            fixed_buf_len: 4096,
20            fixed_file_slots: 4096,
21            provided_buf_entries: 128,
22            provided_buf_len: 4096,
23            defer_taskrun: false,
24            cpu_id: None,
25        }
26    }
27}
28
29impl dope_core::driver::DriverConfig for DriverConfig {
30    fn for_profile<P: dope_core::profile::Profile>() -> Self {
31        Self {
32            ring_entries: P::RING_ENTRIES,
33            fixed_buf_count: 1024,
34            fixed_buf_len: 4096,
35            fixed_file_slots: 8192,
36            provided_buf_entries: 4096,
37            provided_buf_len: 4096,
38            defer_taskrun: P::DEFER_TASKRUN,
39            cpu_id: None,
40        }
41    }
42
43    fn for_tcp_profile(ring_entries: u32, max_conn: usize, ingress_buf_cap: usize) -> Self {
44        Self {
45            ring_entries,
46            fixed_buf_count: 64,
47            fixed_buf_len: 4096,
48            fixed_file_slots: max_conn.max(4096) as u32,
49            provided_buf_entries: (max_conn.max(2048) * 4).min(32768) as u16,
50            provided_buf_len: ingress_buf_cap,
51            ..Self::default()
52        }
53    }
54
55    fn for_quic_udp(provided_buf_entries: u32, provided_buf_len: u32) -> Self {
56        Self {
57            ring_entries: 256,
58            fixed_buf_count: 0,
59            fixed_buf_len: 0,
60            fixed_file_slots: 16,
61            provided_buf_entries: provided_buf_entries as u16,
62            provided_buf_len: provided_buf_len as usize,
63            ..Self::default()
64        }
65    }
66
67    #[inline(always)]
68    fn with_defer_taskrun(mut self, enable: bool) -> Self {
69        self.defer_taskrun = enable;
70        self
71    }
72
73    #[inline(always)]
74    fn with_cpu_id(mut self, cpu: Option<u16>) -> Self {
75        self.cpu_id = cpu;
76        self
77    }
78}