use filepath-bytestring for annex object manipulations
git-annex find is now RawFilePath end to end, no string conversions. So is git-annex get when it does not need to get anything. So this is a major milestone on optimisation. Benchmarks indicate around 30% speedup in both commands. Probably many other performance improvements. All or nearly all places where a file is statted use RawFilePath now.
This commit is contained in:
parent
bdec7fed9c
commit
c19211774f
53 changed files with 324 additions and 234 deletions
|
@ -11,26 +11,12 @@ than find so the improvement is not as large.
|
|||
|
||||
The `bs` branch is in a mergeable state now, but still needs work:
|
||||
|
||||
* Profile various commands and look for hot spots.
|
||||
|
||||
* Eliminate all the fromRawFilePath, toRawFilePath, encodeBS,
|
||||
decodeBS conversions. Or at least most of them. There are likely
|
||||
quite a few places where a value is converted back and forth several times.
|
||||
|
||||
As a first step, profile and look for the hot spots. Known hot spots:
|
||||
some places where a value is converted back and forth several times.
|
||||
|
||||
* keyFile uses fromRawFilePath and that adds around 3% overhead in `git-annex find`.
|
||||
Converting it to a RawFilePath needs a version of `</>` for RawFilePaths.
|
||||
* getJournalFileStale uses fromRawFilePath, and adds 3-5% overhead in
|
||||
`git-annex whereis`. Converting it to RawFilePath needs a version
|
||||
of `</>` for RawFilePaths. It also needs a ByteString.readFile
|
||||
for RawFilePath.
|
||||
|
||||
* System.FilePath is not available for RawFilePath, and many of the
|
||||
conversions are to get a FilePath in order to use that library.
|
||||
|
||||
It should be entirely straightforward to make a version of System.FilePath
|
||||
that can operate on RawFilePath, except possibly there could be some
|
||||
complications due to Windows.
|
||||
|
||||
* Use versions of IO actions like getFileStatus that take a RawFilePath,
|
||||
avoiding a conversion. Note that these are only available on unix, not
|
||||
windows, so a compatability shim will be needed.
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue