Изменение максимального размера таблиц данных (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