From: Vlad Brezae Date: Wed, 1 Mar 2017 00:03:14 +0000 (+0200) Subject: [sgen] Add option for parallel nursery collector X-Git-Url: http://wien.tomnetworks.com/gitweb/?p=mono.git;a=commitdiff_plain;h=ba6c07c49c00410e5e36b3be4cb9ecd09cd25e60 [sgen] Add option for parallel nursery collector --- diff --git a/mono/sgen/sgen-gc.c b/mono/sgen/sgen-gc.c index fb6082ab6ab..bcfee619b32 100644 --- a/mono/sgen/sgen-gc.c +++ b/mono/sgen/sgen-gc.c @@ -3003,11 +3003,13 @@ sgen_gc_init (void) sgen_client_init (); if (!minor_collector_opt) { - sgen_simple_nursery_init (&sgen_minor_collector); + sgen_simple_nursery_init (&sgen_minor_collector, FALSE); } else { if (!strcmp (minor_collector_opt, "simple")) { use_simple_nursery: - sgen_simple_nursery_init (&sgen_minor_collector); + sgen_simple_nursery_init (&sgen_minor_collector, FALSE); + } else if (!strcmp (minor_collector_opt, "simple-par")) { + sgen_simple_nursery_init (&sgen_minor_collector, TRUE); } else if (!strcmp (minor_collector_opt, "split")) { sgen_split_nursery_init (&sgen_minor_collector); } else { diff --git a/mono/sgen/sgen-gc.h b/mono/sgen/sgen-gc.h index e8df83337a6..f90c4446945 100644 --- a/mono/sgen/sgen-gc.h +++ b/mono/sgen/sgen-gc.h @@ -559,6 +559,7 @@ sgen_nursery_is_object_alive (GCObject *obj) typedef struct { gboolean is_split; + gboolean is_parallel; GCObject* (*alloc_for_promotion) (GCVTable vtable, GCObject *obj, size_t objsize, gboolean has_references); @@ -578,7 +579,7 @@ typedef struct { extern SgenMinorCollector sgen_minor_collector; -void sgen_simple_nursery_init (SgenMinorCollector *collector); +void sgen_simple_nursery_init (SgenMinorCollector *collector, gboolean parallel); void sgen_split_nursery_init (SgenMinorCollector *collector); /* Updating references */ diff --git a/mono/sgen/sgen-simple-nursery.c b/mono/sgen/sgen-simple-nursery.c index 24a59f759a9..2222a12d75a 100644 --- a/mono/sgen/sgen-simple-nursery.c +++ b/mono/sgen/sgen-simple-nursery.c @@ -93,9 +93,10 @@ fill_serial_with_concurrent_major_ops (SgenObjectOperations *ops) } void -sgen_simple_nursery_init (SgenMinorCollector *collector) +sgen_simple_nursery_init (SgenMinorCollector *collector, gboolean parallel) { collector->is_split = FALSE; + collector->is_parallel = parallel; collector->alloc_for_promotion = alloc_for_promotion; diff --git a/mono/sgen/sgen-split-nursery.c b/mono/sgen/sgen-split-nursery.c index 078e1908d4e..38dc0c8c3a7 100644 --- a/mono/sgen/sgen-split-nursery.c +++ b/mono/sgen/sgen-split-nursery.c @@ -452,6 +452,7 @@ void sgen_split_nursery_init (SgenMinorCollector *collector) { collector->is_split = TRUE; + collector->is_parallel = FALSE; collector->alloc_for_promotion = minor_alloc_for_promotion;