Date: Wed, 5 Mar 2003 01:12:55 +0200 From: "Petri Helenius" <pete@he.iki.fi> To: "Bosko Milekic" <bmilekic@unixdaemons.com> Cc: <freebsd-current@FreeBSD.ORG>, <freebsd-net@FreeBSD.ORG> Subject: Re: mbuf cache Message-ID: <0e2b01c2e2a3$96fd3b40$932a40c1@PHE> References: <0ded01c2e295$cbef0940$932a40c1@PHE> <20030304164449.A10136@unixdaemons.com> <0e1b01c2e29c$d1fefdc0$932a40c1@PHE> <20030304173809.A10373@unixdaemons.com>
next in thread | previous in thread | raw e-mail | index | archive | help
> > Any comments on the high cpu consumption of mb_free? Or any other places
> > where I should look to improve performance?
>
> What do you mean "high cpu consumption?" The common case of mb_free()
> is this:
According to profiling mb_free takes 18.9% of all time consumed in kernel and is
almost double to next cpu consuming function. Since I´m looking how to optimize
the system, it´s usually a good idea to start looking where most CPU is spent.
For example, I´m wondering if mbufs get unneccessarily freed and allocated or thrown
around different buckets because of the tunables are wrong. I´m not saying that
there must be something wrong with the code itself.
For example what does "in use" mean below: There is no way there is enough
traffic on the system to allocate 7075 mbufs when this netstat -m was taken.
mbuf usage:
GEN cache: 0/0 (in use/in pool)
CPU #0 cache: 7075/8896 (in use/in pool)
CPU #1 cache: 1119/4864 (in use/in pool)
Total: 8194/13760 (in use/in pool)
Mbuf cache high watermark: 8192
Mbuf cache low watermark: 128
Pete
>
> bucket = mb_list->ml_btable[MB_BUCKET_INDX(m, mb_list)];
> owner = bucket->mb_owner & ~MB_BUCKET_FREE;
> switch (owner) {
> ...
> default:
> cnt_lst = MB_GET_PCPU_LIST_NUM(mb_list, owner);
> MB_PUT_OBJECT(m, bucket, cnt_lst);
> MB_MBTYPES_DEC(cnt_lst, type, 1);
> if (bucket->mb_owner & MB_BUCKET_FREE) {
> SLIST_INSERT_HEAD(&(cnt_lst->mb_cont.mc_bhead),
> bucket,
> mb_blist);
> bucket->mb_owner = cnt_lst->mb_cont.mc_numowner;
> }
> }
>
> That's the common path, modulo a couple checks on whether or not the
> container being freed to needs to be moved or whether we're in a
> starvation situation. The only thing to be done, possibly, is make
> the routine smaller by moving those couple of actions to seperate
> routines, but I'm not clear that this is very useful, given that
> mb_free()'s usage is restricted to only inside subr_mbuf.c
>
> > Pete
>
> --
> Bosko Milekic * bmilekic@unixdaemons.com * bmilekic@FreeBSD.org
>
>
To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-current" in the body of the message
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?0e2b01c2e2a3$96fd3b40$932a40c1>
