学习 Linux,302(混合环境): 性能调优

测量并提升 Samba 性能

本文旨在帮助系统管理员准备 Linux Professional Institute Certification 考试 LPI-302,学习如何测量 Samba 性能以及如何让 Samba 运行得更快。

Sean A. Walberg, 高级网络工程师

Sean Walberg 是一位网络工程师,撰写了两本关于网络的图书。他的工作经历跨几个行业,其中包括医疗保健和媒体。



2012 年 2 月 28 日

关于本系列

本系列文章帮助您了解 Linux 系统管理任务。您可以使用本系列文章的资料准备 Linux Professional Institute Certification 级别 3 (LPIC-3) 考试

参见我们的 学习 Linux, 302(混合环境):LPI-302 路线图,查看本系列中各篇文章的介绍和链接。路线图目前仍在更新中,目前反映的最新内容是 LPIC-3 考试的最新目标(2010 年 11 月)。在完成每篇文章之后,我们都会将其添加到路线图中。

在本文中,将学习如何:

  • 测量 Samba 性能
  • 优化 Samba 内存使用
  • 提升 Server Message Block/Common Internet File System 环境下文件传输速度

本文帮助您准备 Linux Professional Institute (LPI) 的混合环境专业考试(302)的主题 315 下的目标 315.3。该目标的权值为 1。

先决条件

为了最有效地利用本系列中的文章,您应该具备高级 Linux 知识,并需要准备一个 Linux 系统,用它来练习本文介绍的命令。您应当对 TCP/IP 网络有很好的了解。


测量 Samba 性能

关于选修的 LPI-302 考试

与其他许多认证一样,Linux Professional Institute Certificatio (LPIC) 提供了多个不同级别,每个级别都比前一个级别要求更多知识和经验。LPI-302 考试是 LPIC 3 级中的一个可选专业考试,要求具有高级 Linux 系统管理知识。

要通过 LPIC 3 级 (LPIC-3) 认证,则必须通过两个 1 级考试(101 和 102)、两个 2 级考试(201 和 202),以及 LPIC-3 核心考试(301)。在到达这个级别之后,才能参加一些可选专业考试,比如 LPI-302。

在您能改善某些事情之前,必须先能准确测量。测量、修改、再测量,然后对比结果。对于 Samba,需要测量:

  • 空闲服务器条件下客户端的响应时间和吞吐量
  • 指定的服务器负载下客户端的响应时间和吞吐量
  • 指定负载下的服务器特点
  • 不同客户端或吞吐量下的最大服务器容量

测量响应时间能够让您知道测试环境下典型的客户希望得到什么。要取得效果,您的测试用例应近似实际的客户端负载。例如,查看重复请求同一个文件会有多快,这不同于复制一个包含大小不一文件的目录。

测量给定负载下的服务器特点能让您知道还必须增加多少空间。如果在负载下,服务器勉强跟得上,那么您就知道与测试负载相比,服务器没有多少容量了。测量生产服务器负载和推测容量时也可使用同样的技术。

最后,还可以使用所谓的 “折磨测试”,将所有内容放到服务器上,看哪里会出问题,这样能提供一些有趣的信息,但这种方法没有其他类型测试有效。如果目标是证明服务器能承受某种程度的负载,那么这种类型测试能起到作用。这些测试对于测量低层次的特性非常有效,比如服务器的最大磁盘 I/O 容量。

Samba 是一个网络服务器,所以重要的是要合理地模拟正在使用的网络。如果客户端离服务器有 50 毫秒,那么网络延迟的效果会比本地客户端更加明显。该信息会提示相应的调优重点。

设计测试

您可以购买一个相当昂贵的设备,模拟客户端的流量,获取精确的性能测量值。如果您正在发布基准或开发服务器硬件,这样的设备可能是一个不错的选择。但如果您只是要调优自己的服务器,并且面临着一般的时间和内存限制,那么您可能不需要这样昂贵的设备,因为您还要学习如何使用它。

