Messages in this thread | | | Date | Wed, 24 Dec 2008 00:38:18 +0300 | From | Evgeniy Polyakov <> | Subject | Re: [PATCH][RFC 23/23]: Support for zero-copy TCP transmit of user space data |
| |
On Tue, Dec 23, 2008 at 10:16:25PM +0300, Vladislav Bolkhovitin (vst@vlnb.net) wrote: > Actually, there's another way, which seems to be a lot simpler. Alexey > Kuznetsov privately suggested it to me. > > In skb_shared_info new pointer transaction_token would be added, which > would point on: > > struct sk_transaction_token > { > atomic_t io_count; > struct sk_transaction_token *next; > unsigned long token; > unsigned long private; > void (*finish_callback)(struct > sk_transaction_token *); > }; > > When skb is translated, transaction_token inherited. If 2 skb are merged > (the same places where I put net_get_page's in my patch), the *older* > token is inherited. This is the main point of this idea. > > Before starting new asynchronous send a client would open a new token. > Everything sent then would receive that token. Finish_callback() would > be called and the corresponding token freed, when io_count == 0 *AND* > all previous tokens closed. > > This idea seems to be simpler, than even what Rusty implemented. Correct > me, if I wrong. But, unfortunately, in the near future I will have no > time to develop it.. :-(
Yes, it is simpler and cleaner, but it requires additional allocation. This is additional (and quite noticeble) overhead.
-- Evgeniy Polyakov
| |