第一部分:loader.conf
accf_data_load="YES"
说明:accf的作用是先缓冲到来的请求,等到完整的请求包到来后一起提交,这样就省掉几次CPU上下文切换,可以明显地降低CPU处理请求的时间,从而降低load值。这个值对于ssl和spdy效果比较明显,对于nginx,可以添加下面一行:
127.0.0.1:443 ssl spdy accept_filter=dataready;
accf_http_load="YES"
说明:在一个完整的http请求完成前,这一个是先缓存到来的数据。在完整的http/1.0或http/1.1的HEAD或GET请求到达前,内核先将这部分数据缓存,并且阻止应用程序从accept中获取连接句柄。对于不是这两种的请求,kernel会直接放行。
对于nginx,需要在listen后加上一句才能生效:
listen 127.0.0.1:80 accept_filter=httpready;
#accf_dns_load="YES"
说明:对于DNS先缓存,能明显提高unbound的性能
ahci_load="YES"
这个就不用解释了吧,小文件时就能看出跟ide的区别
aio_load="YES"
说明:异步IO,对于nginx的性能还是很有帮助的,可以不对文件加锁,node.js的终极武器。
cc_htcp_load="YES"
说明:H-TCP拥塞控制算法,是一个针对高速、高延迟网络设计的一种算法,可以提高广域网上性能,在局域网中效果不大。有了这个内核模块后,可以在sysctl中对tcp设置下面的参数:
net.inet.tcp.cc.algorithm=htcp
net.inet.tcp.cc.htcp.adaptive_backoff=1
net.inet.tcp.cc.htcp.rtt_scaling=1
net.inet.tcp.hostcache.cachelimit="0"
说明:hostcache的作用是对于已经建立的连接,把协商的连接参数先保存下来,比如:TTL值,SSTRESH以及VARTTL,在下次连接的时候,会直接使用hostcache里的参数,不需要再进行协商和学习,从而提高了性能。这在大多数时候是有效的,但是对于某些情况,这反倒是个累赘,有时候关闭会更有效。比如对于无线连接,它的连接一般是不稳定的,一直用同一个参数,会导致问题,如果最开始学习到的是最差的时候,就会拖累后面的性能;反过来,如果学习的时候是最好的时候,那后面再按照这个值发送,会导致对方收不到数据。
关闭这个参数,会把net.inet.tcp.hostcache.expire一起禁用掉。
可以用下面的命令查看hostcache表:
% sysctl net.inet.tcp.hostcache.list
net.inet.tcp.hostcache.list:
IP address MTU SSTRESH RTT RTTVAR BANDWIDTH CWND SENDPIPE RECVPIPE HITS UPD EXP
220.249.90.232 0 3000 57ms 1ms 0 5840 0 0 0 1 600
171.208.28.206 0 22266 88ms 21ms 0 15696 0 0 116 37 600
58.61.152.98 0 7439 71ms 16ms 0 14454 0 0 231894 82 3600
114.235.82.177 0 2984 53ms 14ms 0 5832 0 0 0 1 1200
相关的内核变量是:
net.inet.tcp.hostcache.expire=3900
第二部分:sysctlc.conf
net.inet.tcp.tso=0 # (default 1)
说明:tso虽然可以明显减轻CPU的负担,但是如果你使用了防火墙,比如ipfw和pf,则会带来一些问题,如果你遇到一些莫名奇妙的网络故障,比如某些情况下,某些数据包会发不出去或收不到,那么你可以禁用tso试试,禁用tso对于web服务器来说,不会明显加重CPU负担。
net.inet.tcp.nolocaltimewait=1 # (default 0)
说明:对于本机的连接,不要创建一个socket或者压缩tcpw,这对于本机的应用有好处,比如数据库和web,以及php-fpm都在一台机器的情况下,会有所帮助。