Hi all,
I'm one of the GNOME gvfs maintainers, and would like to improve the support
of
smb in gvfs, especially in the context of taking advantage of the improvements
of SMB2 and SMB3. Currently we use libsmbclient which provides a fairly easy to
use API. It is not, however, quite sufficient for the way that we would like to
use it (at least I think so):
- Slow transfer speeds. Based on a comment from Jeremy [1], we use a maximum
block size of 65534 which seems to prevent us from maximizing throughput, even
on a 100MBps LAN. I note that smbclient can achieve a higher throughput with
the same block size [2].
This may be related to the ability to support multiple packets in flight
to reduce the effect of latency (which is probably why smbclient can achieve
higher speeds for the same block size). The gvfs push and pull functions could
map to the cli_push and cli_pull functions.
- The mapping between NT error message and UNIX errno makes it difficult to
provide a nice error message to the user or even to know what's going on.
For
example, calling rename() with one of the path's having an invalid character
gives ENOMEM. It is difficult to tell whether this is an out of memory error,
a malformed source URI or a malformed target URI. It would be nice to get
access to the real error message.
Related bugs: https://bugzilla.gnome.org/show_bug.cgi?id=702568
https://bugzilla.gnome.org/show_bug.cgi?id=350976
- No way of easily mapping to and from POSIX permissions resulting in files'
permissions often being inadvertently changed when saving files.
Related bugs: https://bugzilla.gnome.org/show_bug.cgi?id=592651
https://bugzilla.gnome.org/show_bug.cgi?id=581368
- No support for POSIX extensions.
Related bugs: https://bugzilla.gnome.org/show_bug.cgi?id=562029
https://bugzilla.samba.org/show_bug.cgi?id=5926
- No support for file monitoring, e.g. NT_TRANSACT_NOTIFY_CHANGE.
Related bugs: https://bugzilla.gnome.org/show_bug.cgi?id=627107
https://bugzilla.samba.org/show_bug.cgi?id=7393
- Some extras that would be nice to have:
Server side copy. (I understand this hasn't been implemented in Samba
client-side?).
Setting mtime and atime individually.
Finer-grained (e.g. microsecond/nanosecond) timestamps.
Grepping through the Samba source code suggests that almost all of the above is
tantalizingly available somewhere in Samba's various client bits. So my
question is whether it is possible to access this functionality (through
libsmbclient or otherwise), and if so, how? I note that my system has a
smbclient-raw pkgconfig file, yet can find almost nothing online about
how to use this library.
Cheers
Ross Lagerwall
[1] https://bugzilla.gnome.org/show_bug.cgi?id=588391#c10
[2]
Testing pulling files from a local Samba server from a tmpfs to a tmpfs.
Note that the latency of this is small and across a LAN any latency effects
would be more noticeable.
smbclient with default block size: 1429MB/s
smbclient with bs of 65534 bytes: 1644MB/s
smbget with default block size: 207MB/s
smbget with bs of 65534 bytes: 190MB/s
smbget with bs of 1MiB: 884MB/s
On Sun, Apr 13, 2014 at 11:43:06AM +0100, rosslagerwall at gmail.com wrote:> Hi all, > > I'm one of the GNOME gvfs maintainers, and would like to improve the support of > smb in gvfs, especially in the context of taking advantage of the improvements > of SMB2 and SMB3. Currently we use libsmbclient which provides a fairly easy to > use API. It is not, however, quite sufficient for the way that we would like to > use it (at least I think so): > > - Slow transfer speeds. Based on a comment from Jeremy [1], we use a maximum > block size of 65534 which seems to prevent us from maximizing throughput, even > on a 100MBps LAN. I note that smbclient can achieve a higher throughput with > the same block size [2]. > This may be related to the ability to support multiple packets in flight > to reduce the effect of latency (which is probably why smbclient can achieve > higher speeds for the same block size). The gvfs push and pull functions could > map to the cli_push and cli_pull functions. > > - The mapping between NT error message and UNIX errno makes it difficult to > provide a nice error message to the user or even to know what's going on. For > example, calling rename() with one of the path's having an invalid character > gives ENOMEM. It is difficult to tell whether this is an out of memory error, > a malformed source URI or a malformed target URI. It would be nice to get > access to the real error message. > Related bugs: https://bugzilla.gnome.org/show_bug.cgi?id=702568 > https://bugzilla.gnome.org/show_bug.cgi?id=350976 > > - No way of easily mapping to and from POSIX permissions resulting in files' > permissions often being inadvertently changed when saving files. > Related bugs: https://bugzilla.gnome.org/show_bug.cgi?id=592651 > https://bugzilla.gnome.org/show_bug.cgi?id=581368 > > - No support for POSIX extensions. > Related bugs: https://bugzilla.gnome.org/show_bug.cgi?id=562029 > https://bugzilla.samba.org/show_bug.cgi?id=5926 > > - No support for file monitoring, e.g. NT_TRANSACT_NOTIFY_CHANGE. > Related bugs: https://bugzilla.gnome.org/show_bug.cgi?id=627107 > https://bugzilla.samba.org/show_bug.cgi?id=7393 > > - Some extras that would be nice to have: > Server side copy. (I understand this hasn't been implemented in Samba > client-side?). > Setting mtime and atime individually. > Finer-grained (e.g. microsecond/nanosecond) timestamps. > > Grepping through the Samba source code suggests that almost all of the above is > tantalizingly available somewhere in Samba's various client bits. So my > question is whether it is possible to access this functionality (through > libsmbclient or otherwise), and if so, how? I note that my system has a > smbclient-raw pkgconfig file, yet can find almost nothing online about > how to use this library.I'm kind of busy right now, but I wanted to give you feedback that this is very important to us, and please keep pinging the list (and me specifically) if you don't hear anything back in a timely fashion :-). Cheers, Jeremy.