Author: Richard Plangger <planri...@gmail.com> Branch: Changeset: r84403:47f7642ba824 Date: 2016-05-12 17:13 +0200 http://bitbucket.org/pypy/pypy/changeset/47f7642ba824/
Log: (s390x) parsing of /proc/cpuinfo is now more robust, fixed issue that followed with the last commit for s390x in the allocator diff --git a/rpython/jit/backend/zarch/regalloc.py b/rpython/jit/backend/zarch/regalloc.py --- a/rpython/jit/backend/zarch/regalloc.py +++ b/rpython/jit/backend/zarch/regalloc.py @@ -326,6 +326,7 @@ # old even var is not forbidden, sync it and be done with it self._sync_var(old_even_var) del self.reg_bindings[old_even_var] + del reverse_mapping[odd] if old_odd_var: if old_odd_var in forbidden_vars: self._relocate_forbidden_variable(odd, old_odd_var, reverse_mapping, @@ -333,6 +334,7 @@ else: self._sync_var(old_odd_var) del self.reg_bindings[old_odd_var] + del reverse_mapping[odd] self.reg_bindings[even_var] = even self.reg_bindings[odd_var] = odd @@ -359,11 +361,11 @@ if candidate_var is not None: self._sync_var(candidate_var) del self.reg_bindings[candidate_var] + del reverse_mapping[candidate] self.assembler.regalloc_mov(reg, candidate) assert var is not None self.reg_bindings[var] = candidate reverse_mapping[candidate] = var - self.free_regs.append(reg) break else: raise NoVariableToSpill diff --git a/rpython/memory/gc/env.py b/rpython/memory/gc/env.py --- a/rpython/memory/gc/env.py +++ b/rpython/memory/gc/env.py @@ -210,7 +210,7 @@ "Warning: cannot find your CPU L2 cache size in /proc/cpuinfo") return -1 -def get_L2cache_linux2_cpuinfo_s390x(filename="/proc/cpuinfo", label='cache3'): +def get_L2cache_linux2_cpuinfo_s390x(filename="/proc/cpuinfo", label='cache2'): debug_start("gc-hardware") L2cache = sys.maxint try: @@ -230,32 +230,21 @@ data = ''.join(data) linepos = 0 while True: + print linepos start = _findend(data, '\n' + label, linepos) if start < 0: break # done - linepos = _findend(data, '\n', start) - if linepos < 0: - break # no end-of-line?? - # *** data[start:linepos] == " : level=2 type=Instruction scope=Private size=2048K ..." - start = _skipspace(data, start) - if data[start] != ':': + start = _findend(data, 'size=', start) + if start < 0: + break + end = _findend(data, ' ', start) - 1 + if end < 0: + break + linepos = end + size = data[start:end] + if size[len(size)-1] not in ('K', 'k'): # assume kilobytes for now continue - # *** data[start:linepos] == ": level=2 type=Instruction scope=Private size=2048K ..." - start = _skipspace(data, start + 1) - # *** data[start:linepos] == "level=2 type=Instruction scope=Private size=2048K ..." - start += 44 - end = start - while '0' <= data[end] <= '9': - end += 1 - # *** data[start:end] == "2048" - if start == end: - continue - number = int(data[start:end]) - # *** data[end:linepos] == " KB\n" - end = _skipspace(data, end) - if data[end] not in ('K', 'k'): # assume kilobytes for now - continue - number = number * 1024 + number = int(size[:len(size)-1])* 1024 # for now we look for the smallest of the L2 caches of the CPUs if number < L2cache: L2cache = number diff --git a/rpython/memory/gc/test/test_env.py b/rpython/memory/gc/test/test_env.py --- a/rpython/memory/gc/test/test_env.py +++ b/rpython/memory/gc/test/test_env.py @@ -162,21 +162,31 @@ result = env.get_L2cache_linux2_cpuinfo(str(filepath)) assert result == 3072 * 1024 -def test_estimate_best_nursery_size_linux2_s390x(): +def test_estimate_nursery_s390x(): filepath = udir.join('estimate_best_nursery_size_linux2') filepath.write("""\ vendor_id : IBM/S390 # processors : 2 bogomips per cpu: 20325.00 -features : esan3 zarch stfle msa ldisp eimm dfp etf3eh highgprs -cache0 : level=1 type=Data scope=Private size=128K line_size=256 associativity=8 -cache1 : level=1 type=Instruction scope=Private size=96K line_size=256 associativity=6 +... cache2 : level=2 type=Data scope=Private size=2048K line_size=256 associativity=8 cache3 : level=2 type=Instruction scope=Private size=2048K line_size=256 associativity=8 -cache4 : level=3 type=Unified scope=Shared size=65536K line_size=256 associativity=16 -cache5 : level=4 type=Unified scope=Shared size=491520K line_size=256 associativity=30 -processor 0: version = FF, identification = 026A77, machine = 2964 -processor 1: version = FF, identification = 026A77, machine = 2964 +... """) result = env.get_L2cache_linux2_cpuinfo_s390x(str(filepath)) assert result == 2048 * 1024 + + filepath = udir.join('estimate_best_nursery_size_linux3') + filepath.write("""\ +vendor_id : IBM/S390 +# processors : 2 +bogomips per cpu: 9398.00 +... +cache2 : level=2 type=Unified scope=Private size=1536K line_size=256 associativity=12 +cache3 : level=3 type=Unified scope=Shared size=24576K line_size=256 associativity=12 +... +""") + result = env.get_L2cache_linux2_cpuinfo_s390x(str(filepath), label='cache3') + assert result == 24576 * 1024 + result = env.get_L2cache_linux2_cpuinfo_s390x(str(filepath), label='cache2') + assert result == 1536 * 1024 _______________________________________________ pypy-commit mailing list pypy-commit@python.org https://mail.python.org/mailman/listinfo/pypy-commit