[pypy-commit] pypy quad-color-gc: Update qcgc codebase
ntruessel
pypy.commits at gmail.com
Thu Sep 15 17:10:51 EDT 2016
Author: Nicolas Truessel <ntruessel at njsm.de>
Branch: quad-color-gc
Changeset: r87125:a4672aa11b87
Date: 2016-09-13 22:20 +0200
http://bitbucket.org/pypy/pypy/changeset/a4672aa11b87/
Log: Update qcgc codebase
diff --git a/rpython/translator/c/src/qcgc/config.h b/rpython/translator/c/src/qcgc/config.h
--- a/rpython/translator/c/src/qcgc/config.h
+++ b/rpython/translator/c/src/qcgc/config.h
@@ -31,8 +31,8 @@
/**
* Auto Mark/Collect
*/
-#define QCGC_MAJOR_COLLECTION_THRESHOLD (5 * (1<<QCGC_ARENA_SIZE_EXP))
#define QCGC_INCMARK_THRESHOLD (1<<QCGC_ARENA_SIZE_EXP)
+#define QCGC_INCMARK_TO_SWEEP 5
/**
* DO NOT MODIFY BELOW HERE
diff --git a/rpython/translator/c/src/qcgc/qcgc.c b/rpython/translator/c/src/qcgc/qcgc.c
--- a/rpython/translator/c/src/qcgc/qcgc.c
+++ b/rpython/translator/c/src/qcgc/qcgc.c
@@ -32,18 +32,18 @@
qcgc_state.gp_gray_stack = qcgc_gray_stack_create(16); // XXX
qcgc_state.gray_stack_size = 0;
qcgc_state.phase = GC_PAUSE;
- qcgc_state.bytes_since_collection = 0;
qcgc_state.bytes_since_incmark = 0;
+ qcgc_state.incmark_since_sweep = 0;
qcgc_state.free_cells = 0;
qcgc_state.largest_free_block = 0;
qcgc_allocator_initialize();
qcgc_hbtable_initialize();
qcgc_event_logger_initialize();
- env_or_fallback(qcgc_state.major_collection_threshold,
- "QCGC_MAJOR_COLLECTION", QCGC_MAJOR_COLLECTION_THRESHOLD);
env_or_fallback(qcgc_state.incmark_threshold,
"QCGC_INCMARK", QCGC_INCMARK_THRESHOLD);
+ env_or_fallback(qcgc_state.incmark_to_sweep,
+ "QCGC_INCMARK_TO_SWEEP", QCGC_INCMARK_TO_SWEEP);
setup_signal_handler();
}
@@ -65,15 +65,18 @@
#endif
object_t *result;
- if (qcgc_state.bytes_since_collection >
- qcgc_state.major_collection_threshold) {
- qcgc_collect();
- }
- if (qcgc_state.bytes_since_incmark > qcgc_state.incmark_threshold) {
- qcgc_incmark();
+ if (UNLIKELY(qcgc_state.bytes_since_incmark >
+ qcgc_state.incmark_threshold)) {
+ if (qcgc_state.incmark_since_sweep == qcgc_state.incmark_to_sweep) {
+ qcgc_collect();
+ } else {
+ qcgc_incmark();
+ qcgc_state.incmark_since_sweep++;
+ }
+
}
- if (size <= 1<<QCGC_LARGE_ALLOC_THRESHOLD_EXP) {
+ if (LIKELY(size <= 1<<QCGC_LARGE_ALLOC_THRESHOLD_EXP)) {
// Use bump / fit allocator
//if (qcgc_allocator_state.use_bump_allocator) {
if (true) {
@@ -92,7 +95,6 @@
}
// XXX: Should we use cells instead of bytes?
- qcgc_state.bytes_since_collection += size;
qcgc_state.bytes_since_incmark += size;
@@ -106,7 +108,7 @@
void qcgc_collect(void) {
qcgc_mark();
qcgc_sweep();
- qcgc_state.bytes_since_collection = 0;
+ qcgc_state.incmark_since_sweep = 0;
}
void qcgc_write(object_t *object) {
diff --git a/rpython/translator/c/src/qcgc/src/gc_state.h b/rpython/translator/c/src/qcgc/src/gc_state.h
--- a/rpython/translator/c/src/qcgc/src/gc_state.h
+++ b/rpython/translator/c/src/qcgc/src/gc_state.h
@@ -33,10 +33,10 @@
size_t gray_stack_size;
gc_phase_t phase;
- size_t bytes_since_collection;
size_t bytes_since_incmark;
- size_t major_collection_threshold;
+ size_t incmark_since_sweep;
size_t incmark_threshold;
+ size_t incmark_to_sweep;
size_t free_cells; // Overall amount of free cells without huge
// blocks and free areans. Valid right after sweep
More information about the pypy-commit
mailing list