我正在尝试为 Linux 内核 arp 缓存超时配置合理的值,但我找不到有关它们如何工作的详细解释。即使 kernel.org 文档也没有给出很好的解释,我只能找到缓解溢出的推荐值。
下面是我的价值观的一个示例:
net.ipv4.neigh.default.gc_thresh1 = 128
net.ipv4.neigh.default.gc_thresh2 = 512
net.ipv4.neigh.default.gc_thresh3 = 1024
现在,从我目前所收集到的信息来看:
gc_thresh1 是垃圾收集器开始删除任何条目之前允许的 arp 条目数。
gc_thresh2 是软限制,即垃圾收集器主动删除 arp 条目之前允许的条目数。
gc_thresh3 是硬限制,超过此数字的条目将被积极删除。
现在,如果我理解正确的话,如果 arp 条目的数量超出 gc_thresh1 但仍然低于 gc_thresh2,则超出的部分将按照 gc_interval 设置的间隔定期删除。
我的问题是,如果条目数超出 gc_thresh2 但低于 gc_thresh3,或者超出 gc_thresh3,那么如何删除条目?换句话说,“主动”和“积极”删除到底是什么意思?我假设这意味着删除它们的频率比 gc_interval 中定义的频率要高,但我找不到具体是多少。
答案1
每次强制对条目进行垃圾收集时,last_flush
邻居表中的字段都会更新neigh_table
。
如果满足以下条件之一,就会强制对条目进行垃圾收集:
- 表中条目数大于
gc_thresh3
- 表中条目数大于
gc_thresh2
,且自此以来的时间last_flush
大于或等于5 HZ
当请求强制对条目进行垃圾收集时,将丢弃满足以下两个条件的条目:
- 没有人提到条目
- 入场不是永久的
定期工作,neigh_periodic_work
如果条目总数大于,则尝试释放未引用的条目gc_thresh1
。
来源:Linux 内核源代码,邻居.c