例如,第一个测试通过使用 Samba 命令行客户端下载大量文件获取随机读取性能。关注的重点是 “这个目录下载的速度有多快?”

和其他优秀的 UNIX® 工具一样,smbclient 工具能从标准输入读取指令列表。以下片段显示了下载目录内容的一组命令:

prompt
recurse
mget smbtest

prompt 命令会阻止客户端要求确认下载,recurse 表示您想要在下载多个文件时向下遍历目录。最后,mget smbtest 指示客户端开始下载 smbtest 目录。在目录中填入几百兆的测试文件,就可以测试性能了。

要运行测试,使用 smbclient 连接到共享,并将标准输入重定向到您的文件。清单 1 显示了其做法。

清单 1. 运行测试
$ time smbclient '\\192.168.1.1\test' password < instructions 
Domain=[BOB] OS=[Unix] Server=[Samba 3.5.8-75.fc13]
getting file \smbtest\file2 of size 524288000 as file2 (5323.2 kb/s) (average 5323.2 kb/s)
getting file \smbtest\file1 of size 139460608 as file1 (5275.3 kb/s) (average 5313.0 kb/s)

real	2m2.289s
user	0m0.509s
sys	0m4.580s

清单 1 的命令从 time 命令开始,它计算其余参数中设置的命令运行要花费多长时间。命令本身是 smbclient,它的参数是共享的名称和用户的密码。您也可以添加典型的参数,如果环境需要的话,用 -U 来传递替代用户名。最后,< instructionssmbclient 的标准输入重定向到名为 instructions 的文件,它包含了第一段代码的指令。此命令的结果是定时批量复制几个文件。

构建您自己的提要

您可以构建一个自定义 RSS、Atom 或 HTML 提要,以便在我们添加新文章或更新内容时收到通知。请访问 developerWorks RSS 提要。选择 Linux 作为专区,选择 Articles 作为类型,输入 Linux Professional Institute 作为关键字。然后选择您想要的提要类型。

命令的结果是转换文件列表,还有每个文件的平均转换率。time 的输出被添加到结尾,显示复制 664MB 文件花费了 2 分钟 2.289 秒。这是基准。如果进行修改,而测试时间大于 2 分 2 秒,那么此项修改就比原先更糟。

如果只是测试 Samba 参数并忽略本地磁盘和缓存的影响,那么可以多运行几次并获取最后一次测量值。这么做可以确保操作系统缓存尽可能多的内容并降低磁盘访问。在测试更改时,确保服务器上有同样大小的空闲内存;否则缓存数据的大小差异可能影响实验结果。

查看 Samba 的状态

查看服务器的 CPU、内存和网络信息能让您很好地了解服务器本身的运行状况,但无法提供应用程序运行的环境信息。Samba 可提供一个很有用的工具,名为 smbstatus,它可显示当前连接和文件活动;而且有助于性能调优和故障排除。

清单 2 显示了 smbstatus 命令正在执行。

清单 2. smbstatus 命令
$ smbstatus
lp_load_ex: refreshing parameters
Initialising global parameters
params.c:pm_process() - Processing configuration file "/etc/samba/smb.conf"
Processing section "[global]"
Processing section "[homes]"
Processing section "[printers]"
Processing section "[extdrive]"

Samba version 3.5.8-75.fc13
PID     Username      Group         Machine                        
-------------------------------------------------------------------
17456     fred         fred       macbookpro-d0cd (::ffff:192.168.1.167)

Service      pid     machine       Connected at
-------------------------------------------------------
fred         17456   macbookpro-d0cd  Mon Jul 18 07:36:46 2011
extdrive     17456   macbookpro-d0cd  Mon Jul 18 07:36:46 2011

Locked files:
Pid    Uid   DenyMode   Access      R/W        Oplock      SharePath   Name   Time
----------------------------------------------------------------------------------
17456  505   DENY_NONE  0x100081    RDONLY     NONE        /home/fred   .  
17456  505   DENY_NONE  0x100081    RDONLY     NONE        /home/fred   Documents

