Date: Sun, 2 Feb 2014 05:20:46 +0000 (UTC) From: Bryan Venteicher <bryanv@FreeBSD.org> To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r261395 - head/sys/dev/virtio/network Message-ID: <201402020520.s125Kklc064677@svn.freebsd.org>
next in thread | raw e-mail | index | archive | help
Author: bryanv Date: Sun Feb 2 05:20:46 2014 New Revision: 261395 URL: http://svnweb.freebsd.org/changeset/base/261395 Log: Use m_defrag() instead of m_collapse() to compact a long mbuf chain This should be an infrequent occurrence, so remove the per-queue counters in favor of just global counters in the softc. Modified: head/sys/dev/virtio/network/if_vtnet.c head/sys/dev/virtio/network/if_vtnetvar.h Modified: head/sys/dev/virtio/network/if_vtnet.c ============================================================================== --- head/sys/dev/virtio/network/if_vtnet.c Sun Feb 2 05:15:36 2014 (r261394) +++ head/sys/dev/virtio/network/if_vtnet.c Sun Feb 2 05:20:46 2014 (r261395) @@ -2071,33 +2071,30 @@ vtnet_txq_enqueue_buf(struct vtnet_txq * struct virtqueue *vq; struct sglist *sg; struct mbuf *m; - int collapsed, error; + int error; sc = txq->vtntx_sc; vq = txq->vtntx_vq; sg = txq->vtntx_sg; m = *m_head; - collapsed = 0; sglist_reset(sg); error = sglist_append(sg, &txhdr->vth_uhdr, sc->vtnet_hdr_size); KASSERT(error == 0 && sg->sg_nseg == 1, ("%s: error %d adding header to sglist", __func__, error)); -again: error = sglist_append_mbuf(sg, m); if (error) { - if (collapsed) - goto fail; - - m = m_collapse(m, M_NOWAIT, sc->vtnet_tx_nsegs - 1); + m = m_defrag(m, M_NOWAIT); if (m == NULL) goto fail; *m_head = m; - collapsed = 1; - txq->vtntx_stats.vtxs_collapsed++; - goto again; + sc->vtnet_stats.tx_defragged++; + + error = sglist_append_mbuf(sg, m); + if (error) + goto fail; } txhdr->vth_mbuf = m; @@ -2106,6 +2103,7 @@ again: return (error); fail: + sc->vtnet_stats.tx_defrag_failed++; m_freem(*m_head); *m_head = NULL; @@ -2550,7 +2548,6 @@ vtnet_txq_accum_stats(struct vtnet_txq * accum->vtxs_obytes += st->vtxs_obytes; accum->vtxs_csum += st->vtxs_csum; accum->vtxs_tso += st->vtxs_tso; - accum->vtxs_collapsed += st->vtxs_collapsed; accum->vtxs_rescheduled += st->vtxs_rescheduled; } @@ -3631,8 +3628,6 @@ vtnet_setup_txq_sysctl(struct sysctl_ctx &stats->vtxs_csum, "Transmit checksum offloaded"); SYSCTL_ADD_UQUAD(ctx, list, OID_AUTO, "tso", CTLFLAG_RD, &stats->vtxs_tso, "Transmit segmentation offloaded"); - SYSCTL_ADD_UQUAD(ctx, list, OID_AUTO, "collapsed", CTLFLAG_RD, - &stats->vtxs_collapsed, "Transmit mbufs collapsed"); SYSCTL_ADD_UQUAD(ctx, list, OID_AUTO, "rescheduled", CTLFLAG_RD, &stats->vtxs_rescheduled, "Transmit interrupt handler rescheduled"); @@ -3712,6 +3707,12 @@ vtnet_setup_stat_sysctl(struct sysctl_ct SYSCTL_ADD_UQUAD(ctx, child, OID_AUTO, "tx_tso_not_tcp", CTLFLAG_RD, &stats->tx_tso_not_tcp, "Aborted transmit of TSO buffer with non TCP protocol"); + SYSCTL_ADD_UQUAD(ctx, child, OID_AUTO, "tx_defragged", + CTLFLAG_RD, &stats->tx_defragged, + "Transmit mbufs defragged"); + SYSCTL_ADD_UQUAD(ctx, child, OID_AUTO, "tx_defrag_failed", + CTLFLAG_RD, &stats->tx_defrag_failed, + "Aborted transmit of buffer because defrag failed"); SYSCTL_ADD_UQUAD(ctx, child, OID_AUTO, "tx_csum_offloaded", CTLFLAG_RD, &stats->tx_csum_offloaded, "Offloaded checksum of transmitted buffer"); Modified: head/sys/dev/virtio/network/if_vtnetvar.h ============================================================================== --- head/sys/dev/virtio/network/if_vtnetvar.h Sun Feb 2 05:15:36 2014 (r261394) +++ head/sys/dev/virtio/network/if_vtnetvar.h Sun Feb 2 05:20:46 2014 (r261395) @@ -44,6 +44,8 @@ struct vtnet_statistics { uint64_t tx_csum_bad_ethtype; uint64_t tx_tso_bad_ethtype; uint64_t tx_tso_not_tcp; + uint64_t tx_defragged; + uint64_t tx_defrag_failed; /* * These are accumulated from each Rx/Tx queue. @@ -92,7 +94,6 @@ struct vtnet_txq_stats { uint64_t vtxs_omcasts; /* if_omcasts */ uint64_t vtxs_csum; uint64_t vtxs_tso; - uint64_t vtxs_collapsed; uint64_t vtxs_rescheduled; };
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201402020520.s125Kklc064677>