中文
注册

调整脏数据刷新策略,减小磁盘的IO压力

原理

PageCache中需要回写到磁盘的数据为脏数据。在应用程序通知系统保存脏数据时,应用可以选择直接将数据写入磁盘(O_DIRECT),或者先写到PageCache(非O_DIRECT模式) 。非O_DIRECT模式,对于缓存在PageCache中的数据的操作,都在内存中进行,减少了对磁盘的操作。

使用方法

系统中提供了以下参数来调整策略:

  1. “/proc/sys/vm/dirty_expire_centiseconds”此参数用于表示脏数据在缓存中允许保留的时长,即时间到后需要被写入到磁盘中。此参数的默认值为30s(3000 个1/100秒)。如果业务的数据是连续性的写,可以适当调小此参数,这样可以避免IO集中,导致突发的IO等待。可以通过echo命令修改:

    echo 2000 > /proc/sys/vm/dirty_expire_centisecs

  2. “/proc/sys/vm/dirty_background_ratio”脏页面占用总内存最大的比例(以memfree+Cached-Mapped为基准),超过这个值,pdflush线程会刷新脏页面到磁盘。增加这个值,系统会分配更多的内存用于写缓冲,因而可以提升写磁盘性能。但对于磁盘写入操作为主的的业务,可以调小这个值,避免数据积压太多最后成为瓶颈,可以结合业务并通过观察await的时间波动范围来识别。此值的默认值是10,可以通过echo来调整:

    echo 8 > /proc/sys/vm/dirty_background_ratio

  3. “/proc/sys/vm/dirty_ratio”为脏页面占用总内存最大的比例,超过这个值,系统不会新增加脏页面,文件读写也变为同步模式。文件读写变为同步模式后,应用程序的文件读写操作的阻塞时间变长,会导致系统性能变慢。此参数的默认值为20,对于写入为主的业务,可以增加此参数,避免磁盘过早的进入到同步写状态,可以通过echo来调整:

    echo 40 > proc/sys/vm/dirty_ratio

    如果加大了脏数据的缓存大小和时间,在意外断电情况下,丢失数据的概率会变多。因此对于需要立即存盘的数据,应用应该采用O_DIRECT模式避免关键数据的丢失。

搜索结果
找到“0”个结果

当前产品无相关内容

未找到相关内容,请尝试其他搜索词