[PATCH] Support for readahead tracing
authorNathan Scott <nathans@sgi.com>
Thu, 6 Jul 2006 08:04:23 +0000 (10:04 +0200)
committerJens Axboe <axboe@suse.de>
Thu, 6 Jul 2006 08:04:23 +0000 (10:04 +0200)
These are the userspace changes to allow blktrace to distinguish
readahead from non-readahead reads.

act_mask.c
blkparse_fmt.c
blkrawverify.c
blktrace_api.h

index f2767bdebe8a43841b038a0794624b2e1374bfb2..8fdf1d9c7456f1f3c9f4e57b9ee693170d76958b 100644 (file)
@@ -23,6 +23,7 @@ static struct mask_map mask_maps[] = {
        DECLARE_MASK_MAP(COMPLETE),
        DECLARE_MASK_MAP(FS),
        DECLARE_MASK_MAP(PC),
+       DECLARE_MASK_MAP(AHEAD),
 };
 
 int find_mask_map(char *string)
index fe788b5acd968065a9d68e70ca7b402bb3f57bb5..fdbe2dd79ed28f9c4eb6a5ea091816f795cd1ee1 100644 (file)
@@ -63,6 +63,7 @@ int add_format_spec(char *option)
 static inline void fill_rwbs(char *rwbs, struct blk_io_trace *t)
 {
        int w = t->action & BLK_TC_ACT(BLK_TC_WRITE);
+       int a = t->action & BLK_TC_ACT(BLK_TC_AHEAD);
        int b = t->action & BLK_TC_ACT(BLK_TC_BARRIER);
        int s = t->action & BLK_TC_ACT(BLK_TC_SYNC);
        int i = 0;
@@ -71,6 +72,8 @@ static inline void fill_rwbs(char *rwbs, struct blk_io_trace *t)
                rwbs[i++] = 'W';
        else
                rwbs[i++] = 'R';
+       if (a)
+               rwbs[i++] = 'A';
        if (b)
                rwbs[i++] = 'B';
        if (s)
index 93e8efa8312769bc19bada65bbb816d879ae9da6..09100c7ebf7f061b7989dc53f8f4366fccc026bc 100644 (file)
@@ -46,7 +46,8 @@ static struct trace_info traces[] = {
        TRACE_TO_STRING( BLK_TC_ISSUE ),
        TRACE_TO_STRING( BLK_TC_COMPLETE ),
        TRACE_TO_STRING( BLK_TC_FS ),
-       TRACE_TO_STRING( BLK_TC_PC )
+       TRACE_TO_STRING( BLK_TC_PC ),
+       TRACE_TO_STRING( BLK_TC_AHEAD ),
 };
 #define N_TRACES (sizeof(traces) / sizeof(struct trace_info))
 
index 1aaf0fe36d71054569b3ac569e3db73472772a63..fb7ef90252655f0a97e98465cf6ca1f1ceda5a88 100644 (file)
@@ -10,7 +10,7 @@ enum {
        BLK_TC_READ     = 1 << 0,       /* reads */
        BLK_TC_WRITE    = 1 << 1,       /* writes */
        BLK_TC_BARRIER  = 1 << 2,       /* barrier */
-       BLK_TC_SYNC     = 1 << 3,       /* barrier */
+       BLK_TC_SYNC     = 1 << 3,       /* sync */
        BLK_TC_QUEUE    = 1 << 4,       /* queueing/merging */
        BLK_TC_REQUEUE  = 1 << 5,       /* requeueing */
        BLK_TC_ISSUE    = 1 << 6,       /* issue */
@@ -18,6 +18,7 @@ enum {
        BLK_TC_FS       = 1 << 8,       /* fs requests */
        BLK_TC_PC       = 1 << 9,       /* pc requests */
        BLK_TC_NOTIFY   = 1 << 10,      /* special message */
+       BLK_TC_AHEAD    = 1 << 11,      /* readahead */
 
        BLK_TC_END      = 1 << 15,      /* only 16-bits, reminder */
 };