Date: Tue, 3 Apr 2001 17:20:42 -0700 (PDT) From: Matt Dillon <dillon@earth.backplane.com> To: Bosko Milekic <bmilekic@technokratis.com> Cc: Garrett Rooney <rooneg@electricjellyfish.net>, Alfred Perlstein <alfred@FreeBSD.org>, cvs-committers@FreeBSD.org, cvs-all@FreeBSD.org Subject: Re: cvs commit: src/sys/sys mbuf.h src/sys/kern uipc_mbuf.c Message-ID: <200104040020.f340Kgi74269@earth.backplane.com> References: <200104030315.f333FCX69312@freefall.freebsd.org> <20010403140457.B2952@electricjellyfish.net> <200104031813.f33ID4b58965@earth.backplane.com> <20010403194004.A15434@technokratis.com>
next in thread | previous in thread | raw e-mail | index | archive | help
: The reason for the removal isn't related to pollution of system :structures per se (i.e. bloat). There were really only three locks, one :for each free list. : The removal is, the way I see it, a slight pessimization in some :cases at this moment, due to the increase of contention again, in some cases. :... Ok... hmm. Since compare-exchange support is mandatory now, why not simply use it to implement per-cpu free lists for mbufs that does not require any (mutex) locking at all? This solves the contention problem and the interrupt problem. e.g. (pseudo code) allocMBufHeader() { struct mbuf *mb; while ((mb = PerCpuMBufHeaderBase) != NULL) { if (cmpexchangeptr(&PerCpuMBufHeaderBase, mb, mb->mb_Next) == mb) break; } if (mb == NULL) { slow version } return(mb); } freeMBufHeader(mb) { for (;;) { mb->mb_Next = PerCpuMBufHeaderBase; if (cmpexchangeptr(&PerCpuMBufHeaderBase, mb->mb_Next, mb) == mb->mb_Next) break; } } -Matt To Unsubscribe: send mail to majordomo@FreeBSD.org with "unsubscribe cvs-all" in the body of the message
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200104040020.f340Kgi74269>