CPU affinity with ULE scheduler

Archimedes Gaviola archimedes.gaviola at gmail.com
Wed Nov 26 03:18:45 PST 2008


> Is there a tool that can we used to trace
> this process just to be able to know which part of the kernel internal
> is doing the bottleneck especially when net.isr.direct=1? By the way
> with device polling enabled, the system experienced packet errors and
> the interface throughput is worst, so I avoid using it though.
>

Since I was really looking for a tool to be able to know how packets
are being processed from the interface and up to the network stack and
applications, but I haven't found any tool for my concern. What I have
found is the LOCK_PROFILING tool. Although I'm sure that this really
not answer my concern but I just tried because I need to know
something about locks which FreeBSD is using with. Some people
consider that there's a lot of factors and variables with regards to
network performance in FreeBSD, so I got a try on this tool. I also
get valuable info from this link
http://markmail.org/message/3uqxi4pipvvoy6jx#query:lock%20profiling%20freebsd+page:1+mid:ymqgrxqf4min54zd+state:results.
Instead of the IBM machine with Broadcom NICs, I use another machine
with 4 x Quad-Core AMD64 with still Broadcom NICs on FreeBSD-7.1
BETA2. I took data results with traffic and without traffic. With
traffic, I use both TCP and UDP protocols in bombarding traffic. UDP
for upload and TCP for download in a back-to-back setup.

What I have found is that there's a high wait_total on some of the
following when there's traffic:

max      total              wait_total   count         avg  wait_avg
cnt_hold      cnt_lock     name

517       24761291      6165864     4460995     5     1
552124      1558183 net/route.c:293 (sleep mutex:radix node head)
277       1427082       140797       354220       4     0
14476        20674 amd64/amd64/io_apic.c:212 (spin mutex:icu)
33         25275           20744        5401          4      3
    0               5400 amd64/amd64/mp_machdep.c:974 (spin
mutex:sched lock 4)
17283   3346679       104214       107262       31     0
4545         4072 kern/kern_sysctl.c:1334 (sleep mutex:Giant)
257       28599           386           1302           21     0
   35             30 vm/vm_fault.c:667 (sleep mutex:vm object)
282       2821743        2673         977635       2     0
926           552 net/if_ethersubr.c:405 (sleep mutex:bce1)
22        743637          157239      256274       2     0
5304         48357 dev/random/randomdev_soft.c:308 (spin mutex:entropy
harvest mutex)
301      16301894       881827     1255534      12     0
241491       45973 dev/bce/if_bce.c:5016 (sleep mutex:bce0)
273      1228787         55458       103863       11     0
3733          4736 kern/subr_sleepqueue.c:232 (spin mutex:sleepq
chain)
624      4682305         1339783    1251253     3     1
32664        254211 dev/bce/if_bce.c:4320 (sleep mutex:bce1)

With lock profiling, how do we know that a certain kernel structure or
function is causing a contention? I only have little knowledge about
mutex, can someone elaborate on these especially sleep and spin mutex?

Unfortunately due to the log result is too big for the mailing list
then I only attached the complete log in compressed format.

Thanks,
Archimedes


More information about the freebsd-smp mailing list