Re: High write latency spikes when writing to EXT4

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Oct 16, 2015, at 2:07 AM, Jean-Paul Smeets <jean-paul.smeets@xxxxxxxx> wrote:
> In our application we are seeing occasional high latency spikes (500ms range
> )when writing small amounts of data (a couple MB, a couple of 100 IOs) to
> files on an EXT4 volume (data=ordered). We are running kernel 3.10.62.
> 
> What seems to be happening is that a journal commit takes a long time.
> During that time no write access to the journal is possible.
> So a subsequent vfs.write is blocked until the journal commit is finished.
> 
> We expected the page cache to decouple the vfs.write from this and not to
> block the vfs.write.
> This behavior causes large spikes in on average much lower write latencies.
> 
> Small log excerpt (duration in us):
> 16:18:56.966387, PROCA, 20234, __ext4_journal_get_write_access: duration: 140412
> 16:18:56.966406, PROCB, 19965, __ext4_journal_get_write_access: duration: 461892
> 16:18:56.966422, PROCC, 20387, __ext4_journal_get_write_access: duration: 391105
> 16:18:56.966439, PROCD, 20041, __ext4_journal_get_write_access: duration: 64256
> 16:18:56.966454, itheex, 19823, __ext4_journal_get_write_access: duration:
> 383671
> 16:18:56.966718, jbd2/dm-8-8, 684, jbd2_journal_commit_transaction:
> duration: 468959
> 16:18:56.967426, PROCE, 19867, ext4_file_write: duration: 469431
> 16:18:56.967442, PROCE, 19867, vfs.write: duration: 469452
> 
> A similar, but less frequent issue is with the __ext4_journal_start_sb.
> Small log excerpt:
> 16:17:43.337004, PROCF, 20041, __ext4_journal_start_sb: duration: 240753
> 16:17:43.337024, PROCG, 19980, __ext4_journal_start_sb: duration: 269051
> 16:17:43.337498, PROCG, 19980, ext4_file_write: duration: 269531
> 16:17:43.337515, PROCG, 19980, vfs.write: duration: 269554
> 
> Can anything be done about these very high latency spikes ?

There are a number of options to disconnect the file write operations from the journal commits:
- preallocate file blocks with fallocate() so that there are no allocations
  during the write
- use data=writeback so that writes are not ordered with journal commits

It is also possible to store the journal on a separate low-latency device
like SSD or PCI NVRAM so that the journal commits are very fast and do not
cause latency spikes during writes.

Cheers, Andreas





Attachment: signature.asc
Description: Message signed with OpenPGP using GPGMail


[Index of Archives]     [Reiser Filesystem Development]     [Ceph FS]     [Kernel Newbies]     [Security]     [Netfilter]     [Bugtraq]     [Linux FS]     [Yosemite National Park]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Samba]     [Device Mapper]     [Linux Media]

  Powered by Linux