[vlc-devel] [PATCH 0/1] Improve SFTP network performance with buffer
Martin Disch
martindisch at gmail.com
Fri Mar 2 20:42:22 CET 2018
On Thu, Mar 1, 2018 at 9:25 AM, Ilkka Ollakka <ileoo at videolan.org> wrote:
> If you want to test the patch is hacked quickly like this:
>
> diff --git a/modules/access/sftp.c b/modules/access/sftp.c
> index 1219f573a1..c6939e570e 100644
> --- a/modules/access/sftp.c
> +++ b/modules/access/sftp.c
> @@ -520,7 +520,14 @@ static ssize_t Read( stream_t *p_access, void *buf,
> size_t len )
> {
> access_sys_t *p_sys = p_access->p_sys;
>
> + /* Set the socket in non-blocking mode */
> + libssh2_session_set_blocking( p_sys->ssh_session, 0 );
> +
> ssize_t val = libssh2_sftp_read( p_sys->file, buf, len );
> + if( val == LIBSSH2_ERROR_EAGAIN )
> + {
> + return -1;
> + }
> if( val < 0 )
> {
> msg_Err( p_access, "read failed" );
I tried it and a few interesting things happened.
First after applying your patch, playback did not work at all, instead
stopping with "sftp stream error: read failed". I checked which error
it was that libssh2 was returning that caused this and it turned out
to be -31, which is LIBSSH2_ERROR_SFTP_PROTOCOL. I have no idea why
this happens on my system when it works on yours, but it's not that
big of a problem.
I worked around it by adding the error to the check you're already
doing for the EAGAIN error, which did the job. I didn't do any
elaborate measurements, but just looking at the bandwidth usage I
didn't see an improvement. I was using a large prefetch buffer again,
hoping to see the prefetch module fill it up quickly using all
available bandwidth, but unlike when using a large read size, it
didn't manage. It barely used enough bandwidth to keep up with
playback and couldn't really prefetch anything.
--
Martin Disch
martindisch at gmail.com
More information about the vlc-devel
mailing list