RH442-11 网络调优之一

 网络调优

一、概述

1.   重要的网络调优

l  应用队列的技术来优化带宽

l  调整TCP和UDP的带宽

2.   简化传输模型

l  数据包的传输类似于写文件与发文件

l  数据以"file"的形式写入到buffer中,内核在将这些数据封装在PDU(protocol data units)中,PDU在将数据转移到设备的传输页面中(队列)。

l  网卡驱动程序将PDU拷贝到网卡中,网卡增加中断,传输开始。

l  buffer大小设置成多少较为合适?传输队列(transmit queue)的大小设置为大少较为合适?这些参数取决与传输的数据量和带宽的延时。

3.   简化接受模型

l  接受数据包,网卡接受架构(frame),同时使用DMA(直接内存访问,DMA是操作系统分配给相关硬件的特定内存,用于接受传输信息)将信息拷贝到receive buffer。

l  网卡增加CUP的中断。内核会处理中断,并且调用softirq(中断分为硬中断和软中断,其中硬中断与硬件有关,而软中断与CUPsize有关)

l  softirq负责将数据包转移到IP和路由层

 

二、Kernel socket buffers

1.   Kernel buffers

l  UDP:core的读写buffers

l  TCP:core的读写buffers+TCP的读写buffers

l  碎片的buffer

l  DMA for nic receive

2.   内核会自动根据流量来调buffers

l  buffers要求是free memory,非页表里的内存。

l  buffers属于zone_normal的一部分,会增加zone_normal的压力

l  接收流量控制是基于接收buffer的大小来决定的

3.   计算buffer size的大小

l  buffer size的大小要根据BDP(带宽延时的乘积)来确定。buffers size是指一次网络传输的数据量。

l  socket buffer = BDP / #sockets(接口数)

Lpipe (BDP)= Bandwidth * DelayRtt = A * W

例:带宽:100MiB(比特位),计算时要乘以 1/8(兆),最后还要乘以2的20次方(字节)延时:3s(3000MS),延时量DelayRtt是使用ping命令所测试出的结果

BDP = 100MiB/s x 3s x 1/8 x 220Bytes= 39321600 Bytes

socket buffer = BDP / #sockets=39321600 Bytes/1=39321600 Bytes

 

[root@station9 ~]# ping 192.168.32.221

PING 192.168.32.221 (192.168.32.221) 56(84) bytes of data.

64 bytes from 192.168.32.221: icmp_seq=1 ttl=64 time=0.228 ms

64 bytes from 192.168.32.221: icmp_seq=2 ttl=64 time=0.225 ms

--- 192.168.32.221 ping statistics ---

2 packets transmitted, 2 received, 0% packet loss, time 1000ms

rtt min/avg/max/mdev = 0.225/0.226/0.228/0.015 ms

#DelayRtt取avg值,0.226ms

 

4.   All connections share pipe

l  socket buffer=BDP / #sockets  #如果有3网口,则#sockets=3buffers size是指一次网络传输的数据量。如果距离越远(延时越大),则一次网络传输的数据量也应该相应增大,以优化网络传输。

l  并发数越大则buffers size 应该越小,并发数越小buffers size 应该越大

Max connections =>min buffer  Lmax=Lpipe/Min connections

Min connections =>max buffer  Lmin=Lpipe/Max connections

 

三、Tuning core buffer size

调整core buffer size,该buffer针对与非TCP的连接,如UDP

1.   update  /etc/sysctl.conf for  BDP/#connections

l  input/reader in bytes:

[root@station9 ~]# sysctl -a|grep net.core|grep rmem

net.core.rmem_default = 110592    #默认发送的buffer大小

 

net.core.rmem_max = 131071       #最大接收buffer大小=BDP

 

l  output/writer in bytes

[root@station9 ~]# sysctl -a|grep net.core|grep wmem

net.core.wmem_default = 110592     #默认发送的buffer大小

net.core.wmem_max = 131071        #最大接收buffer大小=BDP

 

四、调整TCP buffers size的大小

1.   Tuning core buffer size (同上)

