summaryrefslogtreecommitdiff
path: root/debian
diff options
context:
space:
mode:
authorGravatar Joey Hess <joey@kitenet.net>2012-03-11 15:19:07 -0400
committerGravatar Joey Hess <joey@kitenet.net>2012-03-11 16:24:07 -0400
commitb086e32c63a4932fc5916bedae7abe0690da4eb0 (patch)
treee3c59401831ef04602151b18e3cfcc10c8887881 /debian
parenta13949bf3794a33248611aca9ef821a6088b1b3a (diff)
unused: Reduce memory usage significantly.
Much of the memory bloat turned out to be due to getKeysReferenced containing a mapM, which is strict and buffered the whole list rather than streaming it. The other half of the bloat was due to building a temporary Set in order to call S.difference. While that is more cpu efficient, I switched to successive S.delete, since with it, I can run a whole git annex unused in less than 8 mb of memory. The whole Set of keys with content available is still stored in memory, so running unused in a repo with a whole lot of file content will still use more memory. In a repo containing 6000 files, it needed 40 mb. Note that the status command still uses the bloatful getKeysReferenced.
Diffstat (limited to 'debian')
-rw-r--r--debian/changelog3
1 files changed, 3 insertions, 0 deletions
diff --git a/debian/changelog b/debian/changelog
index 10dc1c50c..2cb5a1aea 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -3,6 +3,9 @@ git-annex (3.20120310) UNRELEASED; urgency=low
* fsck: Fix up any broken links and misplaced content caused by the
directory hash calculation bug fixed in the last release.
* sync: Sync to lower cost remotes first.
+ * unused: Reduce memory usage significantly. Still not constant
+ space, but now only needs to store the set of file contents that
+ are present in the annex in memory.
-- Joey Hess <joeyh@debian.org> Sat, 10 Mar 2012 14:03:22 -0400