X-Git-Url: https://git.whamcloud.com/?p=fs%2Flustre-release.git;a=blobdiff_plain;f=lnet%2Fklnds%2Fgnilnd%2Fgnilnd_proc.c;h=a8330261d4b5c073b37bda7dbe3d0ea797c6567f;hp=292186d225925d30826e34aa5c3f6f0665ead972;hb=d50617709841a37afd9db00ea6c4ace94828a3c2;hpb=c06faad10dc402499e324d2c866fa43ff214f81d;ds=sidebyside diff --git a/lnet/klnds/gnilnd/gnilnd_proc.c b/lnet/klnds/gnilnd/gnilnd_proc.c index 292186d..a833026 100644 --- a/lnet/klnds/gnilnd/gnilnd_proc.c +++ b/lnet/klnds/gnilnd/gnilnd_proc.c @@ -1,9 +1,10 @@ /* - * Copyright (C) 2009-2012 Cray, Inc. + * Copyright (C) 2009-2012, 2016 Cray, Inc. * - * Copyright (c) 2013, Intel Corporation. + * Copyright (c) 2013, 2015, Intel Corporation. * * Author: Nic Henke + * Author: James Shimek * * This file is part of Lustre, http://www.lustre.org. * @@ -39,7 +40,7 @@ static int _kgnilnd_proc_run_cksum_test(int caseno, int nloops, int nob) { - lnet_kiov_t *src, *dest; + struct bio_vec *src, *dest; struct timespec begin, end, diff; int niov; int rc = 0; @@ -47,8 +48,8 @@ _kgnilnd_proc_run_cksum_test(int caseno, int nloops, int nob) __u16 cksum, cksum2; __u64 mbytes; - LIBCFS_ALLOC(src, LNET_MAX_IOV * sizeof(lnet_kiov_t)); - LIBCFS_ALLOC(dest, LNET_MAX_IOV * sizeof(lnet_kiov_t)); + CFS_ALLOC_PTR_ARRAY(src, LNET_MAX_IOV); + CFS_ALLOC_PTR_ARRAY(dest, LNET_MAX_IOV); if (src == NULL || dest == NULL) { CERROR("couldn't allocate iovs\n"); @@ -56,22 +57,20 @@ _kgnilnd_proc_run_cksum_test(int caseno, int nloops, int nob) } for (i = 0; i < LNET_MAX_IOV; i++) { - src[i].kiov_offset = 0; - src[i].kiov_len = PAGE_SIZE; - src[i].kiov_page = alloc_page(__GFP_WAIT | __GFP_IO | - __GFP_FS | __GFP_ZERO); + src[i].bv_offset = 0; + src[i].bv_len = PAGE_SIZE; + src[i].bv_page = alloc_page(GFP_KERNEL | __GFP_ZERO); - if (src[i].kiov_page == NULL) { + if (src[i].bv_page == NULL) { CERROR("couldn't allocate page %d\n", i); GOTO(unwind, rc = -ENOMEM); } - dest[i].kiov_offset = 0; - dest[i].kiov_len = PAGE_SIZE; - dest[i].kiov_page = alloc_page(__GFP_WAIT | __GFP_IO | - __GFP_FS | __GFP_ZERO); + dest[i].bv_offset = 0; + dest[i].bv_len = PAGE_SIZE; + dest[i].bv_page = alloc_page(GFP_KERNEL | __GFP_ZERO); - if (dest[i].kiov_page == NULL) { + if (dest[i].bv_page == NULL) { CERROR("couldn't allocate page %d\n", i); GOTO(unwind, rc = -ENOMEM); } @@ -86,31 +85,31 @@ _kgnilnd_proc_run_cksum_test(int caseno, int nloops, int nob) } /* setup real data */ - src[0].kiov_offset = 317; - dest[0].kiov_offset = 592; + src[0].bv_offset = 317; + dest[0].bv_offset = 592; switch (caseno) { default: /* odd -> even */ break; case 1: /* odd -> odd */ - dest[0].kiov_offset -= 1; + dest[0].bv_offset -= 1; break; case 2: /* even -> even */ - src[0].kiov_offset += 1; + src[0].bv_offset += 1; break; case 3: /* even -> odd */ - src[0].kiov_offset += 1; - dest[0].kiov_offset -= 1; + src[0].bv_offset += 1; + dest[0].bv_offset -= 1; } - src[0].kiov_len = PAGE_SIZE - src[0].kiov_offset; - dest[0].kiov_len = PAGE_SIZE - dest[0].kiov_offset; + src[0].bv_len = PAGE_SIZE - src[0].bv_offset; + dest[0].bv_len = PAGE_SIZE - dest[0].bv_offset; for (i = 0; i < niov; i++) { - memset(page_address(src[i].kiov_page) + src[i].kiov_offset, - 0xf0 + i, src[i].kiov_len); + memset(page_address(src[i].bv_page) + src[i].bv_offset, + 0xf0 + i, src[i].bv_len); } lnet_copy_kiov2kiov(niov, dest, 0, niov, src, 0, nob); @@ -118,8 +117,10 @@ _kgnilnd_proc_run_cksum_test(int caseno, int nloops, int nob) getnstimeofday(&begin); for (n = 0; n < nloops; n++) { - CDEBUG(D_BUFFS, "case %d loop %d src %d dest %d nob %d niov %d\n", - caseno, n, src[0].kiov_offset, dest[0].kiov_offset, nob, niov); + CDEBUG(D_BUFFS, + "case %d loop %d src %d dest %d nob %d niov %d\n", + caseno, n, src[0].bv_offset, dest[0].bv_offset, nob, + niov); cksum = kgnilnd_cksum_kiov(niov, src, 0, nob - (n % nob), 1); cksum2 = kgnilnd_cksum_kiov(niov, dest, 0, nob - (n % nob), 1); @@ -136,24 +137,23 @@ _kgnilnd_proc_run_cksum_test(int caseno, int nloops, int nob) diff = kgnilnd_ts_sub(end, begin); - LCONSOLE_INFO("running "LPD64"MB took %ld.%ld seconds\n", + LCONSOLE_INFO("running %lldMB took %ld.%ld seconds\n", mbytes, diff.tv_sec, diff.tv_nsec); unwind: CDEBUG(D_NET, "freeing %d pages\n", i); for (i -= 1; i >= 0; i--) { - if (src[i].kiov_page != NULL) { - __free_page(src[i].kiov_page); - } - if (dest[i].kiov_page != NULL) { - __free_page(dest[i].kiov_page); - } + if (src[i].bv_page) + __free_page(src[i].bv_page); + + if (dest[i].bv_page) + __free_page(dest[i].bv_page); } if (src != NULL) - LIBCFS_FREE(src, LNET_MAX_IOV * sizeof(lnet_kiov_t)); + CFS_FREE_PTR_ARRAY(src, LNET_MAX_IOV); if (dest != NULL) - LIBCFS_FREE(dest, LNET_MAX_IOV * sizeof(lnet_kiov_t)); + CFS_FREE_PTR_ARRAY(dest, LNET_MAX_IOV); return rc; } @@ -198,7 +198,6 @@ kgnilnd_cksum_test_seq_open(struct inode *inode, struct file *file) static const struct file_operations kgn_cksum_test_fops = { .owner = THIS_MODULE, .open = kgnilnd_cksum_test_seq_open, - .read = seq_read, .write = kgnilnd_proc_cksum_test_write, .llseek = seq_lseek, .release = seq_release, @@ -209,11 +208,10 @@ kgnilnd_stats_seq_show(struct seq_file *sf, void *v) { kgn_device_t *dev; struct timeval now; - int rc; if (kgnilnd_data.kgn_init < GNILND_INIT_ALL) { - rc = seq_printf(sf, "kgnilnd is not initialized yet\n"); - return rc; + seq_printf(sf, "kgnilnd is not initialized yet\n"); + return 0; } /* only do the first device */ @@ -223,77 +221,80 @@ kgnilnd_stats_seq_show(struct seq_file *sf, void *v) smp_rmb(); do_gettimeofday(&now); - rc = seq_printf(sf, "time: %lu.%lu\n" - "ntx: %d\n" - "npeers: %d\n" - "nconns: %d\n" - "nEPs: %d\n" - "ndgrams: %d\n" - "nfmablk: %d\n" - "n_mdd: %d\n" - "n_mdd_held: %d\n" - "n_eager_allocs: %d\n" - "GART map bytes: %ld\n" - "TX queued maps: %d\n" - "TX phys nmaps: %d\n" - "TX phys bytes: %lu\n" - "TX virt nmaps: %d\n" - "TX virt bytes: "LPU64"\n" - "RDMAQ bytes_auth: %ld\n" - "RDMAQ bytes_left: %ld\n" - "RDMAQ nstalls: %d\n" - "dev mutex delay: %ld\n" - "dev n_yield: %d\n" - "dev n_schedule: %d\n" - "SMSG fast_try: %d\n" - "SMSG fast_ok: %d\n" - "SMSG fast_block: %d\n" - "SMSG ntx: %u\n" - "SMSG tx_bytes: %lu\n" - "SMSG nrx: %u\n" - "SMSG rx_bytes: %lu\n" - "RDMA ntx: %u\n" - "RDMA tx_bytes: %lu\n" - "RDMA nrx: %u\n" - "RDMA rx_bytes: %lu\n" - "VMAP short: %d\n" - "VMAP cksum: %d\n" - "KMAP short: %d\n" - "RDMA REV length: %d\n" - "RDMA REV offset: %d\n" - "RDMA REV copy: %d\n", - now.tv_sec, now.tv_usec, - atomic_read(&kgnilnd_data.kgn_ntx), - atomic_read(&kgnilnd_data.kgn_npeers), - atomic_read(&kgnilnd_data.kgn_nconns), - atomic_read(&dev->gnd_neps), - atomic_read(&dev->gnd_ndgrams), - atomic_read(&dev->gnd_nfmablk), - atomic_read(&dev->gnd_n_mdd), atomic_read(&dev->gnd_n_mdd_held), - atomic_read(&kgnilnd_data.kgn_neager_allocs), - atomic64_read(&dev->gnd_nbytes_map), - atomic_read(&dev->gnd_nq_map), - dev->gnd_map_nphys, dev->gnd_map_physnop * PAGE_SIZE, - dev->gnd_map_nvirt, dev->gnd_map_virtnob, - atomic64_read(&dev->gnd_rdmaq_bytes_out), - atomic64_read(&dev->gnd_rdmaq_bytes_ok), - atomic_read(&dev->gnd_rdmaq_nstalls), - dev->gnd_mutex_delay, - atomic_read(&dev->gnd_n_yield), atomic_read(&dev->gnd_n_schedule), - atomic_read(&dev->gnd_fast_try), atomic_read(&dev->gnd_fast_ok), - atomic_read(&dev->gnd_fast_block), - atomic_read(&dev->gnd_short_ntx), atomic64_read(&dev->gnd_short_txbytes), - atomic_read(&dev->gnd_short_nrx), atomic64_read(&dev->gnd_short_rxbytes), - atomic_read(&dev->gnd_rdma_ntx), atomic64_read(&dev->gnd_rdma_txbytes), - atomic_read(&dev->gnd_rdma_nrx), atomic64_read(&dev->gnd_rdma_rxbytes), - atomic_read(&kgnilnd_data.kgn_nvmap_short), - atomic_read(&kgnilnd_data.kgn_nvmap_cksum), - atomic_read(&kgnilnd_data.kgn_nkmap_short), - atomic_read(&kgnilnd_data.kgn_rev_length), - atomic_read(&kgnilnd_data.kgn_rev_offset), - atomic_read(&kgnilnd_data.kgn_rev_copy_buff)); + seq_printf(sf, "time: %lu.%lu\n" + "ntx: %d\n" + "npeers: %d\n" + "nconns: %d\n" + "nEPs: %d\n" + "ndgrams: %d\n" + "nfmablk: %d\n" + "n_mdd: %d\n" + "n_mdd_held: %d\n" + "n_eager_allocs: %d\n" + "GART map bytes: %ld\n" + "TX queued maps: %d\n" + "TX phys nmaps: %d\n" + "TX phys bytes: %lu\n" + "RDMAQ bytes_auth: %ld\n" + "RDMAQ bytes_left: %ld\n" + "RDMAQ nstalls: %d\n" + "dev mutex delay: %ld\n" + "dev n_yield: %d\n" + "dev n_schedule: %d\n" + "SMSG fast_try: %d\n" + "SMSG fast_ok: %d\n" + "SMSG fast_block: %d\n" + "SMSG ntx: %u\n" + "SMSG tx_bytes: %lu\n" + "SMSG nrx: %u\n" + "SMSG rx_bytes: %lu\n" + "RDMA ntx: %u\n" + "RDMA tx_bytes: %lu\n" + "RDMA nrx: %u\n" + "RDMA rx_bytes: %lu\n" + "VMAP short: %d\n" + "VMAP cksum: %d\n" + "KMAP short: %d\n" + "RDMA REV length: %d\n" + "RDMA REV offset: %d\n" + "RDMA REV copy: %d\n", + now.tv_sec, now.tv_usec, + atomic_read(&kgnilnd_data.kgn_ntx), + atomic_read(&kgnilnd_data.kgn_npeers), + atomic_read(&kgnilnd_data.kgn_nconns), + atomic_read(&dev->gnd_neps), + atomic_read(&dev->gnd_ndgrams), + atomic_read(&dev->gnd_nfmablk), + atomic_read(&dev->gnd_n_mdd), atomic_read(&dev->gnd_n_mdd_held), + atomic_read(&kgnilnd_data.kgn_neager_allocs), + atomic64_read(&dev->gnd_nbytes_map), + atomic_read(&dev->gnd_nq_map), + dev->gnd_map_nphys, dev->gnd_map_physnop * PAGE_SIZE, + atomic64_read(&dev->gnd_rdmaq_bytes_out), + atomic64_read(&dev->gnd_rdmaq_bytes_ok), + atomic_read(&dev->gnd_rdmaq_nstalls), + dev->gnd_mutex_delay, + atomic_read(&dev->gnd_n_yield), + atomic_read(&dev->gnd_n_schedule), + atomic_read(&dev->gnd_fast_try), + atomic_read(&dev->gnd_fast_ok), + atomic_read(&dev->gnd_fast_block), + atomic_read(&dev->gnd_short_ntx), + atomic64_read(&dev->gnd_short_txbytes), + atomic_read(&dev->gnd_short_nrx), + atomic64_read(&dev->gnd_short_rxbytes), + atomic_read(&dev->gnd_rdma_ntx), + atomic64_read(&dev->gnd_rdma_txbytes), + atomic_read(&dev->gnd_rdma_nrx), + atomic64_read(&dev->gnd_rdma_rxbytes), + atomic_read(&kgnilnd_data.kgn_nvmap_short), + atomic_read(&kgnilnd_data.kgn_nvmap_cksum), + atomic_read(&kgnilnd_data.kgn_nkmap_short), + atomic_read(&kgnilnd_data.kgn_rev_length), + atomic_read(&kgnilnd_data.kgn_rev_offset), + atomic_read(&kgnilnd_data.kgn_rev_copy_buff)); - return rc; + return 0; } static ssize_t @@ -491,7 +492,7 @@ kgnilnd_mdd_seq_show(struct seq_file *s, void *iter) hndl.qword1 = tx->tx_map_key.qword1; hndl.qword2 = tx->tx_map_key.qword2; - seq_printf(s, "%p %x %16"LPF64"u %8d %#8x "LPX64"."LPX64"x\n", + seq_printf(s, "%p %x %16llu %8d %#8x %#llx.%#llxx\n", tx, id, nob, physnop, buftype, hndl.qword1, hndl.qword2); @@ -697,7 +698,7 @@ kgnilnd_smsg_seq_show(struct seq_file *s, void *iter) spin_unlock(&dev->gnd_fmablk_lock); if (live) { - seq_printf(s, "%5d %4s %6d/%5d/%5d %9d %18p "LPX64"."LPX64"\n", + seq_printf(s, "%5d %4s %6d/%5d/%5d %9d %18p %#llx.%#llx\n", (int) gseq->gsmsg_off, kgnilnd_fmablk_state2str(state), avail_mboxs, held_mboxs, num_mboxs, blk_size, fmablk, hndl.qword1, hndl.qword2); @@ -905,16 +906,16 @@ kgnilnd_conn_seq_show(struct seq_file *s, void *iter) "rx sq %u %dms/%dms " "noop r/s %d/%d w/s/cq %lds/%lds/%lds " "sched a/d %lds/%lds " - "tx_re "LPD64" TO %ds %s\n", + "tx_re %lld TO %ds %s\n", conn, peer ? libcfs_nid2str(peer->gnp_nid) : "", atomic_read(&conn->gnc_refcount), kgnilnd_count_list(&conn->gnc_fmaq), atomic_read(&conn->gnc_nlive_fma), atomic_read(&conn->gnc_nlive_rdma), - conn->gnc_tx_seq, + atomic_read(&conn->gnc_tx_seq), jiffies_to_msecs(jiffies - conn->gnc_last_tx), jiffies_to_msecs(jiffies - conn->gnc_last_tx_cq), - conn->gnc_rx_seq, + atomic_read(&conn->gnc_rx_seq), jiffies_to_msecs(jiffies - conn->gnc_last_rx), jiffies_to_msecs(jiffies - conn->gnc_last_rx_cq), atomic_read(&conn->gnc_reaper_noop), @@ -996,11 +997,10 @@ kgnilnd_proc_peer_conns_seq_show(struct seq_file *sf, void *v) struct tm ctm; struct timespec now; unsigned long jifs; - int rc = 0; if (kgnilnd_debug_peer_nid == KGN_DEBUG_PEER_NID_DEFAULT) { - rc = seq_printf(sf, "peer_conns not initialized\n"); - return rc; + seq_printf(sf, "peer_conns not initialized\n"); + return 0; } /* sample date/time stamp - print time in UTC @@ -1014,47 +1014,47 @@ kgnilnd_proc_peer_conns_seq_show(struct seq_file *sf, void *v) peer = kgnilnd_find_peer_locked(kgnilnd_debug_peer_nid); if (peer == NULL) { - rc = seq_printf(sf, "peer not found for this nid %d\n", + seq_printf(sf, "peer not found for this nid %d\n", kgnilnd_debug_peer_nid); write_unlock(&kgnilnd_data.kgn_peer_conn_lock); - return rc; + return 0; } list_for_each_entry(conn, &peer->gnp_conns, gnc_list) { - rc = seq_printf(sf, - "%04ld-%02d-%02dT%02d:%02d:%02d.%06ld %s " - "mbox adr %p " - "dg type %s " - "%s " - "purg %d " - "close s/r %d/%d " - "err %d peer err %d " - "tx sq %u %dms/%dms " - "rx sq %u %dms/%dms/%dms " - "tx retran %lld\n", - ctm.tm_year+1900, ctm.tm_mon+1, ctm.tm_mday, - ctm.tm_hour, ctm.tm_min, ctm.tm_sec, now.tv_nsec, - libcfs_nid2str(peer->gnp_nid), - conn->remote_mbox_addr, - kgnilnd_conn_dgram_type2str(conn->gnc_dgram_type), - kgnilnd_conn_state2str(conn), - conn->gnc_in_purgatory, - conn->gnc_close_sent, - conn->gnc_close_recvd, - conn->gnc_error, - conn->gnc_peer_error, - conn->gnc_tx_seq, - jiffies_to_msecs(jifs - conn->gnc_last_tx), - jiffies_to_msecs(jifs - conn->gnc_last_tx_cq), - conn->gnc_rx_seq, - jiffies_to_msecs(jifs - conn->gnc_first_rx), - jiffies_to_msecs(jifs - conn->gnc_last_rx), - jiffies_to_msecs(jifs - conn->gnc_last_rx_cq), - conn->gnc_tx_retrans); + seq_printf(sf, + "%04ld-%02d-%02dT%02d:%02d:%02d.%06ld %s " + "mbox adr %p " + "dg type %s " + "%s " + "purg %d " + "close s/r %d/%d " + "err %d peer err %d " + "tx sq %u %dms/%dms " + "rx sq %u %dms/%dms/%dms " + "tx retran %lld\n", + ctm.tm_year+1900, ctm.tm_mon+1, ctm.tm_mday, + ctm.tm_hour, ctm.tm_min, ctm.tm_sec, now.tv_nsec, + libcfs_nid2str(peer->gnp_nid), + conn->remote_mbox_addr, + kgnilnd_conn_dgram_type2str(conn->gnc_dgram_type), + kgnilnd_conn_state2str(conn), + conn->gnc_in_purgatory, + conn->gnc_close_sent, + conn->gnc_close_recvd, + conn->gnc_error, + conn->gnc_peer_error, + atomic_read(&conn->gnc_tx_seq), + jiffies_to_msecs(jifs - conn->gnc_last_tx), + jiffies_to_msecs(jifs - conn->gnc_last_tx_cq), + atomic_read(&conn->gnc_rx_seq), + jiffies_to_msecs(jifs - conn->gnc_first_rx), + jiffies_to_msecs(jifs - conn->gnc_last_rx), + jiffies_to_msecs(jifs - conn->gnc_last_rx_cq), + conn->gnc_tx_retrans); } write_unlock(&kgnilnd_data.kgn_peer_conn_lock); - return rc; + return 0; } static int @@ -1265,18 +1265,17 @@ kgnilnd_peer_seq_show(struct seq_file *s, void *iter) read_unlock(&kgnilnd_data.kgn_peer_conn_lock); - seq_printf(s, "%p->%s [%d] %s NIC 0x%x q %d conn %c purg %d " - "last %d@%dms dgram %d@%dms " - "reconn %dms to %lus \n", + seq_printf(s, "%p->%s [%d] %s NIC 0x%x q %d conn %c purg %d last %d@%lldms dgram %d@%dms reconn %dms to %lus \n", peer, libcfs_nid2str(peer->gnp_nid), atomic_read(&peer->gnp_refcount), - (peer->gnp_down == GNILND_RCA_NODE_DOWN) ? "down" : "up", + (peer->gnp_state == GNILND_PEER_DOWN) ? "down" : + peer->gnp_state == GNILND_PEER_TIMED_OUT ? "timedout" : "up", peer->gnp_host_id, kgnilnd_count_list(&peer->gnp_tx_queue), conn_str, purg_count, peer->gnp_last_errno, - jiffies_to_msecs(jiffies - peer->gnp_last_alive), + (ktime_get_seconds() - peer->gnp_last_alive) * MSEC_PER_SEC, peer->gnp_last_dgram_errno, jiffies_to_msecs(jiffies - peer->gnp_last_dgram_time), peer->gnp_reconnect_interval != 0