Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 23 Jan 2006 14:45:46 -0800
From:      Julian Elischer <julian@elischer.org>
To:        John Baldwin <jhb@freebsd.org>
Cc:        freebsd-current@freebsd.org
Subject:   Re: kernel thread as real threads..
Message-ID:  <43D55C9A.9010801@elischer.org>
In-Reply-To: <200601231739.02247.jhb@freebsd.org>
References:  <43D05151.5070409@elischer.org> <200601231616.49140.jhb@freebsd.org> <43D55739.80608@elischer.org> <200601231739.02247.jhb@freebsd.org>

next in thread | previous in thread | raw e-mail | index | archive | help
John Baldwin wrote:

>On Monday 23 January 2006 17:22, Julian Elischer wrote:
>  
>
>>John Baldwin wrote:
>>    
>>
>>>On Thursday 19 January 2006 21:56, Julian Elischer wrote:
>>>      
>>>
>>>>some progrsss..
>>>>as the first few lines show, it's not quite perfect yet but it's most of
>>>>the way there..
>>>>(Like proc 1 isn't init)
>>>>        
>>>>
>>>One other note, watch out for the AIO daemons.  They have to be kernel
>>>procs and not kthreads because they borrow the vmspace of the user
>>>process when performing AIO on another process' behalf.
>>>      
>>>
>>yeah I found that and the patches account for that.
>>
>>However I would like to suggest that we change the way that aio works..
>>
>>My suggestion is that when a process does AIO, that we "fork a ksegroup"
>>and attach it to the
>>process, and assign it a (or some) worker thread to do the aio work.
>>The userland process would
>>be oblivious of the extra (kernel) threads in that kseg and they would
>>be independently schedulable.
>>They would however automatically have full access to the correct address
>>space.
>>    
>>
>
>That's probably a better model, yes.  One thing I would prefer though is if we 
>could limit the knowledge of ksegroups to the scheduler as much as possible 
>and let the rest of the kernel just deal with threads and processes.  
>Ideally, we'd reach the point where you have an API to say "create a thread 
>for process p" and kthreads just use a kernel process for 'p' and maybe the 
>API takes a flag to say if a thread is separate or not.  Really, aio should 
>probably just be separate system scope threads, and you could almost do that 
>in userland now.
>  
>

the aim of ksegroups is simply as containers sothat you can group 
threads from a scheduler perspective.
The kernel threads code I have in the patch automatically creates system 
sscope threads by associating
them each with a separate kseg (ksegs are small) however it might by 
fairer to group multiple
aio threads into a single ksegrp so that you don't flood the system if 
you make a lot of them..
of course that brings up teh question as to whether a process doing AIO 
would require just a single thread or
a bunch if them.. (do you want a separate thread per aio request or to 
multiplex them?)
multiplexing them saves resources (and may be more extensible) but 
having a single blocking thread per
request would be really simple and easy to debug....  I guess the 
current multiplexeing code would work for
multiplexed threads. you could just drop the vm futzing code.





Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?43D55C9A.9010801>