FreeBSD如何设置网络轮询以提高性能
时间:2019-11-20 08:53:59 来源:igfitidea点击:
设备轮询是一种技术,它允许操作系统定期轮询设备,而不是在需要注意时依靠设备来生成中断。这样可以提高服务器网络的响应速度和性能。特别是,轮询减少了服务中断时所发生的上下文切换的开销,并在各种任务(用户进程,软件中断,设备处理)之间提供了对CPU调度的更多控制权,从而最终减少了系统中发生活锁的机会。
在FreeBSD中如何设置网络轮询以提高性能?
在FreeBSD操作系统下如何设置网卡(NIC)轮询?
检查网卡是否支持网络轮询
设备轮询需要设备驱动程序中的支持。
FreeBSD 7.2中支持以下NIC设备驱动程序:
驱动程序名称 | 描述 |
---|---|
bge | Broadcom BCM570x/5714/5721/5722/5750/5751/5752/5789 PCI千兆以太网适配器驱动程序 |
dc | DEC/Intel 21143和克隆10/100以太网驱动程序 |
em | Intel(R)PRO/1000千兆位以太网适配器驱动程序 |
fwe | FireWire的以太网仿真驱动程序 |
fwip | 基于FireWire的IP驱动程序 |
fxp | 英特尔EtherExpress PRO/100以太网设备驱动程序 |
ixgb | 用于FreeBSD操作系统的英特尔®PRO/10GbE以太网驱动程序 |
nfe | NVIDIA nForce MCP以太网驱动程序 |
nge | 美国国家半导体PCI千兆以太网适配器驱动程序 |
re | RealTek 8139C +/8169/816xS/811xS/8101E PCI/PCIe以太网适配器驱动程序 |
rl | RealTek 8129/8139快速以太网设备驱动程序 |
sf | Adaptec AIC-6915 Starfire PCI快速以太网适配器驱动程序 |
sis | SiS 900,SiS 7016和NS DP83815/DP83816快速以太网设备驱动程序 |
ste | Sundance Technologies ST201快速以太网设备驱动程序 |
stge | Sundance/Tamarack TC9021千兆以太网适配器驱动程序 |
vge | VIA Networking Technologies VT6122 PCI千兆以太网适配器驱动程序 |
vr | VIA Technologies莱茵I/II/III以太网设备驱动程序 |
xl | 3Com Etherlink XL和Fast Etherlink XL以太网设备驱动程序 |
编译FreeBSD内核
要在驱动程序中启用轮询,请在内核配置中添加以下选项,然后重新编译内核。
缺省内核文件名是GENERIC,位于以下位置:
- AMD 64(64位)内核位于/usr/src/sys/amd64/conf /
- i386(32位)内核位于/usr/src/sys/i386/conf /
打开内核配置文件:
# cd /usr/src/sys/`uname -p`/conf # vi GENERIC
为em驱动程序添加以下内容:
options DEVICE_POLLING options HZ=1000
重新编译FreeBSD内核:
# make buildkernel KERNCONF=GENERIC # make installkernel KERNCONF=GENERIC
重启服务器并启动到新内核:
# reboot
如何启用轮询?
在运行时,使用ifconfig命令打开轮询:
# ifconfig device polling # ifconfig em0 polling
如何禁用轮询?
在运行时,使用ifconfig命令关闭轮询:
# ifconfig device -polling # ifconfig em0 -polling
使配置持久化
更新/etc/rc.conf文件,如下所示:
ifconfig_em0="inet 10.21.111.100 netmask 255.255.255.192 media 10baseT/UTP mediaopt full-duplex polling"
如何确认轮询设置?
验证设置:
# ifconfig device # ifconfig em0
查看与轮询相关的MIB:
# sysctl -a kern.polling
输出示例:
kern.polling.idlepoll_sleeping: 1 kern.polling.stalled: 0 kern.polling.suspect: 0 kern.polling.phase: 4 kern.polling.enable: 0 kern.polling.handlers: 2 kern.polling.residual_burst: 0 kern.polling.pending_polls: 0 kern.polling.lost_polls: 0 kern.polling.short_ticks: 0 kern.polling.reg_frac: 20 kern.polling.user_frac: 50 kern.polling.idle_poll: 0 kern.polling.each_burst: 5 kern.polling.burst_max: 150 kern.polling.burst: 150
如何查看中断使用率?
在两个服务器上运行top命令,并在输出中查找中断行:
# top
如何测试Linux网络吞吐量?
安装iperf,输入:
# portsnap fetch update # cd /usr/ports/benchmarks/iperf # make install clean && rehash
启用轮询后,使用iperf工具测量通信链接或网络访问的最大数据吞吐率。
在服务器上启动iperf,如下所示:
# iperf -s -B 10.21.111.100
在客户端上,执行相同的命令,如下所示:
# iperf -c 10.21.111.100 -d -t 60 -i 10
其中,
- -s:以服务器模式运行
- -B:IP绑定到IP
- -c IP:以客户端模式运行,连接到IP
- -d:同时进行双向测试
- -t 60:以60秒为单位的传输时间。
- -i 10:在定期带宽报告之间暂停10秒。
启用轮询后,当大量客户端在高负载下连接到服务器时,应该会看到良好的性能提升。