Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 25 Jul 2014 13:53:30 -0700
From:      Adrian Chadd <adrian@freebsd.org>
To:        John Jasen <jjasen@gmail.com>
Cc:        FreeBSD Net <freebsd-net@freebsd.org>
Subject:   Re: fastforward/routing: a 3 million packet-per-second system?
Message-ID:  <CAJ-Vmok6vyrD-2%2BswCBPP_VeMqH6t7CXuVBPUaDfwyRrb6aiTg@mail.gmail.com>
In-Reply-To: <CAJ-Vmonsc79ULDOT9trtOotq7mRh1XJkhL2JfDNxXP16OFWMFg@mail.gmail.com>
References:  <53CE80DD.9090109@gmail.com> <CAACLuR1r0axCYWXeLDSa-m07eAVgTMBVW5sNbt%2By_Lt2ss1r7Q@mail.gmail.com> <CAJ-Vmonsc79ULDOT9trtOotq7mRh1XJkhL2JfDNxXP16OFWMFg@mail.gmail.com>

next in thread | previous in thread | raw e-mail | index | archive | help
Yeah:

Adrians-MacBook-Pro:Downloads adrian$ head -2
debug.lock.prof.stats.out.20140725  ; cat
debug.lock.prof.stats.out.20140725 | sort -nk4 | tail -10

debug.lock.prof.stats:

     max  wait_max       total  wait_total       count    avg wait_avg
cnt_hold cnt_lock name

       6         3         419         145         160      2      0
0     63 /usr/src/sys/kern/kern_condvar.c:145 (sleep mutex:Giant)

     282       133         991         215           8    123     26
0      2 /usr/src/sys/modules/cxgbe/if_cxgbe/../../../dev/cxgbe/t4_main.c:6657
(sleep mutex:cxl3 txq26)

      69        72          71         250           5     14     50
0      4 /usr/src/sys/modules/cxgbe/if_cxgbe/../../../dev/cxgbe/t4_main.c:6657
(sleep mutex:cxl1 txq37)

     281       197        1638         286          13    126     22
0      2 /usr/src/sys/modules/cxgbe/if_cxgbe/../../../dev/cxgbe/t4_main.c:6657
(sleep mutex:cxl1 txq46)

     351       182        2416         499          38     63     13
0     10 /usr/src/sys/modules/cxgbe/if_cxgbe/../../../dev/cxgbe/t4_main.c:6657
(sleep mutex:cxl3 txq17)

     276       193         802         643          10     80     64
0      5 /usr/src/sys/modules/cxgbe/if_cxgbe/../../../dev/cxgbe/t4_main.c:6657
(sleep mutex:cxl3 txq27)

       0         1       98578        1341      482441      0      0
0   3767 /usr/src/sys/kern/subr_turnstile.c:552 (spin mutex:turnstile
chain)

       7        13    11543138      470545    63952832      0      0
0 815777 /usr/src/sys/net/route.c:439 (sleep mutex:rtentry)

       6        15     3943582     1545195    63952779      0      0
0 3439254 /usr/src/sys/netinet/ip_fastfwd.c:593 (sleep mutex:rtentry)

       7        17     3271389     2258698    63952832      0      0
0 6761237 /usr/src/sys/netinet/in_rmx.c:114 (sleep mutex:rtentry)

.. try FLOWTABLE.

The in_rmx.c is the hook to check for temporary routes installed by
redirect ICMP messages. It's .. not very pretty. Just use FLOWTABLE
for now and see if it improves things.

(Yes, we likely can do better on the rtentry locking..)


-a


On 25 July 2014 13:51, Adrian Chadd <adrian@freebsd.org> wrote:
> Ugh, the forwarding table stupidity. Try enabling FLOWTABLE as an option.
>
> I really dislike how the rtentry locking works. But that isn't a
> rwlock - i'll have to look at your full lock profiling output to see.
>
>
> -a
>
>
> On 25 July 2014 09:20, John Jasen <jjasen@gmail.com> wrote:
>> Based on advice I received, I've collected lock profile debugging output,
>> and pmcannotate'd data from the system while it was processing about 3
>> million packets/second.
>>
>> Combined, the files are about 325k in size, so I'll submit highlights here.
>> I can provide the raw files to interested parties privately.
>>
>> pmcannotate summary output:
>>
>> grep ^Profile pmcannotate.20140725
>> Profile trace for function: __rw_rlock() [17.04%]
>> Profile trace for function: __mtx_unlock_flags() [9.10%]
>> Profile trace for function: _rw_runlock_cookie() [7.67%]
>> Profile trace for function: sched_idletd() [5.73%]
>> Profile trace for function: memcpy() [5.64%]
>> Profile trace for function: bcopy() [5.04%]
>> Profile trace for function: bcmp() [5.01%]
>> Profile trace for function: __mtx_lock_flags() [3.66%]
>> Profile trace for function: t4_eth_tx() [3.25%]
>> Profile trace for function: lock_profile_release_lock() [2.73%]
>> Profile trace for function: ip_fastforward() [2.68%]
>> Profile trace for function: ether_output() [2.50%]
>> Profile trace for function: get_scatter_segment() [1.75%]
>> Profile trace for function: rn_match() [1.74%]
>> Profile trace for function: _mtx_lock_spin_cookie() [1.53%]
>> Profile trace for function: lock_profile_obtain_lock_success() [1.49%]
>> Profile trace for function: cxgbe_transmit() [1.37%]
>> Profile trace for function: uma_zalloc_arg() [1.31%]
>> Profile trace for function: bzero() [1.30%]
>> Profile trace for function: service_iq() [1.26%]
>> Profile trace for function: ether_nh_input() [1.23%]
>> Profile trace for function: __mtx_lock_sleep() [1.19%]
>> Profile trace for function: arpresolve() [1.07%]
>> Profile trace for function: uma_zfree_arg() [0.95%]
>> Profile trace for function: reclaim_tx_descs() [0.87%]
>> Profile trace for function: _mtx_trylock_flags_() [0.80%]
>> Profile trace for function: bounce_bus_dmamap_load_buffer() [0.72%]
>> Profile trace for function: ether_demux() [0.64%]
>> Profile trace for function: mb_ctor_mbuf() [0.63%]
>> Profile trace for function: rtalloc1_fib() [0.54%]
>>
>> sysctl debug.lock.prof.stats summary: (some of the highest hit counts,
>> especially in cnt_hold:
>>
>>        7        17     3271389     2258698    63952832      0      0  0
>> 6761237 /usr/src/sys/netinet/in_rmx.c:114 (sleep mutex:rtentry)
>>
>>        7        13    11543138      470545    63952832      0      0  0
>> 815777 /usr/src/sys/net/route.c:439 (sleep mutex:rtentry)
>>
>>        6        15     3943582     1545195    63952779      0      0  0
>> 3439254 /usr/src/sys/netinet/ip_fastfwd.c:593 (sleep mutex:rtentry
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>> On Tue, Jul 22, 2014 at 11:18 AM, John Jasen <jjasen@gmail.com> wrote:
>>
>>> Feedback and/or tips and tricks more than welcome.
>>>
>>
>> <snip>
>> _______________________________________________
>> freebsd-net@freebsd.org mailing list
>> http://lists.freebsd.org/mailman/listinfo/freebsd-net
>> To unsubscribe, send any mail to "freebsd-net-unsubscribe@freebsd.org"



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?CAJ-Vmok6vyrD-2%2BswCBPP_VeMqH6t7CXuVBPUaDfwyRrb6aiTg>