From: pjkirner Date: Thu, 22 Sep 2005 21:29:33 +0000 (+0000) Subject: * ptllnd stats via /proc entry X-Git-Tag: v1_7_100~1^25~6^2~148 X-Git-Url: https://git.whamcloud.com/?a=commitdiff_plain;h=3c8c2af173e3674bbf724ba48f00bca36166eef6;p=fs%2Flustre-release.git * ptllnd stats via /proc entry * a few more stats. --- diff --git a/lnet/klnds/ptllnd/Makefile.in b/lnet/klnds/ptllnd/Makefile.in index 2435b58..45a37f1 100755 --- a/lnet/klnds/ptllnd/Makefile.in +++ b/lnet/klnds/ptllnd/Makefile.in @@ -2,6 +2,12 @@ MODULES := kptllnd EXTRA_POST_CFLAGS := @PTLLNDCPPFLAGS@ -kptllnd-objs := ptllnd_rx_buf.o ptllnd_tx.o ptllnd.o ptllnd_cb.o ptllnd_modparams.o ptllnd_peer.o +kptllnd-objs := ptllnd.o \ + ptllnd_cb.o \ + ptllnd_modparams.o \ + ptllnd_peer.o \ + ptllnd_proc.o \ + ptllnd_rx_buf.o \ + ptllnd_tx.o @INCLUDE_RULES@ diff --git a/lnet/klnds/ptllnd/ptllnd.c b/lnet/klnds/ptllnd/ptllnd.c index ebb9feb..e46de19 100755 --- a/lnet/klnds/ptllnd/ptllnd.c +++ b/lnet/klnds/ptllnd/ptllnd.c @@ -714,6 +714,7 @@ kptllnd_module_init (void) if (rc != 0) return rc; + kptllnd_proc_init(); lnet_register_lnd(&kptllnd_lnd); PJK_UT_MSG("<<<\n"); @@ -726,6 +727,7 @@ kptllnd_module_fini (void) PJK_UT_MSG(">>> %s %s\n",__DATE__,__TIME__); lnet_unregister_lnd(&kptllnd_lnd); + kptllnd_proc_fini(); kptllnd_tunables_fini(); kpttllnd_get_stats(); PJK_UT_MSG("<<<\n"); @@ -784,9 +786,13 @@ kptl_stats_t* kpttllnd_get_stats(void) LOGSTAT(kps_tx_allocated); LOGSTAT(kps_tx_released); LOGSTAT(kpt_tx_allocation_failed); - LOGSTAT(kpx_recv_delayed); - LOGSTAT(kpx_send_routing); - LOGSTAT(kpx_send_target_is_router); + LOGSTAT(kps_recv_delayed); + LOGSTAT(kps_send_routing); + LOGSTAT(kps_send_target_is_router); + LOGSTAT(kpt_send_put); + LOGSTAT(kps_send_get); + LOGSTAT(kps_send_immd); + LOGSTAT(kps_send_reply); return &kptllnd_stats; } diff --git a/lnet/klnds/ptllnd/ptllnd.h b/lnet/klnds/ptllnd/ptllnd.h index 3a89302..9aefb67 100755 --- a/lnet/klnds/ptllnd/ptllnd.h +++ b/lnet/klnds/ptllnd/ptllnd.h @@ -258,7 +258,7 @@ typedef struct kptl_tx /* transmit message */ lnet_kiov_t *tx_payload_kiov; unsigned int tx_payload_offset; int tx_payload_nob; - + } kptl_tx_t; @@ -340,9 +340,14 @@ typedef struct kptl_stats int kps_tx_allocated; int kps_tx_released; /* MP Safe*/ int kpt_tx_allocation_failed; - int kpx_recv_delayed; - int kpx_send_routing; - int kpx_send_target_is_router; + int kps_recv_delayed; + int kps_send_routing; + int kps_send_target_is_router; + int kpt_send_put; + int kps_send_get; + int kps_send_immd; + int kps_send_reply; + int kpt_send_reply_routed; }kptl_stats_t; /* @@ -415,6 +420,8 @@ int kptllnd_thread_start( int kptllnd_tunables_init(void); void kptllnd_tunables_fini(void); +void kptllnd_proc_init(void); +void kptllnd_proc_fini(void); const char *get_ev_type_string( int evtype); @@ -620,15 +627,15 @@ kptllnd_msg_unpack( /* * MISC SUPPORT FUNCTIONS */ - - + + typedef union { struct iovec iov[PTL_MD_MAX_IOV]; -#ifdef _USING_LUSTRE_PORTALS_ +#ifdef _USING_LUSTRE_PORTALS_ ptl_kiov_t kiov[PTL_MD_MAX_IOV]; -#endif -}tempiov_t; - +#endif +}tempiov_t; + void kptllnd_setup_md( diff --git a/lnet/klnds/ptllnd/ptllnd_cb.c b/lnet/klnds/ptllnd/ptllnd_cb.c index 34b3e8f..b547e0d 100644 --- a/lnet/klnds/ptllnd/ptllnd_cb.c +++ b/lnet/klnds/ptllnd/ptllnd_cb.c @@ -104,12 +104,12 @@ kptllnd_setup_md( payload_niov--; niov++; } - + md->start = tempiov->iov; - md->options |= PTL_MD_IOVEC; + md->options |= PTL_MD_IOVEC; }else{ - -#ifdef _USING_LUSTRE_PORTALS_ + +#ifdef _USING_LUSTRE_PORTALS_ while (payload_offset >= payload_kiov->kiov_len) { payload_offset -= payload_kiov->kiov_len; @@ -134,10 +134,10 @@ kptllnd_setup_md( payload_niov--; niov++; } - + md->start = tempiov->kiov; - md->options |= PTL_MD_KIOV; - + md->options |= PTL_MD_KIOV; + #else /* _USING_CRAY_PORTALS_ */ /* @@ -175,11 +175,11 @@ kptllnd_setup_md( payload_niov--; niov++; } - + md->start = tempiov->iov; md->options |= PTL_MD_IOVEC | PTL_MD_PHYS; -#endif - +#endif + } /* @@ -407,9 +407,9 @@ kptllnd_send(lnet_ni_t *ni, void *private, lnet_msg_t *lntmsg) routing,target_is_router); if(routing) - STAT_UPDATE(kpx_send_routing); + STAT_UPDATE(kps_send_routing); if(target_is_router) - STAT_UPDATE(kpx_send_target_is_router); + STAT_UPDATE(kps_send_target_is_router); /* NB 'private' is different depending on what we're sending.... */ @@ -453,6 +453,9 @@ kptllnd_send(lnet_ni_t *ni, void *private, lnet_msg_t *lntmsg) if (nob <= *kptllnd_tunables.kptl_max_immd_size) break; + + STAT_UPDATE(kpt_send_put); + kptllnd_do_put(tx,lntmsg,kptllnd_data); PJK_UT_MSG_DATA("<<< SSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSS\n"); @@ -483,6 +486,8 @@ kptllnd_send(lnet_ni_t *ni, void *private, lnet_msg_t *lntmsg) if (nob <= *kptllnd_tunables.kptl_max_immd_size) break; + STAT_UPDATE(kps_send_get); + tx->tx_payload_offset = 0; tx->tx_payload_niov = lntmsg->msg_md->md_niov; tx->tx_payload_nob = lntmsg->msg_md->md_length; @@ -514,6 +519,9 @@ kptllnd_send(lnet_ni_t *ni, void *private, lnet_msg_t *lntmsg) case LNET_MSG_REPLY: PJK_UT_MSG_DATA("LNET_MSG_REPLY\n"); + STAT_UPDATE(kps_send_reply); + + if(routing!=0 || target_is_router!=0) { /* @@ -606,6 +614,8 @@ kptllnd_send(lnet_ni_t *ni, void *private, lnet_msg_t *lntmsg) } + STAT_UPDATE(kps_send_immd); + LASSERT (offsetof(kptl_msg_t, ptlm_u.immediate.kptlim_payload[payload_nob]) <= *kptllnd_tunables.kptl_max_immd_size); @@ -695,7 +705,7 @@ int kptllnd_recv (lnet_ni_t *ni, void *private, lnet_msg_t *lntmsg, int delayed, LASSERT (!(kiov != NULL && iov != NULL)); if(delayed) - STAT_UPDATE(kpx_recv_delayed); + STAT_UPDATE(kps_recv_delayed); switch(rxmsg->ptlm_type) { diff --git a/lnet/klnds/ptllnd/ptllnd_proc.c b/lnet/klnds/ptllnd/ptllnd_proc.c new file mode 100755 index 0000000..d4251e9 --- /dev/null +++ b/lnet/klnds/ptllnd/ptllnd_proc.c @@ -0,0 +1,179 @@ +/* -*- mode: c; c-basic-offset: 8; indent-tabs-mode: nil; -*- + * vim:expandtab:shiftwidth=8:tabstop=8: + * + * Copyright (C) 2002 Cluster File Systems, Inc. + * + * This file is part of Portals + * http://sourceforge.net/projects/sandiaportals/ + * + * Portals is free software; you can redistribute it and/or + * modify it under the terms of version 2 of the GNU General Public + * License as published by the Free Software Foundation. + * + * Portals is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Portals; if not, write to the Free Software + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + * + */ + +#include "ptllnd.h" +#include +#include + +#define LNET_PTLLND_PROC_STATS "sys/lnet/ptllnd_stats" + +char* stats_name_table[] = { + "kps_incoming_checksums_calculated", + "kps_incoming_checksums_invalid", + "kps_cleaning_caneled_peers", + "kps_checking_buckets", + "kps_too_many_peers", + "kps_peers_created", + "kps_no_credits", + "kps_saving_last_credit", + "kps_rx_allocated", + "kps_rx_released", + "kps_rx_allocation_failed", + "kps_tx_allocated", + "kps_tx_released", + "kpt_tx_allocation_failed", + "kps_recv_delayed", + "kps_send_routing", + "kps_send_target_is_router", + "kpt_send_put", + "kps_send_get", + "kps_send_immd", + "kps_send_reply", +}; + +typedef struct { + loff_t pssi_index; +} ptllnd_stats_seq_iterator_t; + + +int +ptllnd_stats_seq_seek (ptllnd_stats_seq_iterator_t *pssi, loff_t off) +{ + if( off < sizeof(kptllnd_stats) / sizeof(int) && + off < sizeof(stats_name_table) / sizeof(stats_name_table[0])){ + pssi->pssi_index = off; + return 0; + } + return -ENOENT; +} + +static void * +ptllnd_stats_seq_start (struct seq_file *s, loff_t *pos) +{ + ptllnd_stats_seq_iterator_t *pssi; + int rc; + + PORTAL_ALLOC(pssi, sizeof(*pssi)); + if (pssi == NULL) + return NULL; + + pssi->pssi_index = 0; + rc = ptllnd_stats_seq_seek(pssi, *pos); + if (rc == 0) + return pssi; + + PORTAL_FREE(pssi, sizeof(*pssi)); + return NULL; +} + +static void +ptllnd_stats_seq_stop (struct seq_file *s, void *iter) +{ + ptllnd_stats_seq_iterator_t *pssi = iter; + + if (pssi != NULL) + PORTAL_FREE(pssi, sizeof(*pssi)); +} + +static void * +ptllnd_stats_seq_next (struct seq_file *s, void *iter, loff_t *pos) +{ + ptllnd_stats_seq_iterator_t *pssi = iter; + int rc; + loff_t next = *pos + 1; + + rc = ptllnd_stats_seq_seek(pssi, next); + if (rc != 0) { + PORTAL_FREE(pssi, sizeof(*pssi)); + return NULL; + } + + *pos = next; + return pssi; +} + +static int +ptllnd_stats_seq_show (struct seq_file *s, void *iter) +{ + ptllnd_stats_seq_iterator_t *pssi = iter; + + seq_printf(s,"%02d %-40s %d\n", + (int)pssi->pssi_index, + stats_name_table[pssi->pssi_index], + ((int*)&kptllnd_stats)[pssi->pssi_index]); + + return 0; +} + +static struct seq_operations ptllnd_stats_sops = { + .start = ptllnd_stats_seq_start, + .stop = ptllnd_stats_seq_stop, + .next = ptllnd_stats_seq_next, + .show = ptllnd_stats_seq_show, +}; + +static int +ptllnd_stats_seq_open(struct inode *inode, struct file *file) +{ + struct proc_dir_entry *dp = PDE(inode); + struct seq_file *sf; + int rc; + + rc = seq_open(file, &ptllnd_stats_sops); + if (rc == 0) { + sf = file->private_data; + sf->private = dp->data; + } + + return rc; +} + +static struct file_operations ptllnd_stats_fops = { + .owner = THIS_MODULE, + .open = ptllnd_stats_seq_open, + .read = seq_read, + .llseek = seq_lseek, + .release = seq_release, +}; + +void +kptllnd_proc_init(void) +{ + struct proc_dir_entry *stats; + + /* Initialize LNET_PTLLND_PROC_STATS */ + stats = create_proc_entry (LNET_PTLLND_PROC_STATS, 0644, NULL); + if (stats == NULL) { + CERROR("couldn't create proc entry %s\n", LNET_PTLLND_PROC_STATS); + return; + } + + stats->proc_fops = &ptllnd_stats_fops; + stats->data = NULL; +} + +void +kptllnd_proc_fini(void) +{ + remove_proc_entry(LNET_PTLLND_PROC_STATS, 0); +}