mirror of
https://github.com/xdp-project/bpf-examples.git
synced 2024-05-06 15:54:53 +00:00
pping: Define map sizes
Instead of specifying the map size directly in the map definitions, add them as defines at the top of the file to make them easier to change (don't have to find the correct map among the map definitions). This pattern will also simplify future additions of maps, where multiple maps may share the same size. While at it, increase the default packet_ts to 131072 (2^17) entries, as the previous value of 16384 (2^14) which, especially for the packet_ts map, was fairly underdimensioned. If only half of the timestamps are echoed back (due to ex. delayed ACK), it would in theory be enough with just 16k / (500 * 1) = 32 concurrent flows to fill it up with stale entries (assuming default cleanout interval of 1s). Increasing the size of these maps will increase the corresponding memory cost from 2^14 * (48 + 4) = 832 KiB and 2^14 * (44 + 144) = 2.94 MiB to 2^17 * (48 + 4) = 6.5 MiB and 2^17 * (44 + 144) = 23.5 MiB, respectively, which should generally not be too problematic. Signed-off-by: Simon Sundberg <simon.sundberg@kau.se>
This commit is contained in:
@@ -43,6 +43,9 @@
|
||||
#define ICMP_FLOW_LIFETIME (30 * NS_PER_SECOND) // Clear any ICMP flows if they're inactive this long
|
||||
#define UNOPENED_FLOW_LIFETIME (30 * NS_PER_SECOND) // Clear out flows that have not seen a response after this long
|
||||
|
||||
#define MAP_TIMESTAMP_SIZE 131072UL // 2^17, Maximum number of in-flight/unmatched timestamps we can keep track of
|
||||
#define MAP_FLOWSTATE_SIZE 131072UL // 2^17, Maximum number of concurrent flows that can be tracked
|
||||
|
||||
#define MAX_MEMCMP_SIZE 128
|
||||
|
||||
/*
|
||||
@@ -131,14 +134,14 @@ struct {
|
||||
__uint(type, BPF_MAP_TYPE_HASH);
|
||||
__type(key, struct packet_id);
|
||||
__type(value, __u64);
|
||||
__uint(max_entries, 16384);
|
||||
__uint(max_entries, MAP_TIMESTAMP_SIZE);
|
||||
} packet_ts SEC(".maps");
|
||||
|
||||
struct {
|
||||
__uint(type, BPF_MAP_TYPE_HASH);
|
||||
__type(key, struct network_tuple);
|
||||
__type(value, struct dual_flow_state);
|
||||
__uint(max_entries, 16384);
|
||||
__uint(max_entries, MAP_FLOWSTATE_SIZE);
|
||||
} flow_state SEC(".maps");
|
||||
|
||||
struct {
|
||||
|
||||
Reference in New Issue
Block a user