Назад | Перейти на главную страницу

Значения таймаута кэша arp в Linux

Я пытаюсь настроить разумные значения для тайм-аута arp-кеша ядра Linux, но я не могу найти подробного объяснения того, как они работают где-либо. Даже документация kernel.org не дает хорошего объяснения, я могу найти только рекомендуемые значения, чтобы уменьшить переполнение.

Вот пример имеющихся у меня значений:

net.ipv4.neigh.default.gc_thresh1 = 128
net.ipv4.neigh.default.gc_thresh2 = 512
net.ipv4.neigh.default.gc_thresh3 = 1024

Теперь из того, что я собрал до сих пор:

Теперь, если я правильно понимаю, если количество записей arp превышает gc_thresh1, но остается ниже gc_thresh2, избыток будет периодически удаляться с интервалом, установленным gc_interval.

Мой вопрос: если количество записей превышает gc_thresh2, но ниже gc_thresh3, или если количество превышает gc_thresh3, как эти записи удаляются? Другими словами, что именно означает «активно» и «агрессивно» удалено? Я предполагаю, что это означает, что они удаляются чаще, чем указано в gc_interval, но я не могу найти, насколько.

Каждый раз, когда происходит принудительная сборка мусора записей, last_flush обновляется поле в таблице соседей, neigh_table.

Принудительная сборка мусора для записей происходит при выполнении одного из следующих условий:

  • Количество записей в таблице больше, чем gc_thresh3
  • Количество записей в таблице больше, чем gc_thresh2, и время с last_flush Больше или равно 5 HZ

При запросе принудительной сборки мусора записи, соответствующие обоим следующим критериям, отбрасываются:

  • Никто не ссылается на запись
  • Въезд не постоянный

Периодическая работа, neigh_periodic_work пытается освободить записи, на которые нет ссылок, если общее количество записей больше, чем gc_thresh1.

Источник: Исходный код ядра Linux, Neighbour.c