diff options
| author | Shaohua Li <shaohua.li@intel.com> | 2012-12-15 22:38:11 -0800 |
|---|---|---|
| committer | Moyster <oysterized@gmail.com> | 2016-09-13 13:13:52 +0200 |
| commit | a435b17b1c4c8c08e048a54e83a1c173490db330 (patch) | |
| tree | 2cf55dfcf73621248081f172694d6a40f3770441 | |
| parent | 3f2850057dcc9bf82b4354422aa428f1c5392609 (diff) | |
block: fiops add some trace information
Add some trace information, which is helpful when I do debugging.
Change-Id: Ib1082fc2547fd56c2fadbb7a9596a3dc4c7b15c8
Signed-off-by: Shaohua Li <shaohua.li@intel.com>
| -rw-r--r-- | block/fiops-iosched.c | 19 |
1 files changed, 18 insertions, 1 deletions
diff --git a/block/fiops-iosched.c b/block/fiops-iosched.c index be54a9c70..671b1d331 100644 --- a/block/fiops-iosched.c +++ b/block/fiops-iosched.c @@ -10,6 +10,7 @@ #include <linux/jiffies.h> #include <linux/rbtree.h> #include <linux/ioprio.h> +#include <linux/blktrace_api.h> #include "blk.h" #define VIOS_SCALE_SHIFT 10 @@ -99,6 +100,11 @@ FIOPS_IOC_FNS(on_rr); FIOPS_IOC_FNS(prio_changed); #undef FIOPS_IOC_FNS +#define fiops_log_ioc(fiopsd, ioc, fmt, args...) \ + blk_add_trace_msg((fiopsd)->queue, "ioc%d " fmt, (ioc)->pid, ##args) +#define fiops_log(fiopsd, fmt, args...) \ + blk_add_trace_msg((fiopsd)->queue, "fiops " fmt, ##args) + enum wl_prio_t fiops_wl_type(short prio_class) { if (prio_class == IOPRIO_CLASS_RT) @@ -200,6 +206,8 @@ static void fiops_service_tree_add(struct fiops_data *fiopsd, ioc->service_tree = NULL; } + fiops_log_ioc(fiopsd, ioc, "service tree add, vios %lld", vios); + left = 1; parent = NULL; ioc->service_tree = service_tree; @@ -393,8 +401,12 @@ static struct fiops_ioc *fiops_select_ioc(struct fiops_data *fiopsd) * to be starved, don't delay */ if (!rq_is_sync(rq) && fiopsd->in_flight[1] != 0 && - service_tree->count == 1) + service_tree->count == 1) { + fiops_log_ioc(fiopsd, ioc, + "postpone async, in_flight async %d sync %d", + fiopsd->in_flight[0], fiopsd->in_flight[1]); return NULL; + } return ioc; } @@ -405,6 +417,8 @@ static void fiops_charge_vios(struct fiops_data *fiopsd, struct fiops_rb_root *service_tree = ioc->service_tree; ioc->vios += vios; + fiops_log_ioc(fiopsd, ioc, "charge vios %lld, new vios %lld", vios, ioc->vios); + if (RB_EMPTY_ROOT(&ioc->sort_list)) fiops_del_ioc_rr(fiopsd, ioc); else @@ -498,6 +512,9 @@ static void fiops_completed_request(struct request_queue *q, struct request *rq) fiopsd->in_flight[rq_is_sync(rq)]--; ioc->in_flight--; + fiops_log_ioc(fiopsd, ioc, "in_flight %d, busy queues %d", + ioc->in_flight, fiopsd->busy_queues); + if (fiopsd->in_flight[0] + fiopsd->in_flight[1] == 0) fiops_schedule_dispatch(fiopsd); } |
