在下发Mininet的ARP缓存表表项时,出现了如下的错误信息:

SIOCSARP: No buffer space available

这是由于ARP表是缓存在内存中的,超过了系统对ARP缓存表大小的限制,需要修改如下的文件:

/proc/sys/net/ipv4/neigh/default/gc_thresh1

/proc/sys/net/ipv4/neigh/default/gc_thresh2

/proc/sys/net/ipv4/neigh/default/gc_thresh3

这3个文件的含义如下所示:

gc_thresh1

存在于ARP高速缓存中的最少层数,如果少于这个数,垃圾收集器将不会运行。缺省值是128。

gc_thresh2

保存在 ARP 高速缓存中的最多的记录软限制。垃圾收集器在开始收集前,允许记录数超过这个数字 5 秒。缺省值是 512。

gc_thresh3

保存在 ARP 高速缓存中的最多记录的硬限制,一旦高速缓存中的数目高于此,垃圾收集器将马上运行。缺省值是1024。

因此只需预估下需要的ARP缓存表表项数目,对他们进行修改就可以了。

注意,如果和我一样是在下发mininet的ARP表时遇到的问题,gc_thresh3指的是所有OVS(虚拟交换机)的ARP表表项总和。

重新配置方法如下所示(需要用echo,否则写不进去):

echo 512 > /proc/sys/net/ipv4/neigh/default/gc_thresh1

echo 2048 > /proc/sys/net/ipv4/neigh/default/gc_thresh2

echo 10240 > /proc/sys/net/ipv4/neigh/default/gc_thresh3

————————————————