Use smaller cache if it cannot allocate

This commit is contained in:
Geoffrey Frogeye 2019-12-25 13:03:55 +01:00
parent 0e7479e23e
commit 195f41bd9f
Signed by: geoffrey
GPG key ID: D8A7ECA00A8CD3DD

View file

@ -227,10 +227,19 @@ class Database(Profiler):
self.log.warning("Allocating more than 512 MiB of RAM for " self.log.warning("Allocating more than 512 MiB of RAM for "
"the Ip4 cache is not necessary.") "the Ip4 cache is not necessary.")
max_cache_width = int(math.log2(max(1, max_size*8))) max_cache_width = int(math.log2(max(1, max_size*8)))
allocated = False
cache_width = min(2**32, max_cache_width) cache_width = min(2**32, max_cache_width)
while not allocated:
cache_size = 2**cache_width
try:
self.ip4cache = numpy.zeros(cache_size, dtype=numpy.bool)
except MemoryError:
self.log.exception(
"Could not allocate cache. Retrying a smaller one.")
cache_width -= 1
continue
allocated = True
self.ip4cache_shift = 32-cache_width self.ip4cache_shift = 32-cache_width
cache_size = 2**cache_width
self.ip4cache = numpy.zeros(cache_size, dtype=numpy.bool)
for _ in self.exec_each_ip4(self._set_ip4cache): for _ in self.exec_each_ip4(self._set_ip4cache):
pass pass