Skip to contentSkip to conversation

blkparse: Add PC requests to depth trace

PATCH New Christof Schmitt 1 participant 3 messages Jan 7, 2008 – Feb 29, 2008

lore
Share & tools
lore
#0 lore raw

PATCH 1/2 blkparse: Add PC requests to depth trace

From: Christof Schmitt <[email protected]>

The PC requests use the same queue and also contribute to the queue length, so they should be added to the queue depth trace.

blkparse.c +17 -2
@@ -1347,8 +1347,10 @@ static void log_pc(struct per_cpu_info *
 	process_fmt(act, pci, t, -1ULL, t->pdu_len, buf);
 }
 
-static void dump_trace_pc(struct blk_io_trace *t, struct per_cpu_info *pci)
+static void dump_trace_pc(struct blk_io_trace *t, struct per_dev_info *pdi,
+			  struct per_cpu_info *pci)
 {
+	int w = (t->action & BLK_TC_ACT(BLK_TC_WRITE)) != 0;
 	int act = t->action & 0xffff;
 
 	switch (act) {
@@ -1362,12 +1364,25 @@ static void dump_trace_pc(struct blk_io_
 			log_generic(pci, t, "S");
 			break;
 		case __BLK_TA_REQUEUE:
+			/*
+			 * can happen if we miss traces, don't let it go
+			 * below zero
+			 */
+			if (pdi->cur_depth[w])
+				pdi->cur_depth[w]--;
 			log_generic(pci, t, "R");
 			break;
 		case __BLK_TA_ISSUE:
+			pdi->cur_depth[w]++;
+			if (pdi->cur_depth[w] > pdi->max_depth[w])
+				pdi->max_depth[w] = pdi->cur_depth[w];
+
 			log_pc(pci, t, "D");
 			break;
 		case __BLK_TA_COMPLETE:
+			if (pdi->cur_depth[w])
+				pdi->cur_depth[w]--;
+
 			log_pc(pci, t, "C");
 			break;
 		case __BLK_TA_INSERT:
@@ -1463,7 +1478,7 @@ static void dump_trace(struct blk_io_tra
 {
 	if (text_output) {
 		if (t->action & BLK_TC_ACT(BLK_TC_PC))
-			dump_trace_pc(t, pci);
+			dump_trace_pc(t, pdi, pci);
 		else
 			dump_trace_fs(t, pdi, pci);
 	}
#1 lore raw

PATCH 1/2 blkparse: Add PC requests to depth trace

The PC requests use the same queue and also contribute to the queue length, so they should be added to the queue depth trace.

blkparse.c +15 -2
@@ -1347,8 +1347,10 @@ static void log_pc(struct per_cpu_info *
 	process_fmt(act, pci, t, -1ULL, t->pdu_len, buf);
 }
 
-static void dump_trace_pc(struct blk_io_trace *t, struct per_cpu_info *pci)
+static void dump_trace_pc(struct blk_io_trace *t, struct per_dev_info *pdi,
+			  struct per_cpu_info *pci)
 {
+	int w = (t->action & BLK_TC_ACT(BLK_TC_WRITE)) != 0;
 	int act = t->action & 0xffff;
 
 	switch (act) {
@@ -1362,12 +1364,23 @@ static void dump_trace_pc(struct blk_io_
 			log_generic(pci, t, "S");
 			break;
 		case __BLK_TA_REQUEUE:
+			/*
+			 * can happen if we miss traces, don't let it go
+			 * below zero
+			 */
+			if (pdi->cur_depth[w])
+				pdi->cur_depth[w]--;
 			log_generic(pci, t, "R");
 			break;
 		case __BLK_TA_ISSUE:
+			pdi->cur_depth[w]++;
+			if (pdi->cur_depth[w] > pdi->max_depth[w])
+				pdi->max_depth[w] = pdi->cur_depth[w];
 			log_pc(pci, t, "D");
 			break;
 		case __BLK_TA_COMPLETE:
+			if (pdi->cur_depth[w])
+				pdi->cur_depth[w]--;
 			log_pc(pci, t, "C");
 			break;
 		case __BLK_TA_INSERT:
@@ -1463,7 +1476,7 @@ static void dump_trace(struct blk_io_tra
 {
 	if (text_output) {
 		if (t->action & BLK_TC_ACT(BLK_TC_PC))
-			dump_trace_pc(t, pci);
+			dump_trace_pc(t, pdi, pci);
 		else
 			dump_trace_fs(t, pdi, pci);
 	}
#2 lore raw

PATCH 1/2 blkparse: Add PC requests to depth trace

In reply to Christof Schmitt

The PC requests use the same queue and also contribute to the queue length, so they should be added to the queue depth trace.

blkparse.c +15 -2
@@ -1347,8 +1347,10 @@ static void log_pc(struct per_cpu_info *
 	process_fmt(act, pci, t, -1ULL, t->pdu_len, buf);
 }
 
-static void dump_trace_pc(struct blk_io_trace *t, struct per_cpu_info *pci)
+static void dump_trace_pc(struct blk_io_trace *t, struct per_dev_info *pdi,
+			  struct per_cpu_info *pci)
 {
+	int w = (t->action & BLK_TC_ACT(BLK_TC_WRITE)) != 0;
 	int act = t->action & 0xffff;
 
 	switch (act) {
@@ -1362,12 +1364,23 @@ static void dump_trace_pc(struct blk_io_
 			log_generic(pci, t, "S");
 			break;
 		case __BLK_TA_REQUEUE:
+			/*
+			 * can happen if we miss traces, don't let it go
+			 * below zero
+			 */
+			if (pdi->cur_depth[w])
+				pdi->cur_depth[w]--;
 			log_generic(pci, t, "R");
 			break;
 		case __BLK_TA_ISSUE:
+			pdi->cur_depth[w]++;
+			if (pdi->cur_depth[w] > pdi->max_depth[w])
+				pdi->max_depth[w] = pdi->cur_depth[w];
 			log_pc(pci, t, "D");
 			break;
 		case __BLK_TA_COMPLETE:
+			if (pdi->cur_depth[w])
+				pdi->cur_depth[w]--;
 			log_pc(pci, t, "C");
 			break;
 		case __BLK_TA_INSERT:
@@ -1463,7 +1476,7 @@ static void dump_trace(struct blk_io_tra
 {
 	if (text_output) {
 		if (t->action & BLK_TC_ACT(BLK_TC_PC))
-			dump_trace_pc(t, pci);
+			dump_trace_pc(t, pdi, pci);
 		else
 			dump_trace_fs(t, pdi, pci);
 	}