extern BlueSkyFS *fs;
static int outstanding_rpcs = 0;
+static struct bluesky_stats *rpc_recv_stats, *rpc_send_stats;
/* TCP port number to use for NFS protocol. (Should be 2049.) */
#define NFS_SERVICE_PORT 2051
async_rpc_flush(req->connection);
g_mutex_unlock(req->connection->send_lock);
+ bluesky_profile_free(req->profile);
+
if (req->args != NULL) {
char buf[4];
XDR xdr;
/* For UDP, a connection only exists for the duration of a single
* message. */
g_mutex_free(req->connection->send_lock);
+ g_string_free(req->connection->msgbuf, TRUE);
g_string_free(req->connection->sendbuf, TRUE);
g_free(req->connection);
}
{
bluesky_time_hires time_end;
+ bluesky_profile_add_event(req->profile,
+ g_strdup("Start encoding NFS response"));
+
GString *str = g_string_new("");
XDR xdr_out;
xdr_string_create(&xdr_out, str, XDR_ENCODE);
}
g_atomic_int_add(&outstanding_rpcs, -1);
+ bluesky_stats_add(rpc_send_stats, str->len);
struct rpc_reply header;
header.xid = htonl(req->xid);
req->xid, time_end - req->time_start);
#endif
+ bluesky_profile_add_event(req->profile,
+ g_strdup("NFS reply sent"));
+ bluesky_profile_print(req->profile);
+
/* Clean up. */
+ bluesky_profile_free(req->profile);
g_string_free(str, TRUE);
if (req->args != NULL) {
/* For UDP, a connection only exists for the duration of a single
* message. */
g_mutex_free(req->connection->send_lock);
+ g_string_free(req->connection->msgbuf, TRUE);
g_string_free(req->connection->sendbuf, TRUE);
g_free(req->connection);
}
xdrproc_t _xdr_argument, _xdr_result;
char *(*local)(char *, RPCRequest *);
-#if 0
+ bluesky_profile_set(req->profile);
+
if (req->req_proc < sizeof(nfs_proc_names) / sizeof(const char *)) {
- printf("Dispatched NFS RPC message type %s\n",
- nfs_proc_names[req->req_proc]);
- } else {
- printf("Dispatched unknown NFS RPC message type %d\n", req->req_proc);
+ bluesky_profile_add_event(
+ req->profile,
+ g_strdup_printf("Dispatching NFS %s request",
+ nfs_proc_names[req->req_proc])
+ );
}
-#endif
switch (req->req_proc) {
case NFSPROC3_NULL:
if (fs_dump_requested) {
bluesky_debug_dump(fs);
+ bluesky_stats_dump_all();
fs_dump_requested = 0;
}
GString *msg = rpc->msgbuf;
const char *buf = msg->str;
+ bluesky_stats_add(rpc_recv_stats, msg->len);
+
if (msg->len < sizeof(struct rpc_call_header)) {
fprintf(stderr, "Short RPC message: only %zd bytes!\n", msg->len);
return FALSE;
RPCRequest *req = g_new0(RPCRequest, 1);
req->connection = rpc;
- req->time_start = time_start;
+ req->profile = bluesky_profile_new();
+ bluesky_profile_add_event(req->profile, g_strdup("Receive NFS request"));
req->xid = xid;
if (ntohl(header->prog) != NFS_PROGRAM) {
{
SVCXPRT *transp;
+ rpc_recv_stats = bluesky_stats_new("NFS RPC Messages In");
+ rpc_send_stats = bluesky_stats_new("NFS RPC Messages Out");
+
async_rpc_init();
/* MOUNT protocol */