Linux文件系统caching:将数据从“脏”转移到“写入”

我的软件RAID可以持续写入800 MB / s。 当cat /proc/meminfo |grep Writeback: > 2 GB时,我看到了这种情况。 但是,大部分时间回写是0.5 GB,这使得性能在200 MB / s左右。

有大量的数据要写入。 cat /proc/meminfo |grep Dirty:表示脏caching是90 GB。

据我所知,Dirty是需要写的东西,而Writeback是写入磁盘的东西。 因此,在Writeback中的块旁边可能存在Dirty中的块,这些块不会写入同一行。

这可以解释为什么如果写回时间太短,为什么我的性能会变差,因为花在寻找上的时间要比写入一些额外的MB花费的时间长得多。

所以我的问题是:我可以不知何故告诉内核更积极地将更多的数据从肮脏到写入,从而增加写回?

– 编辑 –

这是在低绩效期间:

 $ cat /proc/meminfo MemTotal: 264656352 kB MemFree: 897080 kB Buffers: 72 kB Cached: 233751012 kB SwapCached: 0 kB Active: 3825364 kB Inactive: 230327200 kB Active(anon): 358120 kB Inactive(anon): 47536 kB Active(file): 3467244 kB Inactive(file): 230279664 kB Unevictable: 0 kB Mlocked: 0 kB SwapTotal: 204799996 kB SwapFree: 204799996 kB Dirty: 109921912 kB Writeback: 391452 kB AnonPages: 404748 kB Mapped: 12428 kB Shmem: 956 kB Slab: 21974168 kB SReclaimable: 21206844 kB SUnreclaim: 767324 kB KernelStack: 5248 kB PageTables: 7152 kB NFS_Unstable: 0 kB Bounce: 0 kB WritebackTmp: 0 kB CommitLimit: 337128172 kB Committed_AS: 555272 kB VmallocTotal: 34359738367 kB VmallocUsed: 544436 kB VmallocChunk: 34124336300 kB HardwareCorrupted: 0 kB AnonHugePages: 0 kB HugePages_Total: 0 HugePages_Free: 0 HugePages_Rsvd: 0 HugePages_Surp: 0 Hugepagesize: 2048 kB DirectMap4k: 149988 kB DirectMap2M: 17649664 kB DirectMap1G: 250609664 kB cat /proc/sys/vm/dirty_background_ratio 1 

降低dirty_writeback_centisecs只会在更小的位上肮脏。

你没有给出完整的/ proc / meminfo输出,所以我不知道你之前做过的任何调整。

可以使用的两个立即可调参数是这些参数。

/proc/sys/vm/dirty_background_ratio

  dirty_background_ratio Contains, as a percentage of total system memory, the number of pages at which the pdflush background writeback daemon will start writing out dirty data. 

默认值是10.将其增加到30或40并testing。

/proc/sys/vm/dirty_writeback_centisecs

 dirty_writeback_centisecs The pdflush writeback daemons will periodically wake up and write `old' data out to disk. This tunable expresses the interval between those wakeups, in 100'ths of a second. Setting this to zero disables periodic writeback altogether. 

默认值是500.将其设置为300并testing。

请记住这些不是绝对值。 你必须经历反复试验才能find最适合你的环境的东西。

我只是根据你提供的描述来计算出这些值,并假设是正确的。

如果安装了kernel-doc软件包,请转到sysctl,然后打开vm.txt来阅读。