Re: [PATCH v5 00/18] Replace btrfs_workers with kernel workqueue based btrfs_workqueue

2014-03-11 Thread Filipe David Manana
On Fri, Feb 28, 2014 at 2:46 AM, Qu Wenruo quwen...@cn.fujitsu.com wrote:
 Add a new btrfs_workqueue_struct which use kernel workqueue to implement
 most of the original btrfs_workers, to replace btrfs_workers.

 With this patchset, redundant workqueue codes are replaced with kernel
 workqueue infrastructure, which not only reduces the code size but also the
 effort to maintain it.

 The result(somewhat outdated though) from sysbench shows minor improvement on 
 the following server:
 CPU: two-way Xeon X5660
 RAM: 4G
 HDD: SAS HDD, 150G total, 100G partition for btrfs test

 Test result on default mount option:
 https://docs.google.com/spreadsheet/ccc?key=0AhpkL3ehzX3pdENjajJTWFg5d1BWbExnYWFpMTJxeUEusp=sharing

 Test result on -o compress mount option:
 https://docs.google.com/spreadsheet/ccc?key=0AhpkL3ehzX3pdHdTTEJ6OW96SXJFaDR5enB1SzMzc0Eusp=sharing

 Changelog:
 v1-v2:
   - Fix some workqueue flags.
 v2-v3:
   - Add the thresholding mechanism to simulate the old behavior
   - Convert all the btrfs_workers to btrfs_workrqueue_struct.
   - Fix some potential deadlock when executed in IRQ handler.
 v3-v4:
   - Change the ordered workqueue implement to fix the performance drop in 32K
 multi thread random write.
   - Change the high priority workqueue implement to get an independent high
 workqueue without starving problem.
   - Simplify the btrfs_alloc_workqueue parameters.
   - Coding style cleanup.
   - Remove the redundant _struct suffix.
 v4-v5:
   - Fix a multithread free-and-use bug reported by Josef and David.

 Qu Wenruo (18):
   btrfs: Cleanup the unused struct async_sched.
   btrfs: Added btrfs_workqueue_struct implemented ordered execution
 based on kernel workqueue
   btrfs: Add high priority workqueue support for btrfs_workqueue_struct
   btrfs: Add threshold workqueue based on kernel workqueue
   btrfs: Replace fs_info-workers with btrfs_workqueue.
   btrfs: Replace fs_info-delalloc_workers with btrfs_workqueue
   btrfs: Replace fs_info-submit_workers with btrfs_workqueue.
   btrfs: Replace fs_info-flush_workers with btrfs_workqueue.
   btrfs: Replace fs_info-endio_* workqueue with btrfs_workqueue.
   btrfs: Replace fs_info-rmw_workers workqueue with btrfs_workqueue.
   btrfs: Replace fs_info-cache_workers workqueue with btrfs_workqueue.
   btrfs: Replace fs_info-readahead_workers workqueue with
 btrfs_workqueue.
   btrfs: Replace fs_info-fixup_workers workqueue with btrfs_workqueue.
   btrfs: Replace fs_info-delayed_workers workqueue with
 btrfs_workqueue.
   btrfs: Replace fs_info-qgroup_rescan_worker workqueue with
 btrfs_workqueue.
   btrfs: Replace fs_info-scrub_* workqueue with btrfs_workqueue.
   btrfs: Cleanup the old btrfs_worker.
   btrfs: Cleanup the _struct suffix in btrfs_workequeue

  fs/btrfs/async-thread.c  | 830 
 ---
  fs/btrfs/async-thread.h  | 119 ++-
  fs/btrfs/ctree.h |  39 ++-
  fs/btrfs/delayed-inode.c |   6 +-
  fs/btrfs/disk-io.c   | 212 +---
  fs/btrfs/extent-tree.c   |   4 +-
  fs/btrfs/inode.c |  38 +--
  fs/btrfs/ordered-data.c  |  11 +-
  fs/btrfs/qgroup.c|  15 +-
  fs/btrfs/raid56.c|  21 +-
  fs/btrfs/reada.c |   4 +-
  fs/btrfs/scrub.c |  70 ++--
  fs/btrfs/super.c |  36 +-
  fs/btrfs/volumes.c   |  16 +-
  14 files changed, 446 insertions(+), 975 deletions(-)

 --
 1.9.0

Hi Qu,

On latest btrfs-next/master, which includes these patches, kmemleak is
reporting many leaks that seems related to the work queues.
I can reliably reproduce it by running the xfstests.

Dmesg:

[ 1308.359146] kmemleak: 1308 new suspected memory leaks (see
/sys/kernel/debug/kmemleak)

Sample of kmemleak stack traces:

