Fast ext4 fsck times


This wasn’t one of the things we were explicitly engineering for when were designing the features that would go into ext4, but one of the things which we’ve found as a pleasant surprise is how much more quickly ext4 filesystems can be checked. Ric Wheeler reported some really good fsck times that were over ten times better than ext3 using filesystems generated using what was admittedly a very artificial/synthetic benchmark. During the past six weeks, though, I’ve been using ext4 on my laptop, and I’ve seen very similar results.

This past week, while at LinuxWorld, I’ve been wowing people with the following demonstration. Using an LVM snapshot, I ran e2fsck on the root filesystem on my laptop. So using a 128 gigabyte filesystem, on a laptop drive, this is what people who got to see my demo saw:

How does this compare against ext3? To answer that, I copied my entire ext4 file system to an equivalently sized partition formatted for use with ext3. This comparison is a little unfair since the ext4 file system has six weeks of aging on it, where as the ext3 filesystem was a fresh copy, so the directories are a bit more optimized. That probably explains the slightly better times in pass 2 for the ext3 file system. Still, it was no contest; the ext4 file system was almost seven times faster to check using e2fsck compared to the ext3 file system. Fsck on an ext4 filesystem is fast!

<td colspan="5" align="center">
  ext3
</td>

<td rowspan="9" align="center">
</td>

<td colspan="5" align="center">
  ext4
</td>
<td colspan="2" align="center">
  I/O
</td>

<td colspan="3" align="center">
  time (s)
</td>

<td colspan="2" align="center">
  I/O
</td>
<td align="center" valign="middle">
  user
</td>

<td align="center" valign="middle">
  system
</td>

<td align="center" valign="middle">
  MB read
</td>

<td align="center" valign="middle">
  MB/s
</td>

<td align="center" valign="middle">
  real
</td>

<td align="center" valign="middle">
  user
</td>

<td align="center" valign="middle">
  system
</td>

<td align="center" valign="middle">
  MB read
</td>

<td align="center" valign="middle">
  MB/s
</td>
<td align="right">
  382.63
</td>

<td align="right">
  18.06
</td>

<td align="right">
  14.99
</td>

<td align="right">
  2376
</td>

<td align="right">
  6.21
</td>

<td align="right">
  17.82
</td>

<td align="right">
  5.52
</td>

<td align="right">
  1.11
</td>

<td align="right">
  233
</td>

<td align="right">
  13.08
</td>
<td align="right">
  31.76
</td>

<td align="right">
  1.76
</td>

<td align="right">
  2.13
</td>

<td align="right">
  303
</td>

<td align="right">
  9.54
</td>

<td align="right">
  41.47
</td>

<td align="right">
  2.16
</td>

<td align="right">
  3.3
</td>

<td align="right">
  274
</td>

<td align="right">
  6.61
</td>
<td align="right">
  0.03
</td>

<td align="right">
  0.01
</td>

<td align="right">
</td>

<td align="right">
  1
</td>

<td align="right">
  31
</td>

<td align="right">
  0.04
</td>

<td align="right">
  0.02
</td>

<td align="right">
  0.01
</td>

<td align="right">
  1
</td>

<td align="right">
  27.38
</td>
<td align="right">
  0.2
</td>

<td align="right">
  0.2
</td>

<td align="right">
</td>

<td align="right">
</td>

<td align="right">
</td>

<td align="right">
  0.25
</td>

<td align="right">
  0.24
</td>

<td align="right">
</td>

<td align="right">
</td>

<td align="right">
</td>
<td align="right">
  9.86
</td>

<td align="right">
  1.26
</td>

<td align="right">
  0.22
</td>

<td align="right">
  5
</td>

<td align="right">
  0.51
</td>

<td align="right">
  3.13
</td>

<td align="right">
  1.85
</td>

<td align="right">
  0.1
</td>

<td align="right">
  5
</td>

<td align="right">
  1.6
</td>
<td align="right">
  424.81
</td>

<td align="right">
  21.36
</td>

<td align="right">
  17.34
</td>

<td align="right">
  2685
</td>

<td align="right">
  6.32
</td>

<td align="right">
  63.35
</td>

<td align="right">
  9.86
</td>

<td align="right">
  4.54
</td>

<td align="right">
  511
</td>

<td align="right">
  8.07
</td>