Whamcloud - gitweb
* ptllnd stats via /proc entry
authorpjkirner <pjkirner>
Thu, 22 Sep 2005 21:29:33 +0000 (21:29 +0000)
committerpjkirner <pjkirner>
Thu, 22 Sep 2005 21:29:33 +0000 (21:29 +0000)
* a few more stats.

lnet/klnds/ptllnd/Makefile.in
lnet/klnds/ptllnd/ptllnd.c
lnet/klnds/ptllnd/ptllnd.h
lnet/klnds/ptllnd/ptllnd_cb.c
lnet/klnds/ptllnd/ptllnd_proc.c [new file with mode: 0755]

index 2435b58..45a37f1 100755 (executable)
@@ -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@
index ebb9feb..e46de19 100755 (executable)
@@ -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;
 }
index 3a89302..9aefb67 100755 (executable)
@@ -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(
index 34b3e8f..b547e0d 100644 (file)
@@ -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 (executable)
index 0000000..d4251e9
--- /dev/null
@@ -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 <linux/seq_file.h>
+#include <linux/lustre_compat25.h>
+
+#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);
+}