diff options
Diffstat (limited to 'block/blk-cgroup.h')
-rw-r--r-- | block/blk-cgroup.h | 39 |
1 files changed, 31 insertions, 8 deletions
diff --git a/block/blk-cgroup.h b/block/blk-cgroup.h index fe445178f586..5c5e5294b506 100644 --- a/block/blk-cgroup.h +++ b/block/blk-cgroup.h | |||
@@ -23,6 +23,14 @@ extern struct cgroup_subsys blkio_subsys; | |||
23 | #define blkio_subsys_id blkio_subsys.subsys_id | 23 | #define blkio_subsys_id blkio_subsys.subsys_id |
24 | #endif | 24 | #endif |
25 | 25 | ||
26 | enum io_type { | ||
27 | IO_READ = 0, | ||
28 | IO_WRITE, | ||
29 | IO_SYNC, | ||
30 | IO_ASYNC, | ||
31 | IO_TYPE_MAX | ||
32 | }; | ||
33 | |||
26 | struct blkio_cgroup { | 34 | struct blkio_cgroup { |
27 | struct cgroup_subsys_state css; | 35 | struct cgroup_subsys_state css; |
28 | unsigned int weight; | 36 | unsigned int weight; |
@@ -30,6 +38,23 @@ struct blkio_cgroup { | |||
30 | struct hlist_head blkg_list; | 38 | struct hlist_head blkg_list; |
31 | }; | 39 | }; |
32 | 40 | ||
41 | struct blkio_group_stats { | ||
42 | /* total disk time and nr sectors dispatched by this group */ | ||
43 | uint64_t time; | ||
44 | uint64_t sectors; | ||
45 | /* Total disk time used by IOs in ns */ | ||
46 | uint64_t io_service_time[IO_TYPE_MAX]; | ||
47 | uint64_t io_service_bytes[IO_TYPE_MAX]; /* Total bytes transferred */ | ||
48 | /* Total IOs serviced, post merge */ | ||
49 | uint64_t io_serviced[IO_TYPE_MAX]; | ||
50 | /* Total time spent waiting in scheduler queue in ns */ | ||
51 | uint64_t io_wait_time[IO_TYPE_MAX]; | ||
52 | #ifdef CONFIG_DEBUG_BLK_CGROUP | ||
53 | /* How many times this group has been removed from service tree */ | ||
54 | unsigned long dequeue; | ||
55 | #endif | ||
56 | }; | ||
57 | |||
33 | struct blkio_group { | 58 | struct blkio_group { |
34 | /* An rcu protected unique identifier for the group */ | 59 | /* An rcu protected unique identifier for the group */ |
35 | void *key; | 60 | void *key; |
@@ -38,15 +63,13 @@ struct blkio_group { | |||
38 | #ifdef CONFIG_DEBUG_BLK_CGROUP | 63 | #ifdef CONFIG_DEBUG_BLK_CGROUP |
39 | /* Store cgroup path */ | 64 | /* Store cgroup path */ |
40 | char path[128]; | 65 | char path[128]; |
41 | /* How many times this group has been removed from service tree */ | ||
42 | unsigned long dequeue; | ||
43 | #endif | 66 | #endif |
44 | /* The device MKDEV(major, minor), this group has been created for */ | 67 | /* The device MKDEV(major, minor), this group has been created for */ |
45 | dev_t dev; | 68 | dev_t dev; |
46 | 69 | ||
47 | /* total disk time and nr sectors dispatched by this group */ | 70 | /* Need to serialize the stats in the case of reset/update */ |
48 | unsigned long time; | 71 | spinlock_t stats_lock; |
49 | unsigned long sectors; | 72 | struct blkio_group_stats stats; |
50 | }; | 73 | }; |
51 | 74 | ||
52 | typedef void (blkio_unlink_group_fn) (void *key, struct blkio_group *blkg); | 75 | typedef void (blkio_unlink_group_fn) (void *key, struct blkio_group *blkg); |
@@ -105,8 +128,8 @@ extern void blkiocg_add_blkio_group(struct blkio_cgroup *blkcg, | |||
105 | extern int blkiocg_del_blkio_group(struct blkio_group *blkg); | 128 | extern int blkiocg_del_blkio_group(struct blkio_group *blkg); |
106 | extern struct blkio_group *blkiocg_lookup_group(struct blkio_cgroup *blkcg, | 129 | extern struct blkio_group *blkiocg_lookup_group(struct blkio_cgroup *blkcg, |
107 | void *key); | 130 | void *key); |
108 | void blkiocg_update_blkio_group_stats(struct blkio_group *blkg, | 131 | void blkiocg_update_timeslice_used(struct blkio_group *blkg, |
109 | unsigned long time); | 132 | unsigned long time); |
110 | #else | 133 | #else |
111 | struct cgroup; | 134 | struct cgroup; |
112 | static inline struct blkio_cgroup * | 135 | static inline struct blkio_cgroup * |
@@ -122,7 +145,7 @@ blkiocg_del_blkio_group(struct blkio_group *blkg) { return 0; } | |||
122 | 145 | ||
123 | static inline struct blkio_group * | 146 | static inline struct blkio_group * |
124 | blkiocg_lookup_group(struct blkio_cgroup *blkcg, void *key) { return NULL; } | 147 | blkiocg_lookup_group(struct blkio_cgroup *blkcg, void *key) { return NULL; } |
125 | static inline void blkiocg_update_blkio_group_stats(struct blkio_group *blkg, | 148 | static inline void blkiocg_update_timeslice_used(struct blkio_group *blkg, |
126 | unsigned long time) {} | 149 | unsigned long time) {} |
127 | #endif | 150 | #endif |
128 | #endif /* _BLK_CGROUP_H */ | 151 | #endif /* _BLK_CGROUP_H */ |