美高梅官方网站66159

支持开源处理器架构,一旦开始把缓存页写入硬盘

作者:美高梅官方网站66159    来源:未知    发布时间:2020-05-07 23:00    浏览量:

Linus Torvalds宣布发布了kernel 3.1。主要新特性包括:支持开源处理器架构OpenRISC;改进动态writeback throttling性能,writeback是指将内存页数据写入硬盘永久储存和释放内存页的过程,对系统I/O性能有重要影响,throttling则是在数据写入硬盘前暂时阻止新数据写入内存的过程。

关于页面缓存的信息,可以用
cat /proc/meminfo 
看到。其中的Cached 指用于pagecache的内存大小(diskcache-SwapCache)。随着写入缓存页,Dirty 的值会增加。
一旦开始把缓存页写入硬盘,Writeback的值会增加直到写入结束。

ext3日志模式

ext3支持多种日志模式

    ext3 是ext2文件系统的高一级版本,完全兼容ext2,与ext2主要区别便是具有快速更新文件的存储功能。计算机自磁盘上读取或写入数据开始就必须保证文 件系统中文件与目录的一致性,所有日志文件中的数据均以数据块的形式存放在存储设备中,当磁盘分区时文件系统即被创建,按照文件形式、目录形式支持存储数 据和组织数据。Linux的文件和目录采用层次结构文件系统,文件系统一般是在安装系统时通过使用“mount”命令安装上的,用于使用的文件链表存储在 文件/etc/fstab中,用于维护而安装的文件链表则存放在/etc/mtab中。

    ext3提供多种日志模式,即无论改变文件系统的元数据,还是改变文件系统的数据(包括文件自身的改变),ext3 文件系统均可支持,以下是在/etc/fstab文件引导时激活的三种不同日志模式:

    ◆data=journal日志模式
     日志中记录包括所有改变文件系统的数据和元数据。它是三种ext3日志模式中最慢的,但它将发生错误的可能性降至最小。使用“data= journal” 模式要求ext3将每个变化写入文件系统2次、写入日志1次,这将降低文件系统的总性能,但它的确是使用者最心爱的模式。由于记录了在ext3中元数据和 数据更新情况,当一个系统重新启动的时候,这些日志将起作用。

    ◆data=ordered日志模式
    仅记录改变文件系统的元数据,且溢出文件数据要补充到磁盘中。这是缺省的ext3日志模式。这种模式降低了在写入文件系统和写入日志之间的冗余,因此速度 较快,虽然文件数据的变化情况并不被记录在日志中,但它们必须做,而且由ext3的daemon程序在与之相关的文件系统元数据变化前执行,即在记录元数 据前要修改文件系统数据,这将稍微降低系统的性能(速度),然而可确保文件系统中的文件数据与相应文件系统的元数据同步。

    ◆data=writeback日志模式
     仅记录改变文件系统的元数据,但根据标准文件系统,写程序仍要将文件数据的变化记录在磁盘上,以保持文件系统一致性。这是速度最快的ext3日志模 式。因为它只记录元数据的变化,而不需等待与文件数据相关的更新如文件大小、目录信息等情况,对文件数据的更新与记录元数据变化可以不同步,即ext3是 支持异步的日志。缺陷是当系统关闭时,更新的数据因不能被写入磁盘而出现矛盾,这一点目前尚不能很好解决。

    不同日志模式间有差别,但设置的方法一样方便。可以使用ext3文件系统指定日志模式,由/etc/fstab启动时完成。例如,选择data=writeback日志模式,可以做如下设置:
    /dev/hda5 /opt ext3 data=writeback 1 0

    在一般情况下,data=ordered日志模式是ext3文件系统的缺省模式。

    选择日志模式

    1.考虑数据完整性
     使用ext3文件系统,在非正常关机时,数据完整性能得到可靠的保障,而且可以选择数据保护的类型和级别。例如,可以选择保证文件系统一致、允许文 件系统上的数据在非正常关机时受损,这样可以在某些状况下提高一些速度(但非所有状况)。另外,也可以选择保持数据与文件系统一致的情况,这意味着在非正 常关机后,不会在新近写入的文件中看到任何数据垃圾。这种保持数据与文件系统一致的安全性选择通常是缺省设置的情况。

    在大多数情况下,用户都是在文件的末尾增加写入数据。仅仅在某些情况下(例如数据库),用户在现存文件的中间写入数据,甚至覆盖现存文件。这种操作一般是 先截断该文件,然后再写入数据。如果选择data=ordered模式,系统正在写文件时崩溃,那么数据块可能被部分改写,但是新增加的数据写入过程并没 有完成,所以这种不完整数据块将不能作为文件数据的一部分。崩溃后要得到残存数据块的惟一办法是,在崩溃过程中有一个程序正在重写现存文件的中部,该程序 使用了 fsync()和O_SYNC强制写操作,才能保证在这种情况下按特定顺序写入。

    2.考虑速度
    ext3写入数据的次数要多于ext2,尽管如此,ext3的速度仍然快于ext2(即使是对高速数据流)。这是因为ext3的日志具有优化硬盘磁头转动 的功能。通过选择3种日志模式中的某一种,可以选择优化速度,但这会或多或少地造成一些数据的不完整,下面就来比较一下这三种日志模式。

    ◆ 使用选项data=writeback可以显著地提高速度,但同时会降低对数据一致性的保护。选择其它日志模式,数据一致性的保护基本上与ext2文件系 统相同。不同的是在正常操作时,系统要不断地维护文件系统的完整性,包括频繁的共享写操作创建和删除大量的小文件。如果从ext2切换到ext3,发现应 用程序性能大幅度下降,选项data=writeback可能会对提高性能有帮助。即使没有获得数据一致性保护措施,仍然可以享受ext3的优势(文件系 统总是保持一致)。在很多日志文件系统中,将这种模式设置为缺省模式。
    ◆data=ordered(缺省模式)能提供保持数据与文件系统的一致,这意味着在非正常关机时,不会在新近写入的文件中看到任何垃圾数据。
    ◆为了保证在多数情况下获得适中的速度,data=journal模式需要大一些的日志。当然在非正常关机后需要的恢复时间也长一些,但在某些数据库操作时速度较快。

    一般情况下,建议使用缺省模式。如果要改变模式,要在/etc/fstab文件中为相应的文件系统加上data=模式选项。

    这样,可以在速度和文件数据完整性两方面权衡利弊,并且可以为某些特殊的应用调整速度。

    Linux 操作系统是近年来用户数量增长最快的操作系统,ext3作为第一个正式支持的日志文件系统,全面兼容ext2的。ext3提供了多种日志模式支持,改进了 Linux系统的性能,解决系统中存在的不一致性的问题。ext3文件系统是一个优秀的、极具发展前景的文件系统。

