KMountPoint::probablySlow and cifs mount points

David Faure faure at kde.org
Mon Nov 25 18:33:25 GMT 2013


On Monday 25 November 2013 18:23:53 Mark Gaiser wrote:
> I would be very much in favor
> of killing the "probablySlow" function because we apparently have no
> real detection to even know if something is slow or not. All the
> protocols mentioned in this thread are fast if you use them on local
> area networks.

Here comes some historical information from the KDE dinosaur:

The initial idea of probablySlow() was to disable some non-essential features 
that become really slow over the network - such as, in a filemanager or 
filedialog, opening up .desktop files or .directory files to read icon names; 
or displaying the number of child items in directories.

This was implemented as a huge speed improvement for some NFS/SMB/SSHFS users,
see https://bugs.kde.org/show_bug.cgi?id=178678

However users of fast NFS mounts then complained that all their icons were 
gone - https://bugs.kde.org/show_bug.cgi?id=290666

So what I did, to make everyone happy, was to read these files in a delayed 
manner, on demand (giving priority to the visible icons and doing the rest in 
the background - we already had all the support for that, because it's also 
what happens for mimetype determination). This is even nicer for local 
directories, if they are very large, or the computer is slow, etc. So it's an 
improvement for everyone.

The child count for a directory, in KDirModel, still uses isSlow(), but should 
become delayed somehow, for the same reasons as above. Any takers? ;)

Once that's gone, only the following code will remain, with a behavior that 
depends on the type of filesystem (using the more precise alternative for 
probablySlow() which is KFileSystemType::fileSystemType (*)) :

* stat'ing less often when KDirWatch uses the good old stat-polling mechanism
(OK, I meant "old", but not "good"; however it's sometimes the only mechanism 
available, for network mounts, if FAM isn't available).
* actually using a different KDirWatch backend for network mounts (FAM, by 
default, rather than inotify). I suppose we could just try inotify and 
fallback if it fails to add a watch, though.
* skipping the "is there enough size at destination" check in KIO::CopyJob; I 
wonder why though, is `df` or rather statvfs() very slow for a network mount? 
Surely it's just one roundtrip to the "server"...

* and using a different locking mechanism for nfs mounts in KLockFile, but 
that's already deprecated in favour of QLockFile where I removed the need for 
such a file-system-type test.

How does all this apply to the issue at hand? I don't know :-)

It clearly shows that guessing the speed from the type of filesystem has been 
proven to be wrong, and that another more flexible solution is better, but I'm 
not sure what that better solution would be in the case of okular.
(Reading the first 100K of the file and measuring how long that takes, sounds 
like a better idea than additional roundtrips for measuring speed, in any 
case. What has been read can be kept, rather than thrown away.).

But as long as the method exist, cifs should of course be added to it, no 
issue there. KFileSystemType (*) supports "cifs" already.

(*) Note that KFileSystemType is internal to kdelibs in kdelibs4.
We just made it public in KF5 but only because of the uses listed above (child 
count in kio and klockfile in kde4support). I would prefer these two to be 
fixed so that it doesn't have to be made public.

-- 
David Faure, faure at kde.org, http://www.davidfaure.fr
Working on KDE, in particular KDE Frameworks 5





More information about the kde-core-devel mailing list