Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1302391
  • 博文数量: 632
  • 博客积分: 2778
  • 博客等级: 大尉
  • 技术积分: 3387
  • 用 户 组: 普通用户
  • 注册时间: 2012-05-31 09:09
个人简介

123

文章分类

全部博文(632)

文章存档

2014年(36)

2013年(33)

2012年(563)

分类:

2012-10-09 08:38:15

按照传统,Linux不同的发行版本和不同的内核对各项参数及设置均做了改动,从而使得系统能够获得更好的性能。下边将分四部分介绍在Red Hat Enterprise Linux AS和SUSE LINUX Enterprise Server系统下,如何用以下几种技巧进行性能的优化:
1、Disabling daemons (关闭 daemons)
2、Shutting down the GUI (关闭GUI)
3、Changing kernel parameters (改变内核参数)
4、Kernel parameters (内核参数)
5、Tuning the processor subsystem(处理器子系统调优)
6、Tuning the memory subsystem (内存子系统调优)
7、Tuning the file system(文件系统子系统调优)
8、Tuning the network subsystem(网络子系统调优)

7 文件系统的调优
总体而言,所有数据都要从磁盘获取并都要保存到磁盘。磁盘访问速度通常以毫秒来计算,比其它组件要慢上千倍(如内存、PCI操作是以纳秒或者微秒来计算的)。Linux文件系统定义了数据存储和访问的方式。
Linux可用的文件系统有多种,它们的性能和可扩展性各不相同。除了保存和管理磁盘数据,文件系统还负责保证数据的完整性。新版的Linux缺省安装已经包括日志文件系统(journaling file systems),日志文件系统可防止系统崩溃时导致的数据不一致问题。对文件系统元数据(metadata)的更改都被保存在一份单独的日志里,当发生系统崩溃时可以根据日志正确地恢复数据。除此之外,日志使系统重新启动时不必进行文件系统的检查,从而缩短了恢复时间。
同其他方面的计算一样,性能和完整性是相互平衡的。然而,因Linux服务器多用于企业环境及数据中心,因此要求具备更高的可用性。
这里,我们将介绍Red Hat Enterprise Linux AS和SUSE LINUX Enterprise Server的文件系统及其性能调优。

7.1 安装Linux前,硬件方面的考虑
当前Linux的发行版本对CPU、硬盘和内存方面均有明确的安装要求。然而,对于如何设置磁盘子系统的说明远远不够。由于Linux服务器被广泛的应用于各种环境,数据中心的服务器整合,我们首先要回答的问题就是:“该服务器的功能是什么?”
磁盘子系统可能是整个服务器系统性能的主要方面。了解服务器的功能是判断I/O子系统对性能产生多大影响的关键。
下面几种服务器的磁盘I/O性能是非常重要的:
_ 文件和打印服务器要求在用户和磁盘子系统之间快速地移动数据。因文件服务器的功能是向客户端发送数据,所以要快速读取所有的数据。
_ 数据库服务器的最终目标是从磁盘上的数据仓库里查找和获取数据。即便有足够的内存,多数数据库服务器依然需要大量的磁盘I/O将数据读入内存和更新磁盘数据。

下面几种服务器的磁盘I/O性能不是最重要的:
_ 邮件服务器用于电子邮件的存储和转发,通常产生较大的通信量。对这类服务器来讲,网络性能更为重要。
_ Web服务器用于发布静态和动态的Web页面,网络和内存子系统的性能非常重要。

磁盘技术的选择
除了理解服务器功能,还要了解磁盘容量的部署。下面是当前几种可选的磁盘技术及其容量、特点:
技术 花费 功能 容量及其限制
EIDE 最低 直连、本地存储
低端服务器,如x305
每控制器最多2块盘
SCSI 直连、本地存储
中、高端服务器,
如x346、x365
已经使用了10年的标准;
对数据线长度、传输带宽和磁盘数量均有限制
单个通道的并发访问的数量也有所限制,限制了群集功能
SATA 中端数据存储应用 2002年开始出现,是EIDE技术的延续;
点对点协议,每个驱动器都有一个独立的通道,增强扩展能力;
连续的磁盘访问性能可与SCSI相比;
支持RAID
iSCSI 较低 中端数据存储,
如Web/文件服务器
定位于中端存储和远程启动;
节省基础架构的开销
提供了TCP/IP/Ethernet的灵活性和可靠性;
TCP/IP的高延迟影响性能;
目前Red Hat Enterprise Linux还不支持
Fibre Channel 高端的企业存储,
如数据库服务器
低延迟、高吞吐量,长传输距离可达10公里 2 Gbps传输速率;路径冗余功能提高可靠性;一个光纤环路支持127个设备,共享带宽,实现大规模群集