Linux在writeback上的性能被认为不尽人意,开发者Wu Fengguang提出了改进方法;支持近场通信NFC;提高Slab分配器速度;改进VFS可扩展性;新的iSCSI实现;软件磁盘阵列坏块管理;电源管理工具cpupowerutils;支持Wii控制器;以及许多新驱动等等。

Linux 用pdflush进程把数据从缓存页写入硬盘,查看有多少个pdflush进程
cat /proc/sys/vm/nr_pdflush_threads

(文/solidot)    

pdflush的行为受/proc/sys/vm中的参数的控制
/proc/sys/vm/dirty_writeback_centisecs (default 500): 
1/100秒, 多长时间唤醒pdflush将缓存页数据写入硬盘。默认5秒唤醒2个(更多个)线程。
如果wrteback的时间长于dirty_writeback_centisecs的时间,可能会出问题。

pdflush的第一件事是读取
/proc/sys/vm/dirty_expire_centiseconds (default 3000)
1/100秒。缓存页里数据的过期时间(旧数据),在下一个周期内被写入硬盘。默认30秒是一个很长的时间。

第二件事是判断内存是否到了要写入硬盘的限额,由参数决定:
/proc/sys/vm/dirty_background_ratio (default 10)
百分值,保留过期页缓存(脏页缓存)的最大值。是以MmeFree+Cached-Mapped的值为基准的

