linux_old1/include/trace/events
Jan Kara c4a391b53a writeback: do not sync data dirtied after sync start
When there are processes heavily creating small files while sync(2) is
running, it can easily happen that quite some new files are created
between WB_SYNC_NONE and WB_SYNC_ALL pass of sync(2).  That can happen
especially if there are several busy filesystems (remember that sync
traverses filesystems sequentially and waits in WB_SYNC_ALL phase on one
fs before starting it on another fs).  Because WB_SYNC_ALL pass is slow
(e.g.  causes a transaction commit and cache flush for each inode in
ext3), resulting sync(2) times are rather large.

The following script reproduces the problem:

  function run_writers
  {
    for (( i = 0; i < 10; i++ )); do
      mkdir $1/dir$i
      for (( j = 0; j < 40000; j++ )); do
        dd if=/dev/zero of=$1/dir$i/$j bs=4k count=4 &>/dev/null
      done &
    done
  }

  for dir in "$@"; do
    run_writers $dir
  done

  sleep 40
  time sync

Fix the problem by disregarding inodes dirtied after sync(2) was called
in the WB_SYNC_ALL pass.  To allow for this, sync_inodes_sb() now takes
a time stamp when sync has started which is used for setting up work for
flusher threads.

To give some numbers, when above script is run on two ext4 filesystems
on simple SATA drive, the average sync time from 10 runs is 267.549
seconds with standard deviation 104.799426.  With the patched kernel,
the average sync time from 10 runs is 2.995 seconds with standard
deviation 0.096.

Signed-off-by: Jan Kara <jack@suse.cz>
Reviewed-by: Fengguang Wu <fengguang.wu@intel.com>
Reviewed-by: Dave Chinner <dchinner@redhat.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
2013-11-13 12:09:07 +09:00
..
9p.h 9p: trace: use %*ph to dump buffer 2013-05-28 13:42:08 -05:00
asoc.h ASoC: trace: Make sure trace header doesnt depend on any headers 2013-09-17 00:37:03 +01:00
bcache.h bcache: Rip out pkey()/pbtree() 2013-06-26 17:09:15 -07:00
block.h block: Add nr_bios to block_rq_remap tracepoint 2013-09-21 13:57:47 -06:00
btrfs.h btrfs: add lockdep and tracing annotations for uuid tree 2013-09-21 10:58:56 -04:00
compaction.h UAPI: (Scripted) Convert #include "..." to #include <path/...> in kernel system headers 2012-10-02 18:01:25 +01:00
context_tracking.h context_tracking: User/kernel broundary cross trace events 2013-08-14 17:14:48 +02:00
ext3.h jbd: change journal_invalidatepage() to accept length 2013-05-21 23:26:36 -04:00
ext4.h ext4: isolate ext4_extents.h file 2013-08-28 14:47:06 -04:00
f2fs.h f2fs: add a tracepoint on f2fs_new_inode 2013-04-29 10:52:01 +09:00
filemap.h mm: trace filemap add and del 2013-04-29 15:54:28 -07:00
gfpflags.h mm: add a __GFP_KMEMCG flag 2012-12-18 15:02:12 -08:00
gpio.h gpio: add trace events for setting direction and value 2011-05-20 00:40:19 -06:00
host1x.h gpu: host1x: Add channel support 2013-04-22 12:32:43 +02:00
irq.h rcu: Use softirq to address performance regression 2011-06-14 15:25:39 -07:00
jbd.h jbd: Write journal superblock with WRITE_FUA after checkpointing 2012-05-15 23:34:37 +02:00
jbd2.h jbd2: trace when lock_buffer in do_get_write_access takes a long time 2013-04-21 16:47:54 -04:00
kmem.h mm/page_alloc.c: fix the value of fallback_migratetype in alloc_extfrag tracepoint() 2013-09-11 15:57:19 -07:00
kvm.h KVM: Extract generic irqchip logic into irqchip.c 2013-04-26 20:27:17 +02:00
lock.h
mce.h tracing: Fix event alignment: mce:mce_record 2011-03-10 10:34:28 -05:00
migrate.h mm: migrate: Add a tracepoint for migrate_pages 2012-12-11 14:28:35 +00:00
module.h include: replace linux/module.h with "struct module" wherever possible 2011-10-31 19:32:32 -04:00
napi.h
net.h net: tracepoint of net_dev_xmit sees freed skb and causes panic 2011-06-02 14:06:31 -07:00
nmi.h x86: Add NMI duration tracepoints 2013-06-23 11:52:58 +02:00
oom.h mm, oom: change type of oom_score_adj to short 2012-12-11 17:22:27 -08:00
pagemap.h mm: add tracepoints for LRU activation and insertions 2013-07-03 16:07:31 -07:00
power.h PM / Sleep: new trace event to print device suspend and resume times 2013-07-27 03:18:35 +02:00
printk.h printk/tracing: rework console tracing 2013-04-29 18:28:13 -07:00
random.h random: add tracepoints for easier debugging and verification 2012-07-14 20:17:48 -04:00
ras.h aerdrv: Trace Event for PCI Express Advanced Error Reporting 2013-01-03 14:31:44 -08:00
rcu.h rcu: Avoid sparse warnings in rcu_nocb_wake trace event 2013-09-23 09:18:17 -07:00
regmap.h regmap: Add support for discarding parts of the register cache 2013-05-12 18:46:47 +04:00
regulator.h regulator: Add basic trace facilities 2011-01-12 14:33:00 +00:00
rpm.h device.h: audit and cleanup users in main include dir 2012-03-16 10:38:24 -04:00
sched.h sched: Create more preempt_count accessors 2013-09-25 14:07:52 +02:00
scsi.h [SCSI] Include protection operation in SCSI command trace 2011-03-14 18:36:02 -05:00
signal.h tracing: let trace_signal_generate() report more info, kill overflow_fail/lose_info 2012-01-13 18:48:50 +01:00
skb.h tracing: Fix event alignment: skb:kfree_skb 2011-03-10 10:34:31 -05:00
sock.h core: add tracepoints for queueing skb to rcvbuf 2011-06-21 16:06:10 -07:00
spi.h spi: Provide common spi_message processing loop 2013-10-11 20:09:50 +01:00
sunrpc.h SUNRPC: Replace pointer values with task->tk_pid and rpc_clnt->cl_clid 2013-09-05 10:13:16 -04:00
syscalls.h tracing: Allow raw syscall trace events for non privileged users 2010-11-18 14:37:43 +01:00
target.h target: Fix assignment of LUN in tracepoints 2013-10-09 01:54:44 -07:00
task.h mm, oom: change type of oom_score_adj to short 2012-12-11 17:22:27 -08:00
timer.h Merge branch 'timers-nohz-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip 2013-05-05 13:23:27 -07:00
udp.h udp: add tracepoints for queueing skb to rcvbuf 2011-06-21 16:06:10 -07:00
vmscan.h shrinker: Kill old ->shrink API. 2013-09-10 18:56:32 -04:00
workqueue.h workqueue: rename cpu_workqueue to pool_workqueue 2013-02-13 19:29:12 -08:00
writeback.h writeback: do not sync data dirtied after sync start 2013-11-13 12:09:07 +09:00
xen.h xen/mmu: Use Xen specific TLB flush instead of the generic one. 2012-10-31 12:38:31 -04:00