tech-kern archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

Re: Patch: create/destroy optimization for pipes



hi,

> The dedicated pipe code is quite a bit faster than the socket code. Here's a
> comparison from libmicro, with PIPE_SOCKETPAIR on the right. This does not
> test page loaning.
> 
>       http://www.netbsd.org/~ad/cleanout/pipe.html

can it be affected by the default buffer size difference
between these pipe implementations?

> 
> Creating and destroying pipes is very expensive because VA space and memory
> must be allocated and freed from kernel_map. This causes global TLB
> shootdowns, meaning interrupts on MP systems.
> 
> The below patch:
> 
> - Caches VA space and memory for the reader side of pipes, which take care
>   of buffering when the pipe is normal (ie uni-directional). This eliminates
>   the TLB shootdowns.
> 
> - It converts the pipe code to use mutex_obj_alloc(), replacing its custom
>   pool_cache.
> 
> - It makes better use of pool_cache, eliminating a lot of calls to
>   initialize and destroy pipe objects.
> 
> Notes:
> 
> - It may not apply cleanly to -current.
> 
> - The sender-size buffer record needs to be zeroed out after a pipe is
>   allocated. The patch omits this.
> 
>       http://www.netbsd.org/~ad/cleanout/pipe.diff
> 
> Comments?

given that our pipe is uni-directional, i don't think there's
much point to have two separate "struct pipe" for each sides of a pipe.

YAMAMOTO Takashi

> 
> Thanks,
> Andrew


Home | Main Index | Thread Index | Old Index