pdflush写入硬盘看两个参数:
1 数据在页缓存中是否超出30秒,如果是,标记为脏页缓存;
2 脏页缓存是否达到工作内存的10%;

以下参数也会影响到pdflush
/proc/sys/vm/dirty_ratio (default 40)
总内存的最大百分比,系统所能拥有的最大脏页缓存的总量。超过这个值,开启pdflush写入硬盘。如果cache增长快于pdflush,那么整个系统在40%的时候遇到I/O瓶颈,所有的I/O都要等待cache被pdflush进硬盘后才能重新开始。

对于有高度写入操作的系统
dirty_background_ratio: 主要调整参数。如果需要把缓存持续的而不是一下子大量的写入硬盘,降低这个值。
dirty_ratio:        第二调整参数。

Swapping参数
/proc/sys/vm/swappiness
默认,linux倾向于从物理内存映射到硬盘缓存,保持硬盘缓存尽可能大。未用的页缓存会被放进swap区。
数值为0,将会避免使用swapping
100,将会尽量使用swapping
少用swapping会增加程序的响应速度;多用swapping将会提高系统的可用性。

如果有大量的写操作,为避免I/O的长时间等待,可以设置:
$ echo 5 > /proc/sys/vm/dirty_background_ratio
$ echo 10 > /proc/sys/vm/dirty_ratio

文件系统数据缓冲需要频繁的内存分配。加大保留内存的值能提升系统速度和稳定。小于8G的内存,保留内存为64M,大于8G的设置为256M
$ echo 65536 > /proc/sys/vm/min_free_kbytes

I/O 调度器
cat /sys/block/[disk]/queue/scheduler

4中调度算法
noop anticipatory deadline [cfq] 
deadline :    deadline 算法保证对既定的IO请求以最小的延迟时间。
anticipatory:    有个IO发生后,如果又有进程请求IO,则产生一个默认6ms猜测时间,猜测下一个进程请求IO是干什么。这对于随机读取会造成较大的延时。
        对数据库应用很糟糕,而对于Web Server等则会表现不错。
cfq:        对每个进程维护一个IO队列,各个进程发来的IO请求会被cfq以轮循方式处理,对每一个IO请求都是公平。适合离散读的应用。
noop:        对所有IO请求都用FIFO队列形式处理。默认IO不会存在性能问题。

改变调度器
$ echo deadline > /sys/block/sdX/queue/scheduler
对于数据库服务器,deadline算法是推荐的。

提高调度器请求队列的
$ echo 4096 > /sys/block/sdX/queue/nr_requests

有大量的读请求,默认的请求队列应付不过来,可以提高这个值。缺点是要牺牲一定的内存。
为了增加连续读取的吞吐量,可以增加预读数据量。预读的实际值是自适应的,所以使用一个较高的值,不会降低小型随机存取的性能。
$ echo 4096 > /sys/block/sdX/queue/read_ahead_kb
如果LINUX判断一个进程在顺序读取文件,那么它会提前读取进程所需文件的数据,放在缓存中。   

服务器遇到磁盘写活动高峰,导致请求处理延迟非常大(超过3秒)。通过调整内核参数,将写活动的高峰分布成频繁的多次写,每次写入的数据比较少。这样可以把尖峰的写操作削平成多次写操作。以这种方式执行的效率比较低,因为内核不太有机会组合写操作。但对于繁忙的服务器,写操作将更一致地进行,并将极大地改进交互式性能。

/proc/sys/vm/dirty_ratio

控制文件系统的写缓冲区的大小,单位是百分比,表示占系统内存的百分比,表示当写缓冲使用到系统内存多少的时候,开始向磁盘写出数据。增大之会使用更多系统内存用于磁盘写缓冲,也可以极大提高系统的写性能。但是,当你需要持续、恒定的写入场合时,应该降低其数值。

/proc/sys/vm/dirty_background_ratio

