diff options
author | Chris Mason <chris.mason@oracle.com> | 2008-06-11 20:21:24 -0400 |
---|---|---|
committer | Chris Mason <chris.mason@oracle.com> | 2008-09-25 11:04:03 -0400 |
commit | 35d8ba66294ff2a53c17337a1aa1ff6739492f41 (patch) | |
tree | 40297c7917bb0425e76030e54418a934b1225299 /fs/btrfs/async-thread.h | |
parent | d05e5a4dad985acc938e62d9752c813647dedd9d (diff) |
Btrfs: Worker thread optimizations
This changes the worker thread pool to maintain a list of idle threads,
avoiding a complex search for a good thread to wake up.
Threads have two states:
idle - we try to reuse the last thread used in hopes of improving the batching
ratios
busy - each time a new work item is added to a busy task, the task is
rotated to the end of the line.
Signed-off-by: Chris Mason <chris.mason@oracle.com>
Diffstat (limited to 'fs/btrfs/async-thread.h')
-rw-r--r-- | fs/btrfs/async-thread.h | 7 |
1 files changed, 4 insertions, 3 deletions
diff --git a/fs/btrfs/async-thread.h b/fs/btrfs/async-thread.h index 52fc9da0f9e7..3436ff897597 100644 --- a/fs/btrfs/async-thread.h +++ b/fs/btrfs/async-thread.h | |||
@@ -60,11 +60,12 @@ struct btrfs_workers { | |||
60 | /* max number of workers allowed. changed by btrfs_start_workers */ | 60 | /* max number of workers allowed. changed by btrfs_start_workers */ |
61 | int max_workers; | 61 | int max_workers; |
62 | 62 | ||
63 | /* once a worker has this many requests or fewer, it is idle */ | ||
64 | int idle_thresh; | ||
65 | |||
63 | /* list with all the work threads */ | 66 | /* list with all the work threads */ |
64 | struct list_head worker_list; | 67 | struct list_head worker_list; |
65 | 68 | struct list_head idle_list; | |
66 | /* the last worker thread to have something queued */ | ||
67 | struct btrfs_worker_thread *last; | ||
68 | 69 | ||
69 | /* lock for finding the next worker thread to queue on */ | 70 | /* lock for finding the next worker thread to queue on */ |
70 | spinlock_t lock; | 71 | spinlock_t lock; |