Loading block/Kconfig +9 −0 Original line number Diff line number Diff line Loading @@ -90,6 +90,15 @@ config BLK_CGROUP control disk bandwidth allocation (proportional time slice allocation) to such task groups. config DEBUG_BLK_CGROUP bool depends on BLK_CGROUP default n ---help--- Enable some debugging help. Currently it stores the cgroup path in the blk group which can be used by cfq for tracing various group related activity. endif # BLOCK config BLOCK_COMPAT Loading block/Kconfig.iosched +9 −0 Original line number Diff line number Diff line Loading @@ -40,6 +40,15 @@ config CFQ_GROUP_IOSCHED ---help--- Enable group IO scheduling in CFQ. config DEBUG_CFQ_IOSCHED bool "Debug CFQ Scheduling" depends on CFQ_GROUP_IOSCHED select DEBUG_BLK_CGROUP default n ---help--- Enable CFQ IO scheduling debugging in CFQ. Currently it makes blktrace output more verbose. choice prompt "Default I/O scheduler" default DEFAULT_CFQ Loading block/blk-cgroup.c +4 −0 Original line number Diff line number Diff line Loading @@ -33,6 +33,10 @@ void blkiocg_add_blkio_group(struct blkio_cgroup *blkcg, blkg->blkcg_id = css_id(&blkcg->css); hlist_add_head_rcu(&blkg->blkcg_node, &blkcg->blkg_list); spin_unlock_irqrestore(&blkcg->lock, flags); #ifdef CONFIG_DEBUG_BLK_CGROUP /* Need to take css reference ? */ cgroup_path(blkcg->css.cgroup, blkg->path, sizeof(blkg->path)); #endif } static void __blkiocg_del_blkio_group(struct blkio_group *blkg) Loading block/blk-cgroup.h +13 −0 Original line number Diff line number Diff line Loading @@ -27,12 +27,25 @@ struct blkio_group { void *key; struct hlist_node blkcg_node; unsigned short blkcg_id; #ifdef CONFIG_DEBUG_BLK_CGROUP /* Store cgroup path */ char path[128]; #endif }; #define BLKIO_WEIGHT_MIN 100 #define BLKIO_WEIGHT_MAX 1000 #define BLKIO_WEIGHT_DEFAULT 500 #ifdef CONFIG_DEBUG_BLK_CGROUP static inline char *blkg_path(struct blkio_group *blkg) { return blkg->path; } #else static inline char *blkg_path(struct blkio_group *blkg) { return NULL; } #endif #ifdef CONFIG_BLK_CGROUP extern struct blkio_cgroup blkio_root_cgroup; extern struct blkio_cgroup *cgroup_to_blkio_cgroup(struct cgroup *cgroup); Loading block/cfq-iosched.c +18 −1 Original line number Diff line number Diff line Loading @@ -341,8 +341,21 @@ CFQ_CFQQ_FNS(coop); CFQ_CFQQ_FNS(deep); #undef CFQ_CFQQ_FNS #ifdef CONFIG_DEBUG_CFQ_IOSCHED #define cfq_log_cfqq(cfqd, cfqq, fmt, args...) \ blk_add_trace_msg((cfqd)->queue, "cfq%d%c %s " fmt, (cfqq)->pid, \ cfq_cfqq_sync((cfqq)) ? 'S' : 'A', \ blkg_path(&(cfqq)->cfqg->blkg), ##args); #define cfq_log_cfqg(cfqd, cfqg, fmt, args...) \ blk_add_trace_msg((cfqd)->queue, "%s " fmt, \ blkg_path(&(cfqg)->blkg), ##args); \ #else #define cfq_log_cfqq(cfqd, cfqq, fmt, args...) \ blk_add_trace_msg((cfqd)->queue, "cfq%d " fmt, (cfqq)->pid, ##args) #define cfq_log_cfqg(cfqd, cfqg, fmt, args...) do {} while (0); #endif #define cfq_log(cfqd, fmt, args...) \ blk_add_trace_msg((cfqd)->queue, "cfq " fmt, ##args) Loading Loading @@ -832,6 +845,7 @@ cfq_group_service_tree_del(struct cfq_data *cfqd, struct cfq_group *cfqg) if (cfqg->nr_cfqq) return; cfq_log_cfqg(cfqd, cfqg, "del_from_rr group"); cfqg->on_st = false; cfqd->nr_groups--; st->total_weight -= cfqg->weight; Loading Loading @@ -889,6 +903,9 @@ static void cfq_group_served(struct cfq_data *cfqd, struct cfq_group *cfqg, cfqg->saved_serving_prio = cfqd->serving_prio; } else cfqg->saved_workload_slice = 0; cfq_log_cfqg(cfqd, cfqg, "served: vt=%llu min_vt=%llu", cfqg->vdisktime, st->min_vdisktime); } #ifdef CONFIG_CFQ_GROUP_IOSCHED Loading Loading @@ -3102,7 +3119,7 @@ static void cfq_completed_request(struct request_queue *q, struct request *rq) unsigned long now; now = jiffies; cfq_log_cfqq(cfqd, cfqq, "complete"); cfq_log_cfqq(cfqd, cfqq, "complete rqnoidle %d", !!rq_noidle(rq)); cfq_update_hw_tag(cfqd); Loading Loading
block/Kconfig +9 −0 Original line number Diff line number Diff line Loading @@ -90,6 +90,15 @@ config BLK_CGROUP control disk bandwidth allocation (proportional time slice allocation) to such task groups. config DEBUG_BLK_CGROUP bool depends on BLK_CGROUP default n ---help--- Enable some debugging help. Currently it stores the cgroup path in the blk group which can be used by cfq for tracing various group related activity. endif # BLOCK config BLOCK_COMPAT Loading
block/Kconfig.iosched +9 −0 Original line number Diff line number Diff line Loading @@ -40,6 +40,15 @@ config CFQ_GROUP_IOSCHED ---help--- Enable group IO scheduling in CFQ. config DEBUG_CFQ_IOSCHED bool "Debug CFQ Scheduling" depends on CFQ_GROUP_IOSCHED select DEBUG_BLK_CGROUP default n ---help--- Enable CFQ IO scheduling debugging in CFQ. Currently it makes blktrace output more verbose. choice prompt "Default I/O scheduler" default DEFAULT_CFQ Loading
block/blk-cgroup.c +4 −0 Original line number Diff line number Diff line Loading @@ -33,6 +33,10 @@ void blkiocg_add_blkio_group(struct blkio_cgroup *blkcg, blkg->blkcg_id = css_id(&blkcg->css); hlist_add_head_rcu(&blkg->blkcg_node, &blkcg->blkg_list); spin_unlock_irqrestore(&blkcg->lock, flags); #ifdef CONFIG_DEBUG_BLK_CGROUP /* Need to take css reference ? */ cgroup_path(blkcg->css.cgroup, blkg->path, sizeof(blkg->path)); #endif } static void __blkiocg_del_blkio_group(struct blkio_group *blkg) Loading
block/blk-cgroup.h +13 −0 Original line number Diff line number Diff line Loading @@ -27,12 +27,25 @@ struct blkio_group { void *key; struct hlist_node blkcg_node; unsigned short blkcg_id; #ifdef CONFIG_DEBUG_BLK_CGROUP /* Store cgroup path */ char path[128]; #endif }; #define BLKIO_WEIGHT_MIN 100 #define BLKIO_WEIGHT_MAX 1000 #define BLKIO_WEIGHT_DEFAULT 500 #ifdef CONFIG_DEBUG_BLK_CGROUP static inline char *blkg_path(struct blkio_group *blkg) { return blkg->path; } #else static inline char *blkg_path(struct blkio_group *blkg) { return NULL; } #endif #ifdef CONFIG_BLK_CGROUP extern struct blkio_cgroup blkio_root_cgroup; extern struct blkio_cgroup *cgroup_to_blkio_cgroup(struct cgroup *cgroup); Loading
block/cfq-iosched.c +18 −1 Original line number Diff line number Diff line Loading @@ -341,8 +341,21 @@ CFQ_CFQQ_FNS(coop); CFQ_CFQQ_FNS(deep); #undef CFQ_CFQQ_FNS #ifdef CONFIG_DEBUG_CFQ_IOSCHED #define cfq_log_cfqq(cfqd, cfqq, fmt, args...) \ blk_add_trace_msg((cfqd)->queue, "cfq%d%c %s " fmt, (cfqq)->pid, \ cfq_cfqq_sync((cfqq)) ? 'S' : 'A', \ blkg_path(&(cfqq)->cfqg->blkg), ##args); #define cfq_log_cfqg(cfqd, cfqg, fmt, args...) \ blk_add_trace_msg((cfqd)->queue, "%s " fmt, \ blkg_path(&(cfqg)->blkg), ##args); \ #else #define cfq_log_cfqq(cfqd, cfqq, fmt, args...) \ blk_add_trace_msg((cfqd)->queue, "cfq%d " fmt, (cfqq)->pid, ##args) #define cfq_log_cfqg(cfqd, cfqg, fmt, args...) do {} while (0); #endif #define cfq_log(cfqd, fmt, args...) \ blk_add_trace_msg((cfqd)->queue, "cfq " fmt, ##args) Loading Loading @@ -832,6 +845,7 @@ cfq_group_service_tree_del(struct cfq_data *cfqd, struct cfq_group *cfqg) if (cfqg->nr_cfqq) return; cfq_log_cfqg(cfqd, cfqg, "del_from_rr group"); cfqg->on_st = false; cfqd->nr_groups--; st->total_weight -= cfqg->weight; Loading Loading @@ -889,6 +903,9 @@ static void cfq_group_served(struct cfq_data *cfqd, struct cfq_group *cfqg, cfqg->saved_serving_prio = cfqd->serving_prio; } else cfqg->saved_workload_slice = 0; cfq_log_cfqg(cfqd, cfqg, "served: vt=%llu min_vt=%llu", cfqg->vdisktime, st->min_vdisktime); } #ifdef CONFIG_CFQ_GROUP_IOSCHED Loading Loading @@ -3102,7 +3119,7 @@ static void cfq_completed_request(struct request_queue *q, struct request *rq) unsigned long now; now = jiffies; cfq_log_cfqq(cfqd, cfqq, "complete"); cfq_log_cfqq(cfqd, cfqq, "complete rqnoidle %d", !!rq_noidle(rq)); cfq_update_hw_tag(cfqd); Loading