Изменение максимального размера таблиц данных (XDP map tuning)
XDP-мапы являются частью жизненного цикла объектов BPF: файловой системы bpffs, они размещаются по пути: /sys/fs/bpf. Поддерево XDP-мап для Досгейта находится по пути: /sys/fs/bpf/dosgate
XDP-мапы: это таблицы данных, которые, например используются для того чтобы хранить IP-адреса, соединения, используются как вспомогательный элемент для счетчика (например, ratelimit) или используются при TCP-авторизации для сохранения конкретного шага и состояния за IP-адресом отправителя
XDP-мапы для Досгейта делятся на два типа:
-
"Глобальные мапы" (единые, на весь Досгейт) находятся по пути: /sys/fs/bpf/dosgate/base/maps
-
"Локальные мапы" (те, которые закреплены для конкретной арены) находятся по пути: /sys/fs/bpf/dosgate/contexts/
/maps
Список XDP-мап Досгейта доступных к изменению
Используйте команду dosgate -m
чтобы вывести общий список XDP-мап доступных к изменению в CLI
Map "daemon_stats_map", owned by daemon
Description: Daemon Statistics
Pin as: daemon_stats_map
Type percpu_array (6), flags 0x0 ()
Key size 4b, value size 16b
Default max entries 6
Features: BTF-, L2-
Tunables: max entries-
Map "daemon_xsk_map", owned by daemon
Description: AF_XDP redirect to upper half
Pin as: daemon_xsk_map
Type xskmap (17), flags 0x0 ()
Key size 4b, value size 4b
Default max entries 1000000
Features: BTF-, L2-
Tunables: max entries-
Map "daemon_log_entry_map", owned by daemon
Description: Logging export ring buffer
Pin as: not pinned
Type ringbuf (27), flags 0x0 ()
Key size 0b, value size 0b
Default max entries 1048576
Features: BTF-, L2-
Tunables: max entries+
Max entries min 512, max 67108864
Suffix unit: 1024
Map "daemon_log_map", owned by daemon
Description: Logging export ring buffer collection
Pin as: daemon_log_map
Type array_of_maps (12), flags 0x0 ()
Key size 4b, value size 4b
Default max entries 0, effective 4
Features: BTF-, L2+
Tunables: max entries-
L2 map: daemon_log_entry_map
Map "daemon_flow_index_map", owned by daemon
Description: Logging export flow collector index
Pin as: daemon_flow_index_map
Type percpu_array (6), flags 0x0 ()
Key size 4b, value size 144b
Default max entries 65536
Features: BTF-, L2-
Tunables: max entries-
Map "daemon_flow_cache_map", owned by daemon
Description: Logginig export flow collector cache
Pin as: daemon_flow_cache_map
Type hash (1), flags 0x0 ()
Key size 136b, value size 24b
Default max entries 0, effective 262148
Features: BTF-, L2-
Tunables: max entries-
Map "interfaces_map", owned by daemon
Description: Interfaces
Pin as: interfaces_map
Type devmap (14), flags 0x0 ()
Key size 4b, value size 4b
Default max entries 100
Features: BTF-, L2-
Tunables: max entries-
Map "geoip_map", owned by daemon
Description: GeoIP database
Pin as: geoip_map
Type lpm_trie (11), flags 0x1 (BPF_F_NO_PREALLOC)
Key size 32b, value size 8b
Default max entries 10000000
Features: BTF-, L2-
Tunables: max entries-
Map "ctx_map", owned by daemon
Description: Context
Pin as: ctx_map
Type percpu_array (6), flags 0x0 ()
Key size 4b, value size 3336b
Default max entries 1
Features: BTF-, L2-
Tunables: max entries-
Map "prog_map", owned by arena
Description: Program
Pin as: prog_map
Type prog_array (3), flags 0x0 ()
Key size 4b, value size 4b
Default max entries 1100
Features: BTF-, L2-
Tunables: max entries-
Map "tree_ipv4_map", owned by arena
Description: IPv4 Router
Pin as: tree_ipv4_map
Type lpm_trie (11), flags 0x1 (BPF_F_NO_PREALLOC)
Key size 8b, value size 8b
Default max entries 1000000
Features: BTF-, L2-
Tunables: max entries+
Max entries min 100, max 100000000
Suffix unit: 1000
Map "tree_ipv6_map", owned by arena
Description: IPv6 Router
Pin as: tree_ipv6_map
Type lpm_trie (11), flags 0x1 (BPF_F_NO_PREALLOC)
Key size 24b, value size 8b
Default max entries 1000000
Features: BTF-, L2-
Tunables: max entries+
Max entries min 100, max 100000000
Suffix unit: 1000
Map "stats_map", owned by arena
Description: Statistics
Pin as: stats_map
Type percpu_array (6), flags 0x0 ()
Key size 4b, value size 16b
Default max entries 256012
Features: BTF-, L2-
Tunables: max entries-
Map "lock_map", owned by arena
Description: Locking
Pin as: lock_map
Type array (2), flags 0x0 ()
Key size 4b, value size 4b
Default max entries 1048576
Features: BTF+, L2-
Tunables: max entries+
Max entries min 100, max 100000000
Suffix unit: 1000
Map "hmark_inet_map", owned by arena
Description: Host Mark IPv4
Pin as: hmark_inet_map
Type lru_hash (9), flags 0x2 (BPF_F_NO_COMMON_LRU)
Key size 22b, value size 16b
Default max entries 1000000, effective 2000000
Features: BTF-, L2-
Tunables: max entries+
Max entries min 100, max 100000000
Suffix unit: 1000
Map "hmark_inet6_map", owned by arena
Description: Host Mark IPv6
Pin as: hmark_inet6_map
Type lru_hash (9), flags 0x2 (BPF_F_NO_COMMON_LRU)
Key size 34b, value size 16b
Default max entries 1000000, effective 2000000
Features: BTF-, L2-
Tunables: max entries+
Max entries min 100, max 100000000
Suffix unit: 1000
Map "sdhmark_inet_map", owned by arena
Description: Source-Destination Host Mark IPv4
Pin as: sdhmark_inet_map
Type lru_hash (9), flags 0x2 (BPF_F_NO_COMMON_LRU)
Key size 26b, value size 16b
Default max entries 1000000, effective 2000000
Features: BTF-, L2-
Tunables: max entries+
Max entries min 100, max 100000000
Suffix unit: 1000
Map "sdhmark_inet6_map", owned by arena
Description: Source-Destination Host Mark IPv6
Pin as: sdhmark_inet6_map
Type lru_hash (9), flags 0x2 (BPF_F_NO_COMMON_LRU)
Key size 50b, value size 16b
Default max entries 1000000, effective 2000000
Features: BTF-, L2-
Tunables: max entries+
Max entries min 100, max 100000000
Suffix unit: 1000
Map "dmark_inet_map", owned by arena
Description: Destination Host Mark IPv4
Pin as: dmark_inet_map
Type lru_hash (9), flags 0x2 (BPF_F_NO_COMMON_LRU)
Key size 22b, value size 16b
Default max entries 1000000, effective 2000000
Features: BTF-, L2-
Tunables: max entries+
Max entries min 100, max 100000000
Suffix unit: 1000
Map "dmark_inet6_map", owned by arena
Description: Destination Host Mark IPv6
Pin as: dmark_inet6_map
Type lru_hash (9), flags 0x2 (BPF_F_NO_COMMON_LRU)
Key size 34b, value size 16b
Default max entries 1000000, effective 2000000
Features: BTF-, L2-
Tunables: max entries+
Max entries min 100, max 100000000
Suffix unit: 1000
Map "connmark_map", owned by arena
Description: Connection Mark IPv4 and IPv6
Pin as: connmark_map
Type lru_hash (9), flags 0x2 (BPF_F_NO_COMMON_LRU)
Key size 124b, value size 16b
Default max entries 1000000, effective 2000000
Features: BTF-, L2-
Tunables: max entries+
Max entries min 100, max 100000000
Suffix unit: 1000
Map "ratelimit_map", owned by arena
Description: RateLimit IPv4 and IPv6
Pin as: ratelimit_map
Type lru_hash (9), flags 0x2 (BPF_F_NO_COMMON_LRU)
Key size 124b, value size 32b
Default max entries 1000000, effective 2000000
Features: BTF-, L2-
Tunables: max entries+
Max entries min 100, max 100000000
Suffix unit: 1000
Map "sample_map", owned by arena
Description: Sampling IPv4 and IPv6
Pin as: sample_map
Type lru_hash (9), flags 0x2 (BPF_F_NO_COMMON_LRU)
Key size 124b, value size 8b
Default max entries 1000000, effective 2000000
Features: BTF-, L2-
Tunables: max entries+
Max entries min 100, max 100000000
Suffix unit: 1000
Map "tcpauth_map", owned by arena
Description: TCP Authentication temporary data
Pin as: tcpauth_map
Type lru_hash (9), flags 0x2 (BPF_F_NO_COMMON_LRU)
Key size 34b, value size 48b
Default max entries 1000000, effective 2000000
Features: BTF-, L2-
Tunables: max entries+
Max entries min 100, max 100000000
Suffix unit: 1000
Map "prefixset_map", owned by arena
Description: Prefixset storage
Pin as: prefixset_map
Type lpm_trie (11), flags 0x1 (BPF_F_NO_PREALLOC)
Key size 32b, value size 8b
Default max entries 10000000
Features: BTF-, L2-
Tunables: max entries+
Max entries min 100, max 100000000
Suffix unit: 1000
Map "rate_map", owned by arena
Description: Rate estimation data
Pin as: rate_map
Type lru_hash (9), flags 0x2 (BPF_F_NO_COMMON_LRU)
Key size 124b, value size 104b
Default max entries 1000000, effective 2000000
Features: BTF-, L2-
Tunables: max entries+
Max entries min 100, max 100000000
Suffix unit: 1000
Map "pstats_map", owned by passthrough
Description: Passthrough statistics
Pin as: pstats_map
Type percpu_array (6), flags 0x0 ()
Key size 4b, value size 16b
Default max entries 6
Features: BTF-, L2-
Tunables: max entries-
Изменение размера XDP-мапы
Для того, чтобы изменить размер конкретной XDP-мапы или ряда XDP-мап, следуйте следующей инструкции:
1. Остановите dosgate и все его компоненты
sudo service dosgate stop
2. Очистите содержимое всех XDP-мап
dgadm --clear=sa -y
3. Измените содержимое dosgate.conf в соответствии с примером
а. В зависимости от изменяемой XDP-мапы, определите размер ключа для этой мапы в байтах (Key size)
б. Определите новый размер XDP-мапы, например, 2 000 000 для TCP-авторизации (default: 1 000 000)
в. Определите требуемый объем оперативной памяти (важно: оперативная память не резервируется, но при полноценном потреблении в рамках XDP-мап, это максимальный объем который может потребоваться). Используйте формулу: Key size
* Новый размер XDP-мапы
В случае, если у XDP-мапы Key size
и value size
равняются 0b
, следует использовать значения в байтах. Поддерживаются обозначения K (kilobytes), M (megabytes), G (gigabytes). См. пример "Изменение XDP-мапы относящейся к демону"
Изменение XDP-мапы относящейся к арене (локальной)
root@dg-daemon:~# nano /etc/dosgate.conf
arenas:
- name: first
id: 1
maps:
hmark_inet_map: 50000000
Изменение XDP-мапы относящейся к демону (глобальной):
root@dg-daemon:~# nano /etc/dosgate.conf
+ daemon:
+ maps:
+ daemon_log_entry_map: 1M
arenas:
- name: first
id: 1
4. Сохраните dosgate.conf и запустите dosgate
service dosgate start
5. Убедитесь, что сервис запущен, и ошибки отсутствуют
service dosgate status