清单 2 显示了 Samba 服务器的当前活动。用户 fred 已连接上,并加载了两个共享(fredextdrive)。有两个锁住的目录。


网络调优

Samba 是一个守护进程,它主要是发送和接受网络中的数据包。有几个参数会影响包如何发送以及 Samba 如何与底层操作系统交互;这些参数可能会明显影响性能。

基本选项

许多守护进程可为每个用户提供最佳的服务水平,而且不歧视客户端。如果服务超载,每个人都得到同样糟糕的服务。与电话网络进行对比:如果出现拥堵,那么不允许再拨打电话,但现有的电话能继续进行,就好像什么也没发生一样。如果人为地限制 Samba 中的某些选项,就可以防止出现资源匮乏的情况。

max connections 参数限制了对某个特定 Samba 服务器的连接数。每个连接都会占用内存和 CPU 资源,因此太多的连接会使服务器超载。默认情况下,支持无限制的连接。如果需要限制一台繁忙的服务器,那么可以使用 max connections 硬性限制。

max smbd processes 参数控制可运行的最大进程数。该参数与 max connections 类似,但控制的是连接生成的进程数。

使用 log level 登录的次数越多,就有越多的服务器资源用来将日志写到磁盘上。将该值保持为 1 或 2 可以限制日志写入磁盘的数量,并节约更多的资源来提供给客户端。

设置套接字选项

当应用程序要求操作系统开放网络连接时,应用程序还可以使用 socket options 要求操作系统以某种方式对待数据包。套接字选项可以启用或禁用网络性能调整,设置数据包的特定的服务质量位或者设置数据包的内核层选项。

socket options 命令可以控制数据包上的 type of service (TOS)。TOS 可以告诉沿途的路由器如何对待流量。如果服务器配置为服从这些位,那么流量会按照应用程序要求的方式处理。IPTOS_LOWDELAY 关键字最适合低延迟的网络,比如 LAN,而 IPTOS_THROUGHPUT 适合高延迟的 WAN 链接。您的网络配置可能不同,因此如果使用同一选项,可能会造成相反的效果。

TCP_NODELAY 选项会禁用 Nagle 算法(参见 参考资料 中的链接了解更多信息),它更适合活跃的网络,可以发送更多的数据包。

如有您在网络中有防火墙或其他保持状态的设备,您可能会对 SO_KEEPALIVE 选项感兴趣,它会打开 TCP 持久链接。这些定期的数据包保持连接打开,并保持防火墙里的状态新鲜。否则,防火墙将会丢弃数据包,并花费一些时间让客户端认识到它要重新连接到服务器。


调优之外

虽然摆弄不同的设置,并试着获取最优的配置会很有趣,但 Samba 配置之外的一些内容可能会妨碍性能。每次服务器执行一些从磁盘读数据并发送到客户端或者是接收进入的网络流量并写到磁盘上以外的任务时,都会使操作耗费更长的时间。

以太网错误

如果数据包在传输中丢失,那么内核会注意到包已丢失,并请求重新传输。这样的过程会使一次快速通信变得很慢,尤其当双方之间具有高延迟时。数据包丢失的常见原因就是交换机与服务器之间的不匹配设置。或者是自动协商失败,不符合正确设置;或者是一方是静态设置,另一方是自动协商。这种差异会导致双方的错误。您可以用 netstat 命令来查找这些错误:

# netstat -d -i 2
Kernel Interface table
Iface       MTU Met    RX-OK RX-ERR RX-DRP RX-OVR    TX-OK TX-ERR TX-DRP TX-OVR Flg
eth1       1500   0  5258404      0      0      0  3024340      0      0      0 BMRU
eth1       1500   0  5258409      0      0      0  3024341      0      0      0 BMRU
eth1       1500   0  5258411      0      0      0  3024342      0      0      0 BMRU

