diff options
Diffstat (limited to 'tapset/LKET/ioscheduler.stp')
-rwxr-xr-x | tapset/LKET/ioscheduler.stp | 139 |
1 files changed, 41 insertions, 98 deletions
diff --git a/tapset/LKET/ioscheduler.stp b/tapset/LKET/ioscheduler.stp index d9af8a53..72957b45 100755 --- a/tapset/LKET/ioscheduler.stp +++ b/tapset/LKET/ioscheduler.stp @@ -9,21 +9,41 @@ probe addevent.ioscheduler = addevent.ioscheduler.elv_next_request, addevent.ioscheduler.elv_add_request, addevent.ioscheduler.elv_completed_request -{ -} +{} - -/* when a request is retrieved from request queue */ probe addevent.ioscheduler.elv_next_request - += _addevent.ioscheduler.elv_next_request + = addevent.ioscheduler.elv_next_request.entry, + addevent.ioscheduler.elv_next_request.return +{} + +%{ +#include <linux/blkdev.h> +#include <linux/elevator.h> +%} + +/* when a request is retrieved from request queue */ +probe addevent.ioscheduler.elv_next_request.entry + += _addevent.ioscheduler.elv_next_request.entry { update_record() } -probe _addevent.ioscheduler.elv_next_request +probe _addevent.ioscheduler.elv_next_request.entry = ioscheduler.elv_next_request { - log_ioscheduler_tracedata_elv_next(HOOKID_IOSCHED_NEXT_REQ, $q) + log_ioscheduler_tracedata_elv_next_entry(elevator_name) +} + +probe addevent.ioscheduler.elv_next_request.return + += _addevent.ioscheduler.elv_next_request.return +{ + update_record() +} + +probe _addevent.ioscheduler.elv_next_request.return + = ioscheduler.elv_next_request.return +{ + log_ioscheduler_tracedata_elv_next_return(disk_major, disk_minor, req, req_flags) } @@ -37,7 +57,8 @@ probe addevent.ioscheduler.elv_add_request probe _addevent.ioscheduler.elv_add_request = ioscheduler.elv_add_request { - log_ioscheduler_tracedata_others(HOOKID_IOSCHED_ADD_REQ, $q, $rq) + log_ioscheduler_tracedata_others(HOOKID_IOSCHED_ADD_REQ, + elevator_name, disk_major, disk_minor, req, req_flags) } /* when a request is completed */ @@ -50,107 +71,29 @@ probe addevent.ioscheduler.elv_completed_request probe _addevent.ioscheduler.elv_completed_request = ioscheduler.elv_completed_request { - log_ioscheduler_tracedata_others(HOOKID_IOSCHED_COMPLETE_REQ, $q, $rq) + log_ioscheduler_tracedata_others(HOOKID_IOSCHED_ADD_REQ, + elevator_name, disk_major, disk_minor, req, req_flags) } - -%{ -#include <linux/blkdev.h> -#include <linux/elevator.h> -%} - -/* log the data specific to __elv_add_request and elv_remove_request */ -%( kernel_v >= "2.6.10" %? - -function log_ioscheduler_tracedata_others(var_id:long, var_q:long, var_rq:long) +function log_ioscheduler_tracedata_others(var_id:long, elv_name:string, major:long, + minor:long, rq:long, flag:long) %{ - struct request *rq = (struct request *)((long)THIS->var_rq); - struct request_queue *q = (struct request_queue *)((long)THIS->var_q); - - /* elevator name|major|minor|request|request_flags */ - - _lket_trace(_GROUP_IOSCHED, THIS->var_id, "%0s%1b%1b%8b%8b", - q->elevator->elevator_type->elevator_name, - (_FMT_)rq->rq_disk->major, (_FMT_)rq->rq_disk->first_minor, - (int64_t)((long)rq), (_FMT_)rq->flags); -%} - -%: - -function log_ioscheduler_tracedata_others(var_id:long, var_q:long, var_rq:long) -%{ - struct request *rq = (struct request *)((long)THIS->var_rq); - struct request_queue *q = (struct request_queue *)((long)THIS->var_q); - /* elevator name|major|minor|request|request_flags */ _lket_trace(_GROUP_IOSCHED, THIS->var_id, "%0s%1b%1b%8b%8b", - q->elevator.elevator_name, (_FMT_)rq->rq_disk->major, - (_FMT_)rq->rq_disk->first_minor, (int64_t)((long)rq), - (_FMT_)rq->flags); -%} - -%) + THIS->elv_name, THIS->major, THIS->minor, THIS->rq, THIS->flag); -/* log the data specific to elv_next_request, for kernel == 2.6.9 */ -%( kernel_v >= "2.6.10" %? +%} -/* log the data specific to elv_next_request , for kernel > 2.6.9*/ -function log_ioscheduler_tracedata_elv_next(var_id:long, var:long) +/* log the data specific to elv_next_request */ +function log_ioscheduler_tracedata_elv_next_entry(elv_name:string) %{ - - struct request_queue *q; - struct request *rq; - - q = (struct request_queue *)((long)THIS->var); - - /* If there is a request in the request queue: - elevator name|major|minor|request|req_flags - if there is no request in the request queue: - elevator name|empty|0|0 - */ - - if(list_empty(&(q->queue_head))) { - _lket_trace(_GROUP_IOSCHED, THIS->var_id, "%0s%1b%1b%8b%8b", - q->elevator->elevator_type->elevator_name, (_FMT_)-1, - (_FMT_)-1, (_FMT_)0, (_FMT_)0); - } else { - rq = list_entry_rq(q->queue_head.next); - _lket_trace(_GROUP_IOSCHED, THIS->var_id, "%0s%1b%1b%8b%8b", - q->elevator->elevator_type->elevator_name, (_FMT_)rq->rq_disk->major, - (_FMT_)rq->rq_disk->first_minor, (int64_t)((long)rq), - (_FMT_)rq->flags); - } - + _lket_trace(_GROUP_IOSCHED, _HOOKID_IOSCHED_NEXT_REQ_ENTRY, "%0s", THIS->elv_name); %} -%: - -function log_ioscheduler_tracedata_elv_next(var_id:long, var:long) +function log_ioscheduler_tracedata_elv_next_return(major:long, minor:long, req:long, req_flags:long) %{ - - struct request_queue *q; - struct request *rq; - - q = (struct request_queue *)((long)THIS->var); - - /* If there is a request in the request queue: - elevator name|major|minor|request|req_flags - if there is no request in the request queue: - elevator name|empty|0|0 - */ - if(list_empty(&(q->queue_head))) { - _lket_trace(_GROUP_IOSCHED, THIS->var_id, "%0s%1b%1b%8b%8b", - q->elevator.elevator_name, (_FMT_)-1, (_FMT_)-1, - (_FMT_)0, (_FMT_)0); - } else { - rq = list_entry_rq(q->queue_head.next); - _lket_trace(_GROUP_IOSCHED, THIS->var_id, "%0s%1b%1b%8b%8b", - q->elevator.elevator_name, (_FMT_)rq->rq_disk->major, - (_FMT_)rq->rq_disk->first_minor, (int64_t)((long)rq), - (_FMT_)rq->flags); - } - + _lket_trace(_GROUP_IOSCHED, _HOOKID_IOSCHED_NEXT_REQ_RETURN, "%1b%1b%8b%8b", + THIS->major, THIS->minor, THIS->req, THIS->req_flags); %} -%) |