Date: Fri, 19 Sep 2008 20:23:42 +0200 From: Marko Zec <zec@freebsd.org> To: Julian Elischer <julian@elischer.org> Cc: Perforce Change Reviews <perforce@freebsd.org>, FreeBSD virtualization mailing list <freebsd-virtualization@freebsd.org> Subject: Re: vimage and curvnet. Message-ID: <200809192023.42904.zec@freebsd.org> In-Reply-To: <48D3E778.3020305@elischer.org> References: <200809191743.m8JHhZj8009388@repoman.freebsd.org> <48D3E778.3020305@elischer.org>
next in thread | previous in thread | raw e-mail | index | archive | help
On Friday 19 September 2008 19:55:04 Julian Elischer wrote: > Marko Zec wrote: > > http://perforce.freebsd.org/chv.cgi?CH=150125 > > > > Change 150125 by zec@zec_tpx32 on 2008/09/19 17:43:14 > > > > curvnet is never set on entry to sysctl handlers, thus > > set the vnet context via TD_TO_VNET(curthread), because > > all threads must have a cred->vimage->vnet context set. > > it seems to me that vnet is an important enough variable that we ^^^^ I guess you meant curvnet? > could put it in the pcpu structure and have the scheduler set it up > on context switches when vimage is compiled in. Right now curvnet is defined in vimage.h as #define curvnet curthread->td_vnet Note that there's also a helper field in struct thread called td_vnet_lpush aimed at tracing CURVNET_SET() stacking as well as finding places when CURVNET_RESTORE() is not called after CURVNET_SET(). Both td_vnet and td_vnet_lpush _must_ be stored with each thread anyhow, given that threads can migrate practically at any time. So, if pcpu shadowing of curthread->td_vnet could yield performace improvements than this would make sense, but we would still need to keep td_vnet as a field in struct thread, and have CURVNET_SET() and CURVNET_RESTORE() macros atomically update both the td_ field and its pcpu shadow, which would require each CURVNET_XXX() macro to include critical_enter() / _exit() invocations... > thus it would always be directly available. > i.e. %gs:CURVNET_OFFSET or whatever the syntax is on x86 > and the equivalent on other architectures. > > > Affected files ... > > > > .. //depot/projects/vimage-commit2/src/sys/netinet/tcp_subr.c#14 > > edit > > > > Differences ... > > > > ==== //depot/projects/vimage-commit2/src/sys/netinet/tcp_subr.c#14 > > (text+ko) ==== > > > > @@ -119,7 +119,7 @@ > > static int > > sysctl_net_inet_tcp_mss_check(SYSCTL_HANDLER_ARGS) > > { > > - INIT_VNET_INET(curvnet); > > + INIT_VNET_INET(TD_TO_VNET(curthread)); > > int error, new; > > > > new = V_tcp_mssdflt; > > @@ -141,7 +141,7 @@ > > static int > > sysctl_net_inet_tcp_mss_v6_check(SYSCTL_HANDLER_ARGS) > > { > > - INIT_VNET_INET6(curvnet); > > + INIT_VNET_INET6(TD_TO_VNET(curthread)); > > int error, new; > > > > new = V_tcp_v6mssdflt;
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200809192023.42904.zec>