这段代码显示多功能的 netstat 命令通过 -d -i 2 参数每 2 秒钟查找一次接口错误。每隔 2 秒钟,就显示可用接口的状态。在上述示例中,RX-OKTX-OK 列显示数据包流入和流出。两个方向上的错误、丢弃和溢出都是 0,这表示没有数据包丢失。

如果看到错误,确定 mii-toolmii-diag 使用了什么样的速率/双工。清单 3 显示了如何检查网络设置。

清单 3. 验证网络设置
# mii-tool 
eth1: negotiated 100baseTx-FD, link ok
# mii-diag eth1
Basic registers of MII PHY #24:  3000 782d 0040 6177 05e1 41e1 0003 0000.
 The autonegotiated capability is 01e0.
The autonegotiated media type is 100baseTx-FD.
 Basic mode control register 0x3000: Auto-negotiation enabled.
 You have link beat, and everything is working OK.
 Your link partner advertised 41e1: 100baseTx-FD 100baseTx 10baseT-FD 10baseT.
   End of basic transceiver information.

清单 3 从 mii-tool 命令开始,对活动接口进行简短总结。结果显示接口协商为 100/Full。mii-diag 显示了详细信息,而且如果您需要上报问题,它更适合发送给网络团队。mii-tool 命令可用来修复速率和双工,尽管实际环境中最好使用自动协商链接。

维护 TDB 文件

在 “学习 Linux,302(混合环境):Trivial Database 文件” 中,您已经了解了 Samba 用来保持状态的简单数据库文件 (trivial database file, TDB)。如果这些数据库出了问题,那么您的服务器将会执行更多任务,比如不必要的磁盘搜索或是无法缓存远程服务的信息。幸运的是,您可以检查 TDB 文件破损情况,如果出现问题,便可及时修复。您可以在关闭 Samba 后删除临时 TDB 文件,它们会在启动时重新生成。对于其他情况,一定要执行备份,并使用 tdbbackup -v 验证文件。

查看客户端

有时,客户端也会造成性能低下。客户端可能有双工问题,可能有恶意软件,或有其他问题发生。在测试中使用一致的客户端能帮助您消除服务器作为潜在的执行缓慢的来源。


结束语

这是 LPIC 考试 302 系列的最后一篇文章。请复习您的笔记,然后参加考试!祝您好运!

参考资料

学习

获得产品和技术

讨论

  • 加入 developerWorks 中文社区,developerWorks 社区是一个面向全球 IT 专业人员,可以提供博客、书签、wiki、群组、联系、共享和协作等社区功能的专业社交网络社区。

条评论

developerWorks: 登录

标有星(*)号的字段是必填字段。


需要一个 IBM ID?
忘记 IBM ID?


忘记密码?
更改您的密码

单击提交则表示您同意developerWorks 的条款和条件。 查看条款和条件

 


在您首次登录 developerWorks 时,会为您创建一份个人概要。您的个人概要中的信息(您的姓名、国家/地区,以及公司名称)是公开显示的,而且会随着您发布的任何内容一起显示,除非您选择隐藏您的公司名称。您可以随时更新您的 IBM 帐户。

所有提交的信息确保安全。

选择您的昵称



当您初次登录到 developerWorks 时,将会为您创建一份概要信息,您需要指定一个昵称。您的昵称将和您在 developerWorks 发布的内容显示在一起。

昵称长度在 3 至 31 个字符之间。 您的昵称在 developerWorks 社区中必须是唯一的,并且出于隐私保护的原因,不能是您的电子邮件地址。

标有星(*)号的字段是必填字段。

(昵称长度在 3 至 31 个字符之间)

单击提交则表示您同意developerWorks 的条款和条件。 查看条款和条件.

 


所有提交的信息确保安全。


static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=10
Zone=Linux
ArticleID=796078
ArticleTitle=学习 Linux,302(混合环境): 性能调优
publish-date=02282012