控制文件系统的pdflush进程,在何时刷新磁盘。单位是百分比,表示系统内存的百分比,pdflush用于将内存中的内容和文件系统进行同步,比如说,当一个文件在内存中进行修改,pdflush负责将它写回硬盘.每当内存中的垃圾页(dirty page)超过10%的时候,pdflush就会将这些页面备份回硬盘.增大之会使用更多系统内存用于磁盘写缓冲,也可以极大提高系统的写性能。但是,当你需要持续、恒定的写入场合时,应该降低其数值:

/proc/sys/vm/dirty_writeback_centisecs

控制内核的脏数据刷新进程pdflush的运行间隔。单位是 1/100 秒。缺省数值是500,也就是 5 秒。如果你的系统是持续地写入动作,那么实际上还是降低这个数值比较好,这样可以把尖峰的写操作削平成多次写操作。
如果你的系统是短期地尖峰式的写操作,并且写入数据不大(几十M/次)且内存有比较多富裕,那么应该增大此数值。
该参数的设置应该小于dirty_expire_centisecs,但也不能太小,太小I/O太频繁,反而
使系统性能下降。具体可能需要在生产环境上测试。据说1:6 (dirty_expire_centisecs  : dirty_writeback_centisecs )的比例比较好。

/proc/sys/vm/dirty_expire_centisecs

声明Linux内核写缓冲区里面的数据多“旧”了之后,pdflush进程就开始考虑写到磁盘中去。单位是 1/100秒。缺省是 30000,也就是 30 秒的数据就算旧了,将会刷新磁盘。对于特别重载的写操作来说,这个值适当缩小也是好的,但也不能缩小太多,因为缩小太多也会导致IO提高太快。
当然,如果你的系统内存比较大,并且写入模式是间歇式的,并且每次写入的数据不大(比如几十M),那么这个值还是大些的好。

/proc/sys/vm/vfs_cache_pressure

表示内核回收用于directory和inode   cache内存的倾向;缺省值100表示内核将根据pagecache和swapcache,把directory和inode   cache保持在一个合理的百分比;降低该值低于100,将导致内核倾向于保留directory和inode   cache;增加该值超过100,将导致内核倾向于回收directory和inode   cache

/proc/sys/vm/min_free_kbytes

表示强制Linux   VM最低保留多少空闲内存(Kbytes)。
缺省设置:724(512M物理内存)

美高梅官方网站66159,/proc/sys/vm/nr_pdflush_threads

表示当前正在运行的pdflush进程数量,在I/O负载高的情况下,内核会自动增加更多的pdflush进程。

/proc/sys/vm/overcommit_memory

指定了内核针对内存分配的策略,其值可以是0、1、2。

0,   表示内核将检查是否有足够的可用内存供应用进程使用;如果有足够的可用内存,内存申请允许;否则,内存申请失败,并把错误返回给应用进程。

1,   表示内核允许分配所有的物理内存,而不管当前的内存状态如何。

2,   表示内核允许分配超过所有物理内存和交换空间总和的内存(参照overcommit_ratio)。

缺省设置:0

/proc/sys/vm/overcommit_ratio

如果overcommit_memory=2,可以过载内存的百分比,通过以下公式来计算系统整体可用内存。系统可分配内存=交换空间+物理内存*overcommit_ratio/100
缺省设置:50(%)

/proc/sys/vm/page-cluster

表示在写一次到swap区的时候写入的页面数量,0表示1页,1表示2页,2表示4页。
缺省设置:3(2的3次方,8页)

/proc/sys/vm/swapiness

表示系统进行交换行为的程度,数值(0-100)越高,越可能发生磁盘交换。

更改:
/etc/sysctl.conf

vm.dirty_ratio = 40

sysctl -p

查看:

find /proc/sys/vm  -name dirty*  -print   | while  read   name; do  echo $name ;cat ${name}; done
上一篇:没有了
下一篇:没有了

更多新闻推荐

Copyright © 2015-2019 http://www.77zhth.net. 美高梅官方网站66159有限公司 版权所有