Age | Commit message (Collapse) | Author |
|
Conflicts:
sshfs.c
|
|
|
|
Accessing directories with many (several thousand) files over sshfs is
slow, because most SFTP server implementations only send a fixed amount
of entries per READDIR command (e.g. OpenSSH SFTP: 100 entries). This
patch implements sending several READDIR commands in parallel, in order
to speed up directory listing in these cases.
An option (sync_readdir) is also added so that users can easily switch
on the old behaviour.
The performance improvement is astonishing. Accessing a directory with
30k files in from a remote server that has a RTT of 15ms via OpenSSH
SFTP:
Synchronous readdir:
$ ./sshfs -o sync_readdir host:/tmp /mnt/temp
$ time "ls" -1 /mnt/temp/test | wc -l
30000
"ls" -1 /mnt/temp/test 0.07s user 0.01s system 1% cpu 6.928 total
Asynchronous readdir:
$ ./sshfs host:/tmp /mnt/temp
$ time "ls" -1 /mnt/temp/test | wc -l
30000
"ls" -1 /mnt/temp/test 0.07s user 0.01s system 12% cpu 0.605 total
Accessing a directory with 100k files shows even more dramatic
improvement:
Synchronous readdir:
$ ./sshfs -o sync_readdir host:/tmp /mnt/temp
$ time "ls" -1 /mnt/temp/test2 | wc -l
100000
"ls" -1 /mnt/temp/test2 0.67s user 1.22s system 0% cpu 3:31.56 total
Asynchronous readdir:
$ ./sshfs host:/tmp /mnt/temp
$ time "ls" -1 /mnt/temp/test2 | wc -l
100000
"ls" -1 /mnt/temp/test2 0.20s user 0.03s system 14% cpu 1.631 total
This can easily be reproduced by creating a directory on a server and
touching a lot of files in it:
$ mkdir /tmp/test
$ cd /tmp/test
$ for i in $(seq 1 30000); do touch $i; done
Signed-off-by: Alexander Neumann <alexander@bumpern.de>
|
|
Reported by Louis-David Mitterrand
|
|
Reported by Ross Lagerwall
|
|
Conflicts:
ChangeLog
configure.ac
sshfs.1.in
sshfs.c
|
|
|
|
|
|
Reported by Joachim Kopp
|
|
|
|
In the past we relied on libosxfuse including a working unnamed semaphore
implmentation for Mac OS X. This will not be the case in future releases of
OSXFUSE, therefore we need to add our own implementation.
|
|
This prevents I/O error being returned after a successful mount if a symlink is
mounted.
Reported by Bart Friederichs
|
|
The only difference between version 2.4.0 and 2.4.1 is the updated man page to
reflect Darwin/OS X specific changes to upstream SSHFS.
|
|
* Volumes are unmounted using "umount" not "fusermount"
* idmap=user is the deafault setting on Darwin/OS X
|
|
|
|
|
|
|
|
otherwise, other local users could change the mapping, and gain access
to things they shouldn't
|
|
Add -o slave. This option routes the sftp communication over stdin and stdout,
bypassing SSH and network.
|
|
|
|
cache.c: In function ‘cache_add_attr’:
cache.c:167:9: warning: variable ‘now’ set but not used [-Wunused-but-set-variable]
cache.c: In function ‘cache_add_dir’:
cache.c:188:9: warning: variable ‘now’ set but not used [-Wunused-but-set-variable]
cache.c: In function ‘cache_add_link’:
cache.c:212:9: warning: variable ‘now’ set but not used [-Wunused-but-set-variable]
|
|
Verified with `cat -vet` and `grep '\s$'`
|
|
|
|
getline() isn't widely available yet, use fgets() instead
|
|
|
|
add a '-o nomap=ignore|error' option, which defaults to 'error'
|
|
UID/GID mapping had been enabled in previous versions of SSHFS for MacFUSE/
OSXFUSE by default. This is the expected behavior.
|
|
|
|
otherwise, other local users could change the mapping, and gain access
to things they shouldn't
|
|
Add -o slave. This option routes the sftp communication over stdin and stdout,
bypassing SSH and network.
|
|
|
|
cache.c: In function ‘cache_add_attr’:
cache.c:167:9: warning: variable ‘now’ set but not used [-Wunused-but-set-variable]
cache.c: In function ‘cache_add_dir’:
cache.c:188:9: warning: variable ‘now’ set but not used [-Wunused-but-set-variable]
cache.c: In function ‘cache_add_link’:
cache.c:212:9: warning: variable ‘now’ set but not used [-Wunused-but-set-variable]
|
|
Verified with `cat -vet` and `grep '\s$'`
|
|
These options allow you to create a pair of local files, with
username:uid/groupname:gid pairs, one per line. Alternatively, files can
be in standard /etc/passwd / /etc/group format.
The uid/gids are for the remote server, their local counterparts are
looked up with a local getpwnam/getgrnam call. Any stat() calls will
show with the remapped local uid/gid, and any chown() calls will be
remapped back to the remote uid/gid.
|
|
|
|
s/FD_CLOESEC/FD_CLOEXEC/
|
|
Reported by Mike Kelly
|
|
Reported and tested by Vivenzio Pagliari
|
|
Also don't limit the kernel to 64k reads and writes, rather split into
32k sized chunks and send them to the server all at once. This is
more efficient and less demanding from the server.
Reported by Ludovic Courtès. Fix suggested by Niels Möller
|
|
|
|
Patch by E. Kuemmerle
|
|
Remove "-oPreferredAuthentications" from ssh options if the
"password_stdin" option is used. Reported by E. Kuemmerle
|
|
|
|
Add "-oworkaround=fstat" for SFTP servers which don't support
the FSTAT message.
|
|
Based on Amit Singh's work at http://code.google.com/p/macfuse/
|
|
|
|
getline() isn't widely available yet, use fgets() instead
|
|
|
|
add a '-o nomap=ignore|error' option, which defaults to 'error'
|
|
These options allow you to create a pair of local files, with
username:uid/groupname:gid pairs, one per line. Alternatively, files can
be in standard /etc/passwd / /etc/group format.
The uid/gids are for the remote server, their local counterparts are
looked up with a local getpwnam/getgrnam call. Any stat() calls will
show with the remapped local uid/gid, and any chown() calls will be
remapped back to the remote uid/gid.
|