2.   调整TCP buffers size的大小

[root@station9 ~]# sysctl -a|grep tcp|grep --color mem

net.ipv4.tcp_rmem = 4096    87380   4194304  

#reader buffers 发送(bytes

net.ipv4.tcp_wmem = 4096   16384   4194304  

#write buffers  接受(bytes

net.ipv4.tcp_mem = 98304    131072  196608  

#overall TCP memory整体的页面数(pages

#以上三个参数都有相应的最小、默认、最大值。最大值是默认值的1.5倍。kernel将会自动调整buffers size的大小,但是调整的范围必须人为配置。

3.   实例:

网络环境1.5M带宽,500ms延时,现要求调最小和默认的值为bdp大小,最大不能超过bdp1.5

BDP1.5*0.5/8*1024*1024=98304 bytes

则设置应该如下(注意单位):

net.ipv4.tcp_rmem = 98304           98304   147456(=98304*1.5 ) 

net.ipv4.tcp_wmem = 98304           98304   147456  

net.ipv4.tcp_mem = 24(=98304/4096  24      36=24*1.5

     #测试实验时需安装模拟网卡的程序包,rpm -ivh bdp-lab-0.1-01.noarch.rpm

 

五、调整DMA buffer size的大小

1.   要求NIC有可调DMA buffer功能。DMA:直接内存访问,内存本来是通过内核调用的,现在直接通过硬件调用。系统会分配16MB的内存给DMA使用。

l  查看DMA的信息modinfo –p e1000

l  更新/etc/modprobe.conf

    alias eth0 e1000

options eth0 RxDescriptors=1024 TxDescriptors=512   #设置发送和接收buffer尺寸

# etc/modprobe.conf,该文件用于调整设备的参数。当计算机加载模块时,系统会自动加载所需的配置文件。但从企业版6开始,系统已经没有/etc/modprobe.conf文件。

2.   For TCP connetions

   increase socket buffer size by 25%

 

3.   mod模块的参数实例,如调st(磁带机)的DMA buffer大小

l  查询st详细情况

[root@station2 ~]# modinfo st

filename:       /lib/modules/2.6.18-194.el5/kernel/drivers/scsi/st.ko

alias:        char-major-9-*

license:      GPL

description:  SCSI tape (st) driver

author:     Kai Makisara

srcversion:  AA839FAA66A7758BC7A5C9D

depends:   scsi_mod

vermagic:   2.6.18-194.el5 SMP mod_unload 686 REGPARM 4KSTACKS gcc-4.1

parm:  buffer_kbs:Default driver buffer size for fixed block mode (KB; 32) (int)

parm:  max_sg_segs:Maximum number of scatter/gather segments to use (256) (int)

parm:  try_direct_io:Try direct I/O between user buffer and tape drive (1) (int)

parm:  try_rdio:Try direct read i/o when possible (int)

parm:  try_wdio:Try direct write i/o when possible (int)

module_sig:     883f3504ba037561e1fa4939f6a62931121de10a0848d4d981dbbdbae7c66db42146a66fc62b878d0a0b6e060ea3e8bf9288fc0f8b72f899139dd98acc

 

[root@station2 ~]# cat /sys/bus/scsi/drivers/st/fixed_buffer_size

32768   #stbuffer大小为:32Kbytes

 

l  加载st模块,修改stDMA buffer大小为128kbytes

[root@station2 ~]# vim /etc/modprobe.conf

alias scsi_hostadapter ata_piix

alias scsi_hostadapter1 virtio_blk

alias eth0 virtio_net

options st buffer_kbs=128

[root@station2 ~]#modprobe -r st    #卸载st模块

[root@station2 ~]#modprobe st      #加载st模块

[root@station2 ~]# cat /sys/bus/scsi/drivers/st/fixed_buffer_size

131072     #stDMA buffer大小已经被调整为:128Kbytes

#下次开机自动生效,需配置/etc/rc.d/rc.local文件,其中添加modprobe st


本文转自netsword 51CTO博客,原文链接:http://blog.51cto.com/netsword/658285


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值