Hi!
The way data is allocated and copied multiple times when data is sent is bad.
Here's my first summary of changes I want to see happen to make things better
(faster) and less resource wasteful.
Consider this a first rough draft and I certainly will change a few things as
I go along, and if there's anything in here that isn't clear by all means go
ahead and ask. I plan to slowly move through this list of stuff and do changes
in as small pieces as possible one by one, but of course some of them will
require a larger "switch" to the new concept.
Of course, if you have comments, suggestions or want to help out, just speak
up.
compression
- needs to ne able to take the input to compress from two pointers (with two
sizes) and generate a single compressed output chunk
- should also not allocate the compressed output buffer but use a single one
within the session struct (as transport_write() will copy the data off from
that buffer immediately anyway), or even better the transport_write()
function could allocate a buffer to fix an uncompressed buffer as then the
compression function can write its output directly into the allocated send
buffer
- should probably be split off into a separate compression and decompression
function instead of a single unified as they are now, to make these changes
easier
transport_write
- should accept a "packet struct" input with separate pointers to headers
and to payload (each of which may be allocated or not)
- Separating the headers from the payload will greatly enhance our ability
to use a fixed buffer within the session handle for the header part and
provide the payload part as a mere pointer.
- This function is used >30 times in the code.
- If this function gets called with a total packet size that is larger than
32K, it should create more than one SSH packet so that it keeps the largest
one below 32K
channel_write
- should not copy/allocate anything for the data, only create a header chunk
and pass on the payload data to transport_write "pointed to"
sftp_write
- should not copy/allocate anything for the data, only create a header chunk
and pass on the payload data to channel_write "pointed to"
-- / daniel.haxx.se _______________________________________________ libssh2-devel http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-develReceived on 2010-10-08