在网络发送接受数据时,设备驱动程序提供了发送接受队列参数限制,这个队列包含了软件队列和硬件队列,根据驱动程序和网卡的不同有所不同,有些驱动程序仅有硬件队列,有些既有硬件队列,也有软件队列。通常,设备驱动程序会将发送包直接放入硬件发送队列中去,交由硬件处理,但是,往往系统...
显示全部在网络发送接受数据时,设备驱动程序提供了发送接受队列参数限制,这个队列包含了软件队列和硬件队列,根据驱动程序和网卡的不同有所不同,有些驱动程序仅有硬件队列,有些既有硬件队列,也有软件队列。通常,设备驱动程序会将发送包直接放入硬件发送队列中去,交由硬件处理,但是,往往系统CPU处理的速度要比网卡硬件的速度要快,这样,硬件队列容易溢出,此时,系统会提供一个软件队列以存放数据,如果软件队列也满了,该包将被丢弃,并纪录下该错误,上层协议会重新发该包,这样,系统性能将受一定影响。所以,在网络传输量比较大的时候,如果发现了队列溢出错误发生,需对其大小做一定修改。
用lsattr命令可以查看网卡的队列限制
# lsattr -El ent0
busio 0x7fff000 Bus I/O address False
busintr 2 Bus interrupt level False
intr_priority 3 Interrupt priority False
tx_que_size 64 TRANSMIT queue size True
rx_que_size 32 RECEIVE queue size True
full_duplex no Full duplex True
use_alt_addr no Enable ALTERNATE ETHERNET address True
alt_addr 0x000000000000 ALTERNATE ETHERNET address True
其中tx_que_size即为网卡发送队列限制
rx_que_size为网卡接受队列限制
可通过chdev -l ent0 -a tx_que_size=new_value来修改
解决办法:
# ifconfig en0 detach
# chdev -l ent0 -a tx_que_size=128
# ifconfig en0 up
#netstat -v ent0
收起