Chinaunix首页 | 论坛 | 博客
  • 博客访问: 621729
  • 博文数量: 43
  • 博客积分: 4250
  • 博客等级: 上校
  • 技术积分: 486
  • 用 户 组: 普通用户
  • 注册时间: 2006-05-04 04:09
文章分类
文章存档

2009年(2)

2008年(5)

2007年(29)

2006年(7)

我的朋友

分类: LINUX

2007-05-21 22:55:57

1.现在的pc硬件情况
1)cpu相当快
2GHz CPU: 一个时钟周期0.5纳秒
L1/L2 缓存 2~3个时钟周期。
2)不在L1/L2缓存下的所有事情就像磁盘访问一样(指在内存中工作).
在Opteron(DDR-333) 40~180个时钟周期.
在Xeon(DDR-333) 250~460个时钟周期.
3)I/O读取
在NIC的寄存器读在3600个时钟周期左右。发生在同步操作,锁状态。
2.硬件选取
1)cpu
cache越多越好。共享缓存(多核)更好。
2)是否选择smp
smp增加了代码复杂性。在真正的smp中缓存中存在碰撞(ping-pong)。
选择主要考虑工作量和接口卡数。对于IPsec,tc,复杂路由等应用有帮助。对于只做nat帮助不大。
3)内存
越快越好,使用最快的高速芯片组。
amd64(Opteron,..)有每cpu的内存控制。访问内存不浪费系统总线带宽。
intel 传统的共享系统总线架构,内存没有每cpu控制。
4)总线架构
桥接越少越好。host bridge, PCI-X/PXE bridge + NIC chipset就够了.
检查总线速度,真实中断(PCI,PCI-X)比消息报中断(MSI)有更小的延迟。
一些板子使用PCIe芯片组,加入了PCIe-to-PCI-X桥接.
5)NIC选择
避免多余的桥接(如双口,四口),PCI-X 64位,更快的时钟频率(如133MHZ)
nic驱动有很多可选特色(如TS0/GS0,NAPI等),有好的支持,主流的厂商。
6)硬盘
内核网络堆栈通常100%驻留在内存中,一般来说不太重要,只有对于SMTP等涉及存储的服务才会考虑。

3.关于网络的优化。
1)避免多个NIC共享同一irq行,依赖于主板/芯片组.
cat /proc/interrupts可查看.
在smp系统中,中断可以绑定到每个cpu上.使用irq affinity保证从一个接口的所有的数据包在同一个cpu上处理(缓存位置一致)
2)32位还是64位内核.
64位内核有更大的内存地址空间,但是增加了数据结构(所有指针从4换为8字节),降低了缓存效率。在包转发应用中,近10%性能降低。

3)防火墙
组织规则设置用树状结构以线性要好,conntrack注意hashsize和ip_conntrack_max,使用ulogd-1.x或2.x替换syslog.
4)本地sockets
SO_SNDBUF/SO_RCVBUF应使用.在2.6.x中,可以通过/proc/sys/net/ipv4/tcp_[rw]mem来设置。
在长肥管道中,增加/proc/sys/net/ipv/tcp_adv_win_scale的值.

5)核心网络堆栈
关闭rp_filter,它增加了每数据包的路由查询。
 
阅读(3365) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~