我试图为Linux内核arpcaching超时configuration理智的值,但我找不到详细的解释,他们如何在任何地方工作。 即使是kernel.org文档也没有给出很好的解释,我只能find推荐的值来缓解溢出。
这里是我有的价值的一个例子:
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中定义的更频繁地被移除,但我找不到多less。
每当有强制垃圾回收条目时, last_flush字段在邻居表neigh_table更新。
如果满足以下条件之一,则强制进行条目垃圾回收:
gc_thresh3 gc_thresh2 ,且自last_flush以来的时间大于或等于5 HZ 当请求强制垃圾回收时,会放弃满足以下条件的条目:
周期性工作,如果条目总数大于gc_thresh1 , neigh_periodic_work尝试释放未引用的条目。
来源: Linux内核源码, neighbour.c