Linux系统网络性能实例分析( 四 )

  • smblog=1 。 Samba日志级别从 2改为 1 , 以减少对 Samba日志文件的磁盘 I/O操作 。 级别1足以将关键错误记入日志中 。
  • SendFile/Zerocopy 。该补丁使得 Samba对于客户读请求使用 SendFile机制 。 该补丁与 Linux的 Zerocopy技术(最早出现于 2.4.4版本中)结合使用 , 可以消除两种高开销的内存复制操作 。
  • O(1)调度器 。这个小改进有利于未来的其他性能改进 。O(1)调度器是能够改进对称多处理器性能的多队列调度器 。 这是 Linux 2.5和 2.6内核中的默认调度器 。
  • 均等亲合的 IRQ(evenly affined IRQ) 。4个网络适配器中每个适配器的中断都由唯一的处理器来处理 。 在 P4体系结构中 , SUSE SLES 8的 IRQ至 CPU映射机制默认为轮询分配(destination= irq_num% num_cpus) 。 在示例中 , 网络适配器的所有 IRQ都被转至 CPU0 。这对于性能非常有益 ,因为该代码上的 cache暖和性已获得改进 ,但随着更多NIC被添加到系统中 ,单个 CPU可能难以处理全部网络负荷 。 理想的解决方案是均匀地亲合这些 IRQ ,使得每个处理器都处理来自一个 NIC的中断 。 这种机制与进程亲合性结合使用 , 应该能够将指派给某个特定 NIC上的进程也指派到一个 CPU上 , 以便获取最高性能 。
  • 进程亲合性 。该技术确保对于每个被处理的网络中断 , 相应的 smbd进程都在同一个 CPU上被调度以便进一步改善cache暖和性 。
  • 这主要是一种基准测试技术 , 并不广泛用于其他场合 。 如果可以在逻辑上将工作负荷均匀划分到多个 CPU上 ,这将是一个很大的性能收益 。 现实中的大多数工作负荷都是动态的 , 因此无法预先确定亲合性 。
    • /proc/sys/net/hl=763 。增加网络协议栈代码中拥有的缓冲区数量 , 从而使网络栈不需调用内存系统来从中获取或释放缓冲区 。Linux 2.6内核中未提供这个调优特性 。
    • 实施大小写敏感特性 。如果未实施这个特性 ,Samba在打开一个文件前可能需要搜索该文件的不同版本名称 ,因为同一个文件可以拥有多个文件名组合 。 启动大小写敏感特性就可以消除这些猜测 。
    • 自旋锁(spinlock) 。Samba的数据库中使用了高开销的 fcntl()调用 。 可以使用自旋锁来代替这个调用 。 利用在posix_lock_file()中发现的大内核锁(Big Kernel Lock)可以减少大内核锁的竞争和等待时间 。 要使用该特性 ,可以通过--use-spin-locks来配置Samba , 如下例所示 。 Smbd --use-spin-locks -p-O-s
    • dcache 读复制更新(read copy update) 。通过使用读复制更新技术 , 一种新的dlookup()实现可以减少目录项查询次数 。 读复制更新是 Linux中用作互斥机制的一种两阶段更新方法 ,可以避免自旋等待锁的开销 。 更多信息参见 Linux可伸缩性研究计划(Linux Scalability Effort)中关于锁(locking)技术方面的工作 。
    2、 Netperf3(千兆位以太网调优实例分析) 价格日益降低的千兆位以太网卡正快速取代百兆位以太网卡 。 当前 , 系统制造商在主板上提供了千兆位以太网支持 ,系统供应商和集成商也选择使用千兆位以太网卡和交换机来连接磁盘服务器、计算机中心以及部门骨干网 。 下面讨论 Linux操作系统中的千兆位网络性能 , 以及千兆位以太网调优对网络性能的改进 。千兆位以太网卡(Intel Gigabit Ethernet和 Acenic Gigabit Ethernet)提供了几个有利于处理高吞吐率的额外特性 。 这些特性包括对巨型帧(MTU)长度、中断延迟(interrupt-delay)以及TX/RX描述符的支持: