[jboss-jira] [JBoss JIRA] (JGRP-1991) TCP_NIO2: copy on demand

Bela Ban (JIRA) issues at jboss.org
Fri Dec 11 05:19:00 EST 2015


    [ https://issues.jboss.org/browse/JGRP-1991?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13140097#comment-13140097 ] 

Bela Ban commented on JGRP-1991:
--------------------------------

Ok, a field {{next_copy}} was added, keeping track of the next buffer(s) to be copied. Adjusted on {{makeSpace()}}.
{{NioConnection}} calls {{Buffers.copy()}} when a write fails (rc==false).

> TCP_NIO2: copy on demand
> ------------------------
>
>                 Key: JGRP-1991
>                 URL: https://issues.jboss.org/browse/JGRP-1991
>             Project: JGroups
>          Issue Type: Enhancement
>            Reporter: Bela Ban
>            Assignee: Bela Ban
>             Fix For: 3.6.7
>
>
> When TCP_NIO2 writes data, we always pass a copy of data of it, because of JGRP-1961 [1].
> However, if we copied the data only on a *partial write* (full writes don't need a copy), then we could always pass data from reused buffers down to the transport.
> Example: we want to write 3 buffers of 100, 200 and 700 bytes in a gathering write (the buffers are allocated from reusable byte[] arrays). 
> If the write returns 1000, we know that all 3 buffers have been written and there is no need to copy any of the buffers. However, if only 500 bytes were written, then we can trash the first 2 buffers, but need to make a copy of the 3rd buffer in range [201 .. 700].
> This allows the sender to reuse previously allocated buffers, as all transports (UDP, TCP, TCP_NIO2) now guarantee that, on return of the send(), either the data was written completely, or a copy was made.
> [1] https://issues.jboss.org/browse/JGRP-1961



--
This message was sent by Atlassian JIRA
(v6.4.11#64026)


More information about the jboss-jira mailing list