Author: Remi Meier <[email protected]>
Branch: nogil-unsafe-2
Changeset: r90508:0dd8add9e63b
Date: 2017-03-03 14:42 +0100
http://bitbucket.org/pypy/pypy/changeset/0dd8add9e63b/
Log: change test so we don't spend most of the time doing minor GC
before, we were spending most of the time making the huge chains of
X-objects old. there was very little time spent by threads actually
running in parallel.
diff --git a/rpython/memory/gc/incminimark.py b/rpython/memory/gc/incminimark.py
--- a/rpython/memory/gc/incminimark.py
+++ b/rpython/memory/gc/incminimark.py
@@ -279,8 +279,8 @@
# allocated nursery size is 2 times "tl_block_size".
# "cache_line_min" is used to round the actual thread-local
# blocks to a cache line, to avoid pointless cache conflicts.
- "tl_block_size": 65536,
- "cache_line_min": 256,
+ "tl_block_size": 131072,
+ "cache_line_min": 256, # why not 64b?
}
def __init__(self, config,
@@ -900,6 +900,11 @@
self.set_nursery_free(self.nursery_barriers.popleft())
self.set_nursery_top(self.nursery_barriers.popleft())
else:
+ # XXX: if we have more threads than nursery_size/block_size,
+ # the thread(s) not getting any blocks will immediately request
+ # a minor collection, even if the blocks of other threads are
+ # still mostly empty.
+
rgil.master_request_safepoint()
# we are the only thread here; all others are in gc-safepoints
diff --git a/rpython/translator/c/test/test_standalone.py
b/rpython/translator/c/test/test_standalone.py
--- a/rpython/translator/c/test/test_standalone.py
+++ b/rpython/translator/c/test/test_standalone.py
@@ -1442,8 +1442,10 @@
def bootstrap():
rthread.gc_thread_start()
x = None
- for i in range(100000):
+ for i in range(10000000):
x = X(x)
+ if i % 10001 == 0:
+ x = None
state.lock.acquire(True)
os.write(1, "counter=%d\n" % state.counter)
@@ -1458,7 +1460,7 @@
def entry_point(argv):
os.write(1, "hello world\n")
# start 5 new threads
- TS = 100
+ TS = int(argv[1])
state.lock = rthread.allocate_lock()
state.counter = TS
@@ -1467,7 +1469,7 @@
while True:
time.sleep(0.1)
- gc.collect()
+ #gc.collect()
if state.counter == 0:
break
os.write(1, "all threads done\n")
@@ -1475,7 +1477,7 @@
def runme(no__thread):
t, cbuilder = self.compile(entry_point, no__thread=no__thread)
- data = cbuilder.cmdexec('')
+ data = cbuilder.cmdexec('5')
assert data.splitlines() == ['hello world',
'1 ok',
'2 ok',
_______________________________________________
pypy-commit mailing list
[email protected]
https://mail.python.org/mailman/listinfo/pypy-commit