[ARVADOS] created: 1.1.3-86-g92002b9
Git user
git at public.curoverse.com
Thu Feb 22 14:48:20 EST 2018
at 92002b9af320e3229f59ca0778d1906e663f3066 (commit)
commit 92002b9af320e3229f59ca0778d1906e663f3066
Author: Peter Amstutz <pamstutz at veritasgenetics.com>
Date: Thu Feb 22 14:47:42 2018 -0500
13064: Add __slots__ to ArvadosFile and FuseArvadosFile
More than 50% decrease in memory footprint for large collections!!!
Arvados-DCO-1.1-Signed-off-by: Peter Amstutz <pamstutz at veritasgenetics.com>
diff --git a/sdk/python/arvados/arvfile.py b/sdk/python/arvados/arvfile.py
index aa6bdad..f4580f3 100644
--- a/sdk/python/arvados/arvfile.py
+++ b/sdk/python/arvados/arvfile.py
@@ -866,6 +866,9 @@ class ArvadosFile(object):
"""
+ __slots__ = ('parent', 'name', '_writers', '_committed',
+ '_segments', 'lock', '_current_bblock', 'fuse_entry')
+
def __init__(self, parent, name, stream=[], segments=[]):
"""
ArvadosFile constructor.
diff --git a/services/fuse/arvados_fuse/fresh.py b/services/fuse/arvados_fuse/fresh.py
index 8b680f0..2a3a19c 100644
--- a/services/fuse/arvados_fuse/fresh.py
+++ b/services/fuse/arvados_fuse/fresh.py
@@ -59,6 +59,10 @@ class FreshBase(object):
* Clear the object contents (invalidates the object)
"""
+
+ __slots__ = ("_stale", "_poll", "_last_update", "_atime", "_poll_time", "use_count",
+ "ref_count", "dead", "cache_size", "cache_uuid", "allow_attr_cache")
+
def __init__(self):
self._stale = True
self._poll = False
diff --git a/services/fuse/arvados_fuse/fusefile.py b/services/fuse/arvados_fuse/fusefile.py
index 5855361..cedb4fb 100644
--- a/services/fuse/arvados_fuse/fusefile.py
+++ b/services/fuse/arvados_fuse/fusefile.py
@@ -15,6 +15,8 @@ _logger = logging.getLogger('arvados.arvados_fuse')
class File(FreshBase):
"""Base for file objects."""
+ __slots__ = ("inode", "parent_inode", "_mtime")
+
def __init__(self, parent_inode, _mtime=0):
super(File, self).__init__()
self.inode = None
@@ -46,6 +48,8 @@ class File(FreshBase):
class FuseArvadosFile(File):
"""Wraps a ArvadosFile."""
+ __slots__ = ('arvfile',)
+
def __init__(self, parent_inode, arvfile, _mtime):
super(FuseArvadosFile, self).__init__(parent_inode, _mtime)
self.arvfile = arvfile
commit 6509f6ec0a997f74b9992b8ef9acb7ae0dbd8c7a
Author: Peter Amstutz <pamstutz at veritasgenetics.com>
Date: Thu Feb 22 14:09:33 2018 -0500
13064: Check has_ref before checking in_use
Kernel behavior seems to be that if a file is referenced, its parents
remain referenced too. This means has_ref() exits early when a
collection is not candidate for eviction.
By contrast, in_use() doesn't increment references on parents, so it
requires a full tree walk to determine if a collection is a candidate
for eviction.
Switching the order of the checks retains correctness but greatly
improves real-world performance.
Arvados-DCO-1.1-Signed-off-by: Peter Amstutz <pamstutz at veritasgenetics.com>
diff --git a/services/fuse/arvados_fuse/__init__.py b/services/fuse/arvados_fuse/__init__.py
index 788d475..3313e5a 100644
--- a/services/fuse/arvados_fuse/__init__.py
+++ b/services/fuse/arvados_fuse/__init__.py
@@ -156,12 +156,14 @@ class InodeCache(object):
def _remove(self, obj, clear):
if clear:
- if obj.in_use():
- _logger.debug("InodeCache cannot clear inode %i, in use", obj.inode)
- return
if obj.has_ref(True):
_logger.debug("InodeCache cannot clear inode %i, still referenced", obj.inode)
return
+
+ if obj.in_use():
+ _logger.debug("InodeCache cannot clear inode %i, in use", obj.inode)
+ return
+
obj.kernel_invalidate()
_logger.debug("InodeCache sent kernel invalidate inode %i", obj.inode)
obj.clear()
@@ -202,7 +204,8 @@ class InodeCache(object):
if obj not in self._by_uuid[obj.cache_uuid]:
self._by_uuid[obj.cache_uuid].append(obj)
self._total += obj.objsize()
- _logger.debug("InodeCache touched inode %i (size %i) (uuid %s) total now %i", obj.inode, obj.objsize(), obj.cache_uuid, self._total)
+ _logger.debug("InodeCache touched inode %i (size %i) (uuid %s) total now %i (%i entries)",
+ obj.inode, obj.objsize(), obj.cache_uuid, self._total, len(self._entries))
self.cap_cache()
def touch(self, obj):
-----------------------------------------------------------------------
hooks/post-receive
--
More information about the arvados-commits
mailing list