]> www.infradead.org Git - users/jedix/linux-maple.git/commitdiff
sdp: cpu affinity in sdpstats
authorAmir Vadai <amirv@mellanox.co.il>
Sun, 6 Jun 2010 09:23:55 +0000 (12:23 +0300)
committerMukesh Kacker <mukesh.kacker@oracle.com>
Tue, 6 Oct 2015 12:05:00 +0000 (05:05 -0700)
Signed-off-by: Amir Vadai <amirv@mellanox.co.il>
drivers/infiniband/ulp/sdp/sdp.h
drivers/infiniband/ulp/sdp/sdp_main.c
drivers/infiniband/ulp/sdp/sdp_proc.c
drivers/infiniband/ulp/sdp/sdp_rx.c

index 0052be0606ead5445d71224b512d72a3ff163803..88fbb1d1edea54ae0be6ead762732beb43db30ec 100644 (file)
@@ -719,6 +719,7 @@ struct sdpstats {
        u32 sendmsg_bzcopy_segment;
        u32 sendmsg_zcopy_segment;
        u32 sendmsg;
+       u32 recvmsg;
        u32 post_send_credits;
        u32 sendmsg_nagle_skip;
        u32 sendmsg_seglen[25];
@@ -726,6 +727,7 @@ struct sdpstats {
        u32 post_recv;
        u32 rx_int_count;
        u32 tx_int_count;
+       u32 rx_wq;
        u32 bzcopy_poll_miss;
        u32 send_wait_for_mem;
        u32 send_miss_no_credits;
index 70679d6276933878b79ae010ac33c913b8798f99..4babda5e5191c9cf27853f9d20110f78ea54807f 100644 (file)
@@ -2130,6 +2130,7 @@ static int sdp_recvmsg(struct kiocb *iocb, struct sock *sk, struct msghdr *msg,
        int rc;
        int avail_bytes_count = 0;      /* Could be inlined in skb */
                                        /* or advertised for RDMA  */
+       SDPSTATS_COUNTER_INC(recvmsg);
 
        lock_sock(sk);
        sdp_dbg_data(sk, "iovlen: %ld iov_len: 0x%lx flags: 0x%x peek: 0x%x\n",
index d10ed6e9bf8f1b737586f470ad9d82c9d36311d6..5e5360fc7febb03159d3e18564eadbd6bea28f99 100644 (file)
@@ -209,12 +209,19 @@ static void sdpstats_seq_hist(struct seq_file *seq, char *str, u32 *h, int n,
 {
        int i;
        u32 max = 0;
+       int first = -1, last = n - 1;
 
        seq_printf(seq, "%s:\n", str);
 
        for (i = 0; i < n; i++) {
                if (h[i] > max)
                        max = h[i];
+
+               if (first == -1 && h[i])
+                       first = i;
+               
+               if (h[i])
+                       last = i;
        }
 
        if (max == 0) {
@@ -222,7 +229,7 @@ static void sdpstats_seq_hist(struct seq_file *seq, char *str, u32 *h, int n,
                return;
        }
 
-       for (i = 0; i < n; i++) {
+       for (i = first; i <= last; i++) {
                char s[51];
                int j = 50 * h[i] / max;
                int val = is_log ? (i == n-1 ? 0 : 1<<i) : i;
@@ -260,6 +267,16 @@ static void sdpstats_seq_hist(struct seq_file *seq, char *str, u32 *h, int n,
        sdpstats_seq_hist(seq, msg, tmp_hist, hist_len, is_log);\
 })
 
+#define __sdpstats_seq_hist_pcpu(seq, msg, hist) ({            \
+       u32 h[NR_CPUS];                                         \
+       unsigned int __i;                                       \
+       memset(h, 0, sizeof(h));                                \
+       for_each_possible_cpu(__i) {                            \
+               h[__i] = per_cpu(sdpstats, __i).hist;           \
+       }                                                       \
+       sdpstats_seq_hist(seq, msg, h, NR_CPUS, 0);             \
+})
+
 static int sdpstats_seq_show(struct seq_file *seq, void *v)
 {
        int i;
@@ -317,6 +334,13 @@ static int sdpstats_seq_show(struct seq_file *seq, void *v)
        seq_printf(seq, "- TX cross send\t\t: %d\n", SDPSTATS_COUNTER_GET(zcopy_cross_send));
        seq_printf(seq, "- TX aborted by peer\t: %d\n", SDPSTATS_COUNTER_GET(zcopy_tx_aborted));
        seq_printf(seq, "- TX error\t\t: %d\n", SDPSTATS_COUNTER_GET(zcopy_tx_error));
+
+       __sdpstats_seq_hist_pcpu(seq, "CPU sendmsg", sendmsg);
+       __sdpstats_seq_hist_pcpu(seq, "CPU recvmsg", recvmsg);
+       __sdpstats_seq_hist_pcpu(seq, "CPU rx_irq", rx_int_count);
+       __sdpstats_seq_hist_pcpu(seq, "CPU rx_wq", rx_wq);
+       __sdpstats_seq_hist_pcpu(seq, "CPU tx_irq", tx_int_count);
+
        return 0;
 }
 
index 617ec08617c640e38bb215e40857e9885b4922da..328dfe2c7aad8a1208b4e10779d28ab25527a645 100644 (file)
@@ -704,6 +704,8 @@ static void sdp_rx_comp_work(struct work_struct *work)
                        rx_comp_work);
        struct sock *sk = &ssk->isk.sk;
 
+       SDPSTATS_COUNTER_INC(rx_wq);
+
        sdp_prf(sk, NULL, "%s", __func__);
 
        if (unlikely(!ssk->qp)) {