dope_uring/driver/
config.rs1#[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}