it is return to net_read_io() from ssl_read_from_net() when the MIOBuffer
is full for write.

and net_read_io will callback to HttpSM with EVENT_READ_READY to consume
the data in MIOBuffer and reenable ReadVIO.
then do readReschedule() after callback return from HttpSM.

Only read at most 2 blocks, it is limit the memory usage and make every
(include slow & fast) connection has a chance to do read operation.

In a loop, every connection has 2 read operation at most and every
connection only keep 2 IOBufferBlocks memory in a time.

2016-05-28 0:06 GMT+08:00 Craig Schomburg (craigs) <cra...@cisco.com>:

> Alan,
>
> Here is the limit I mentioned:
>
>   /**
>     Returns a pointer to the first writable block on the block chain.
>     Returns NULL if there are not currently any writable blocks on the
>     block list.
>
>   */
>   IOBufferBlock *
>   first_write_block()
>   {
>     if (_writer) {
>       if (_writer->next && !_writer->write_avail())
>         return _writer->next;
>       ink_assert(!_writer->next || !_writer->next->read_avail());
>       return _writer;
>     } else
>       return NULL;
>   }
>
> first_write_block will look at only the first 2 buffer blocks in the list
> when the pointer to the first buffer block is requested.  So if you had a
> chain of more than 2 buffers in the list and the first 2 were full we do
> not continue to iterate through the possible list.
>
> Craig S.
>
>
> From: Alan Carroll <solidwallofc...@yahoo-inc.com<mailto:
> solidwallofc...@yahoo-inc.com>>
> Reply-To: Alan Carroll <solidwallofc...@yahoo-inc.com<mailto:
> solidwallofc...@yahoo-inc.com>>
> Date: Friday, May 27, 2016 at 11:09 AM
> To: "dev@trafficserver.apache.org<mailto:dev@trafficserver.apache.org>" <
> dev@trafficserver.apache.org<mailto:dev@trafficserver.apache.org>>
> Cc: Craig Schomburg <cra...@cisco.com<mailto:cra...@cisco.com>>
> Subject: Re: SSLNetVConnection IOBufferBlock management issue
>
> The IOBufferBlock _end and _start should never be reset to free the buffer
> space. The block itself should be released and a new one allocated to store
> additional information. The buffer block chain can be of arbitrary length,
> I haven't seen anywhere in the code that a max length is presumed. Could
> you point out that code? The IOBufferBlocks are treated as write once,
> stable blocks of memory so they can be passed along without copying the
> memory as the data flows through.
>
> In general would should happen is MIOBuffer::write_avail() should be
> called and that will add a new block (if needed) to the writer block chain
> (see MIOBuffer::write_avail in iocore/eventsystem/P_IOBuffer.h).
> Unfortunately I don't see where that is being done, but we have run 6.2.x
> in production for testing and the TLS works. I'll see what I can find.
>
>
>

Reply via email to