磁盘的数量
磁盘的数量多少会影响到系统性能。对磁盘容量的需求通常是考虑磁盘数量的唯一因素,而忽视了吞吐量的因素。好的性能是依赖于提供I/O读写的磁头数量。可通过RAID技术来实现,包括软RAID和硬件RAID。许多型号的xSeries服务器提供了硬件RAID支持,Linux 还提供了软RAID功能。2.4 Linux kernel的软RAID是通过md设备驱动实现的,支持EIDE或SCSI硬盘。支持的RAID级别为RAID-0, RAID-1,和RAID-5,可以在初始安装配置或者用mdadm工具配置。Table 10-8列出了可选的IBMRAID控制器:



提示:通常增加硬盘数量是提高磁盘性能的一个最有效方法。

更多的内容,请参考如下文档的第121页Chapter 7, “Disk subsystem”

_ IBM TotalStorage Disk Solutions for xSeries, SG24-6874-00

_ IBM Eserver xSeries ServeRAID Technology


7.2 Ext3: Red Hat的缺省文件系统
从Red Hat 7.2开始,缺省文件系统为Ext3。相对于Ext2,增加了日志。其主要特点为:
_ Availability(可用性):Ext3提供数据的写一致功能。即意外宕机情况下,不需要检查数据的一致性,使系统恢复时间从几小时缩短为几秒钟。
_ Data integrity(数据完整性):通过mount命令定义日志方式:data=journal,所有的数据,包括文件数据和元数据,都被定义为日志型。
_ Speed(速度):通过定义日志方式:data=writeback, 可以选择获得数据完整性还是写速度的优势来满足不同的业务需求。
_ Flexibility(灵活性):从Ext2升级到Ext3非常简单,且不需要重新格式化硬盘。使用命令tune2fs 并编辑文件/etc/fstab,便可完成升级。注意,Ext3可被mount为不带日志属性的ext2文件系统。

另外,许多第三方厂家兼容Ext3 file systems,如PartitionMagic。

7.3 ReiserFS: SUSE LINUX的缺省文件系统
从SUSE LINUX 7.1开始,缺省安装的文件系统即为由Hans Reiser开发的ResierFS。在其设计之初便包括如下性能方面的考虑 From its initial design, key performance
aspects have included:
_ 日志文件系统(Journaling)的设计提高了可靠性和恢复速度。
_ 使用平衡树数据结构可以同时存储内容数据和安全元数据,使其获得更快的访问速度。
_ 有效地利用磁盘空间,与其他文件系统不同,ResierFS不依赖于数据块的大小。Efficient use of disk space because, unlike other file systems, this file system
does not rely on block sizes.
目前SUSE LINUX Enterprise Server 8的ReiserFS为V3.6,下一代文件系统是Reiser4。Reiser4提供的是不间断的文件系统,通过实现“atomic”文件系统避免系统崩溃,保证完成I/O操作;使用新的访问算法来获取2到5倍的性能提高。

提示: Red Hat Enterprise Linux AS不支持ReiserFS

7.4 通过Linux kernel对文件系统调优
缺省文件系统的设置或许适合大多数应用环境。尽管如此,我们还是提供了如下几个提高磁盘性能的方法:
访问时间更新