unreferenced object 0x8800d3f84408 (size 16):
comm mount, pid 4214, jiffies 4294927007 (age 1198.824s)
hex dump (first 16 bytes):
30 4c 6b d4 00 88 ff ff 78 5e 6b d4 00 88 ff ff 0Lk.x^k.
backtrace:
[816e5b46] kmemleak_alloc+0x26/0x50
[8118ec1d] kmem_cache_alloc_trace+0x11d/0x1e0
[a029ce84] btrfs_alloc_workqueue+0x44/0x2a0 [btrfs]
[a026ac15] open_ctree+0xff5/0x20a0 [btrfs]
[a0240eac] btrfs_mount+0x6ec/0x8d0 [btrfs]
[811a4d53] mount_fs+0x43/0x1b0
[811c2403] vfs_kern_mount+0x73/0x160
[811c4d49] do_mount+0x259/0xb70
[811c594e] SyS_mount+0x8e/0xe0
[81703212] system_call_fastpath+0x16/0x1b
[] 0x
unreferenced object 0x8800d3f85830 (size 16):
comm mount, pid 4214, jiffies 4294927008 (age 1198.820s)
hex dump (first 16 bytes):
58 16 0f f5 01 88 ff ff 00 00 00 00 00 00 00 00 X...
backtrace:
[816e5b46] kmemleak_alloc+0x26/0x50
[8118ec1d] kmem_cache_alloc_trace+0x11d/0x1e0
[a029ce84] btrfs_alloc_workqueue+0x44/0x2a0 [btrfs]
[a026ac35] open_ctree+0x1015/0x20a0 [btrfs]
[a0240eac] btrfs_mount+0x6ec/0x8d0 [btrfs]
[811a4d53] mount_fs+0x43/0x1b0
[811c2403] 

[PATCH v5 00/18] Replace btrfs_workers with kernel workqueue based btrfs_workqueue

2014-02-27 Thread Qu Wenruo
Add a new btrfs_workqueue_struct which use kernel workqueue to implement
most of the original btrfs_workers, to replace btrfs_workers.

With this patchset, redundant workqueue codes are replaced with kernel
workqueue infrastructure, which not only reduces the code size but also the
effort to maintain it.

The result(somewhat outdated though) from sysbench shows minor improvement on 
the following server:
CPU: two-way Xeon X5660
RAM: 4G 
HDD: SAS HDD, 150G total, 100G partition for btrfs test

Test result on default mount option:
https://docs.google.com/spreadsheet/ccc?key=0AhpkL3ehzX3pdENjajJTWFg5d1BWbExnYWFpMTJxeUEusp=sharing

Test result on -o compress mount option:
https://docs.google.com/spreadsheet/ccc?key=0AhpkL3ehzX3pdHdTTEJ6OW96SXJFaDR5enB1SzMzc0Eusp=sharing

Changelog:
v1-v2:
  - Fix some workqueue flags.
v2-v3:
  - Add the thresholding mechanism to simulate the old behavior
  - Convert all the btrfs_workers to btrfs_workrqueue_struct.
  - Fix some potential deadlock when executed in IRQ handler.
v3-v4:
  - Change the ordered workqueue implement to fix the performance drop in 32K
multi thread random write.
  - Change the high priority workqueue implement to get an independent high
workqueue without starving problem.
  - Simplify the btrfs_alloc_workqueue parameters.
  - Coding style cleanup.
  - Remove the redundant _struct suffix.
v4-v5:
  - Fix a multithread free-and-use bug reported by Josef and David.

Qu Wenruo (18):
  btrfs: Cleanup the unused struct async_sched.
  btrfs: Added btrfs_workqueue_struct implemented ordered execution
based on kernel workqueue
  btrfs: Add high priority workqueue support for btrfs_workqueue_struct
  btrfs: Add threshold workqueue based on kernel workqueue
  btrfs: Replace fs_info-workers with btrfs_workqueue.
  btrfs: Replace fs_info-delalloc_workers with btrfs_workqueue
  btrfs: Replace fs_info-submit_workers with btrfs_workqueue.
  btrfs: Replace fs_info-flush_workers with btrfs_workqueue.
  btrfs: Replace fs_info-endio_* workqueue with btrfs_workqueue.
  btrfs: Replace fs_info-rmw_workers workqueue with btrfs_workqueue.
  btrfs: Replace fs_info-cache_workers workqueue with btrfs_workqueue.
  btrfs: Replace fs_info-readahead_workers workqueue with
btrfs_workqueue.
  btrfs: Replace fs_info-fixup_workers workqueue with btrfs_workqueue.
  btrfs: Replace fs_info-delayed_workers workqueue with
btrfs_workqueue.
  btrfs: Replace fs_info-qgroup_rescan_worker workqueue with
btrfs_workqueue.
  btrfs: Replace fs_info-scrub_* workqueue with btrfs_workqueue.
  btrfs: Cleanup the old btrfs_worker.
  btrfs: Cleanup the _struct suffix in btrfs_workequeue

 fs/btrfs/async-thread.c  | 830 ---
 fs/btrfs/async-thread.h  | 119 ++-
 fs/btrfs/ctree.h |  39 ++-
 fs/btrfs/delayed-inode.c |   6 +-
 fs/btrfs/disk-io.c   | 212 +---
 fs/btrfs/extent-tree.c   |   4 +-
 fs/btrfs/inode.c |  38 +--
 fs/btrfs/ordered-data.c  |  11 +-
 fs/btrfs/qgroup.c|  15 +-
 fs/btrfs/raid56.c|  21 +-
 fs/btrfs/reada.c |   4 +-
 fs/btrfs/scrub.c |  70 ++--
 fs/btrfs/super.c |  36 +-
 fs/btrfs/volumes.c   |  16 +-
 14 files changed, 446 insertions(+), 975 deletions(-)

-- 
1.9.0

--
To unsubscribe from this list: send the line unsubscribe linux-btrfs in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html