删除并重新下载内核源码
- 删除自带的内核源码
rm -rf /usr/src
- 下载内核源码
wget http://mirrors.ustc.edu.cn/freebsd/releases/amd64/12.0-RELEASE/src.txz
- 解压内核源码
tar xvzfp src.txz -C /
将您的内核配置文件直接保存在 /usr/src
可能不是一个好主意。 如果您遇到问题, 删掉 /usr/src
并重新开始很可能是一个诱人的选择。 一旦开始做这件事, 您可能几秒钟之后才会意识到您同时会删除定制的内核配置文件。 另外, 也不要直接编辑 GENERIC
, 因为下次更新时它会被覆盖, 而您的修改也就随之丢失了。
建议把内核配置文件放到别的地方, 然后再到 i386
目录中创建一个指向它的符号链接。
例如:
#
cd /usr/src/sys/amd64/conf
#
mkdir /root/kernels
#
cp GENERIC /root/kernels/QMUN
#
ln -s /root/kernels/QMUN
修改内核参数
进入对应内核的目录,虚拟机是 AMD64
# cd /usr/src/sys/amd64/conf
修改内核参数,
# vi qmun
ident QMUN
#找到ident 这一行,后面的值改成这个),然后加入下面的参数
option VIMAGE
#内核不支持虚拟网络栈,加入上面这一行可以便系统支持
options DEVICE_POLLING
options HZ=2000
FreeBSD在做IPsec-Gateway或作路由的情况下,当处理的数据包到达一定数量级(>15000包/每秒)时,系统的负载会很高,表现是输入任何命令响应很慢。用TOP显示CPU的状态时,大量时间被中断(interrupt),如下:
CPU states: 0.0% user, 0.0% nice, 1.0% system, 98.8% interrupt, 0.2% idle
原因是每个数据包过来,网卡都会请求CPU中断,当包的数量过高时,CPU很难正常处理其它事情。
这时候可以利用网卡的polling模式解决这个问题,polling模式就是让cpu定期去取网卡内存中的数据包。虽然平时看上去这种方法效率低
,但在网卡处理的包数量很高时能提高CPU的处理效率。
支持polling的模式的网卡有:dc(4), em(4), fwe(4), fxp(4), nge(4), rl(4), sis(4), ste(4)
- 进入
/usr/src
目录:#
cd /usr/src
- 编译内核:
#
make buildkernel KERNCONF=QMUN
- 安装新内核:
#
make installkernel KERNCONF=QMUN