linux文件系统当文件被访问,创建,更新的时候会保留纪录。默认的,当文件读写操作的时候,系统会更新last-time-read属性。因为写操作是比较耗费资源的操作,减少不必要的i/o可以整体上提高磁盘性能。
在挂接文件系统的时候,加入noatime参数可以禁止inode节点访问时间的修改。如果文件更新时间对于特定的应用不是很重要的话,比如web服务,就可以把noatime参数加入/etc/fstab文件中
比如:
/dev/sdb1 /mountlocation ext3 defaults,noatime 1 2
推荐利用单独的分区作为挂接点并打开noatime开关

    Tuning the elevator algorithm(调整阶梯算法)
    磁盘I/O 阶梯算法产生于V2.4 kernel。它是通过控制I/O请求获得服务前在队列中等待时间,来调整块I/O的运算法则。
    这是由调整阶梯算法的读写值实现的。通过增加延迟(更大的读、写值),I/O请求在队列中等待更长时间,给I/O scheduler更好地完成I/O操作,改进性能。
    对应用于大量磁盘I/O的Linux服务器,要在吞吐量和延迟方面找到一个合理的平衡点。Linux文件系统使用块设备,因此改进块读写的频率可以改进文件系统的性能。一个准则是,小缓存、平横的长延迟读写有利于大量磁盘I/O的Linux服务器。阶梯算法的调整是一个交互的过程,首先要获得基准性能曲线,然后改动设置,观察效果。Example 10-1给出了如何用/sbin/elvtune命令显示当前设置以及如何改动读写队列的数值。

    提示:Red Hat建议您将读延迟(-r)调整为写延迟(-w)的一半。

    做过改动之后,确保/sbin/elvtune call被加到/etc/rc.d/rc.local (Red Hat)或者/etc/init.d/boot.local (SUSE LINUX)中,使设置在系统重新启动后生效。

    redhat推荐调整升降算法来让读延迟是写延迟的一半

    注意,2.6核心的linux指出elvtune命令已经作废,取而代之的是调整/sys/block结构



    选择Ext3文件系统的日志模式
    Ext3文件系统可选三种日志模式,使用mount命令来完成:
    _ data=journal
    文件数据和元数据均设置为日志方式,性能开销比较大
    _ data=ordered (缺省设置)
    顺序写入,先写文件数据,再写元数据
    _ data=writeback
    提供最快的访问速度,但是牺牲了数据的一致性。元数据仍然被记录到日志,从而确保元数据的完整。文件数据会在系统崩溃之后恢复到原先的状态。

    三种方法改变日志模式:
    _ 使用mount 命令:
    mount -o data=writeback /dev/sdb1 /mnt/mountpoint 这里/dev/sdb1 是挂载的文件系统

    _ 在/etc/fstab文件的选项中:
    /dev/sdb1 /testfs ext3 defaults,journal=writeback 0 0

    _ 更改root分区的data=ordered,更改上述/etc/fstab 文件,执行mkinitrd命令来扫描/etc/fstab 文件并创建新的印象文件。升级grub或lilo指向新的印象文件。更多有关Ext3的介绍,请参考:


    Tuning ReiserFS (调整ReiserFS)
    ReiserFS的优势之一是支持大量的小文件。取代传统Linux文件系统的块结构,ReiserFS使用树型结构,保存小文件的全部内容和大文件的结尾。ReiserFS不使用固定的块大小,避免出现碎片而浪费磁盘空间。
    挂载ReiserFS 文件系统时,有一个选项可以改进系统性能,但是会消耗更多的磁盘空间。使用notail来关闭“tail packing”选项,具体方法如下:


    Setting bdflush
    通过调整虚拟内存子系统也可以改进文件系统性能。Bdflush内核进程保证dirty buffers (任何当前被修改的只存在于易失性内存的数据)与磁盘一致。修改/proc/sys/vm/bdflush变量,来改变写入磁盘速率,避免磁盘竞争问题。对/proc下的任何修改即刻生效,但是重新启动后会恢复到原来状态。在/etc/rc.d/rc.local文件中加入echo命令使所做的修改永久生效。
        1. 对于2.4 Linux kernels,在/proc/sys/vm/bdflush包括九个变量:nfract:dirty buffers在buffer cache中的最大百分比。Nfract值越大,写入磁盘的延迟越长。当内存不足时,大量的I/O操作被处理。为使磁盘I/O操作均匀分布,保持较低的值。
        2. Ndirty:bdflush process可以一次写入磁盘的最大dirty buffers值。该值过大会导致大量I/O请求,过小会在bdflush daemon执行不够频繁的时候导致内存不足。
        3. dummy2 未使用
        4. dummy3 未使用
        5. interval 唤醒kupdate的最低速率。缺省是5秒,最小0秒,最大600秒。
        6. age_buffer操作系统将buffer cache写入磁盘前等待的最长时间。缺省30秒,最小1秒,最大6000秒。
        7. nfract_sync 激活bdflush同步的dirty buffers百分比,缺省为60%.
        8. nfract_stop 停止bdflush的dirty buffers百分比,却省为20%.
        9. dummy5 未使用
    下面是更改bdflush变量的示例:


    SCSI磁盘的标签命令队列Tagged command queuing (TCQ),产生于SCSI-2标准,是一种将到达SCSI驱动器的指令序列进行打标签和重新排序的方法。对于繁重、随机访问的I/O负荷,这种方法通过对I/O请求的重排序,使驱动器磁头位置最优化,改进I/O性能。
    一些IBM xSeries服务器集成了Adaptec AIC-7xxx SCSI控制器。执行命令:cat /proc/scsi/aic7xxx/0来检查当前TCQ的设置,不必重新编译内核。可以在/etc/modules.conf中添加如下两行内容,指定参数aic7xxx=global_tag_depth:xx


    Block sizes块大小
    数据块大小是对磁盘读写的最小单位,直接影响服务器性能。如果服务器处理的多为小文件,那么较小的数据块尺寸会更有效。反之,如果服务器处理的多为大文件,大的数据尺寸块会提高系统性能。如果要改变数据块的大小必须重新格式化磁盘。做了RAID的磁盘,stripe size 就是数据块的容量(光纤盘采用segment)。根据应用的不同合理选择正确的块大小,通常的原则是顺序读写应用宜使用大的块容量,象数据库这样的随机读写操作使用等同于记录大小的块容量更合适。

    不同系统版本,可选的块大小不同:
    _ Red Hat Enterprise Linux AS with Ext3 可选的块大小为1 KB, 2 KB和4 KB
    _ SUSE LINUX Enterprise Server with ReiserFS可选的块大小为4 KB

    分区设置的原则
    Linux缺省安装创建三个分区:
    _ 一个swap分区(自动设定为2倍内存大小但不超过2 GB)
    _ 一个小的boot分区:/boot (例如100 MB)
    _ 其它空间给根分区 /

    关于Linux磁盘分区的优化存在许多的争论。如果只有一个根分区的话,对于将来要增加新分区时会比较麻烦。而分区太多对文件系统的管理又会变的复杂。Linux安装过程中,允许创建多个分区。

    创建多个磁盘分区的好处:
    _文件系统出色的颗粒度属性使安全性得到改进。例如,允许所有用户和进程容易地访问/var和/tmp分区,并防止恶意访问。通过将这些分区分布到不同的磁盘,可在不影响系统正常运行的情况下对一些分区进行重建和恢复。
    _ 某块磁盘故障导致的数据丢失不影响其他磁盘的数据,改进数据完整性。
    _ 全新的安装或升级不影响其它分区。
    _ 更有效的备份过程
    设计分区时要考虑到备份工具,要了解备份工具是以分区为边界或是以更细颗粒度级别,如文件系统为边界。下表列出了要考虑与根分区分开的五个分区,这些分区的划分可以改进性能和灵活性。




    要更深层了解Linux文件系统和分区,访问如下关于文件系统层次的网页


    7.5 交换分区
    当物理内存被全部占用,而系统又需要更多的内存时,交换设备发挥作用。这时,系统会将内存中很少使用的数据交换到磁盘的交换分区,释放物理内存。最初的交换分区在安装系统的过程建立,原则上是两倍的物理内存大小。Linux kernels 2.4 支持每分区24GB的交换分区,32-bit系统理论上支持最大8T分区大小。交换分区存在于独立的磁盘。
    对于安装好的系统,增加内存时,需要设置更多的交换空间。两种方法可以实现:
    ·创建一个新的分区作为交换分区。如果没有空闲空间创建新的分区,可以创建一个交换文件。
    ·如有选择,最好是创建一个交换分区。
    从磁盘I/O到交换分区绕过了文件系统,所有的性能开销都在写文件上,因此使提高了性能。
    另外一种改进性能的方法是创建多个交换空间,实现并行读写磁盘。增加了交换分区或交换文件后,/etc/fstab文件包含如Example 10-5所示内容:


    通常情况下,Linux首先使用/dev/sda2交换分区,然后是/dev/sdb2,依次类推,直到获得足够的交换空间。也就是说,当没有更大空间需求的话,只有/dev/sda2被使用。将数据分散到更多的交换分区可以改进性能,这是因为所有的读写请求是被并行处理的。如果按照Example 10-6改变文件配置,可以给前三个分区赋予更高的优先级。


    交换分区是从最高优先级开始使用的(32767最高,0为最低),给前三个分区赋予相同的优先级使数据被写到三个磁盘中;而不是写满一个再写下一个。三个分区并行使用,以提高性能。当前三个分区用满之后,第四个分区开始启用。也可以将所有分区设置为同一个优先级,但是假如这里有一块磁盘的速度比其它磁盘慢的话,性能就会下降。通常的做法是把交换分区放在最快的磁盘中。

    提示:交换分区不是物理内存的替代品,它存在于物理磁盘中,性能远远低于内存访问速度。
阅读(291) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~