At Sun, 25 Aug 2013 20:27:27 +0800, Liu Yuan wrote: > > Add a new struct sd_stat to monitor the activities of the sheep daemon, which > are read by the dog. Currently it is very crude and monitors only request. > > Signed-off-by: Liu Yuan <[email protected]> > --- > include/internal_proto.h | 13 +++++++++++++ > sheep/request.c | 33 +++++++++++++++++++++++++++++++++ > sheep/sheep_priv.h | 1 + > 3 files changed, 47 insertions(+) > > diff --git a/include/internal_proto.h b/include/internal_proto.h > index 2c24a52..adb9646 100644 > --- a/include/internal_proto.h > +++ b/include/internal_proto.h > @@ -215,4 +215,17 @@ struct object_cache_info { > uint8_t directio; > }; > > +struct sd_stat { > + struct s_request{ > + uint64_t gway_active_nr; /* nr of running request */ > + uint64_t peer_active_nr; > + uint64_t gway_total_nr; /* Total nr of requests received */ > + uint64_t peer_total_nr; > + uint64_t gway_total_rx; /* Data in */ > + uint64_t gway_total_tx; /* Data out */ > + uint64_t peer_total_rx; > + uint64_t peer_total_tx; > + } r; > +}; > + > #endif /* __INTERNAL_PROTO_H__ */ > diff --git a/sheep/request.c b/sheep/request.c > index a79f648..112258a 100644 > --- a/sheep/request.c > +++ b/sheep/request.c > @@ -315,6 +315,35 @@ static void queue_local_request(struct request *req) > queue_work(sys->io_wqueue, &req->work); > } > > +static inline void stat_request_begin(struct request *req) > +{ > + struct sd_req *hdr = &req->rq; > + > + if (is_peer_op(req->op)) { > + sys->stat.r.peer_total_nr++; > + sys->stat.r.peer_active_nr++; > + if (hdr->flags & SD_FLAG_CMD_WRITE) > + sys->stat.r.peer_total_rx += hdr->data_length; > + else > + sys->stat.r.peer_total_tx += hdr->data_length; > + } else if(is_gateway_op(req->op)) { > + sys->stat.r.gway_total_nr++; > + sys->stat.r.gway_active_nr++; > + if (hdr->flags & SD_FLAG_CMD_WRITE) > + sys->stat.r.gway_total_rx += hdr->data_length; > + else > + sys->stat.r.gway_total_tx += hdr->data_length; > + } > +} > + > +static inline void stat_request_end(struct request *req) > +{ > + if (is_peer_op(req->op)) > + sys->stat.r.peer_active_nr--; > + else if(is_gateway_op(req->op)) > + sys->stat.r.gway_active_nr--; > +} > +
The above two functions should be annotated with main_fn. BTW, why should they be inline? Thanks, Hitoshi -- sheepdog mailing list [email protected] http://lists.wpkg.org/mailman/listinfo/sheepdog
