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