[sgen] Add option for parallel nursery collector
authorVlad Brezae <brezaevlad@gmail.com>
Wed, 1 Mar 2017 00:03:14 +0000 (02:03 +0200)
committerVlad Brezae <brezaevlad@gmail.com>
Thu, 30 Mar 2017 11:13:24 +0000 (14:13 +0300)
mono/sgen/sgen-gc.c
mono/sgen/sgen-gc.h
mono/sgen/sgen-simple-nursery.c
mono/sgen/sgen-split-nursery.c

index fb6082ab6ab097da6911bab9a45fa1e0280ecead..bcfee619b32c72412f15edb33a067a4ce163bdcf 100644 (file)
@@ -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 {
index e8df83337a63fc88e57f4a40aa34a0ea8c68f39b..f90c44469454e6bc50850a031464269296f61c8d 100644 (file)
@@ -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 */
index 24a59f759a97602d2d1c0d99558201d775940bf9..2222a12d75a94b27c11d614b6028dd0895f19834 100644 (file)
@@ -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;
 
index 078e1908d4e36855e3dfe2fd0202371793210911..38dc0c8c3a7a68b5b836e361ee0931471fcad54b 100644 (file)
@@ -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;