Mercurial > hg > graal-compiler
comparison src/share/vm/gc_implementation/g1/concurrentG1RefineThread.hpp @ 1111:44f61c24ddab
6862387: tune concurrent refinement further
Summary: Reworked the concurrent refinement: threads activation, feedback-based threshold adjustment, other miscellaneous fixes.
Reviewed-by: apetrusenko, tonyp
author | iveresov |
---|---|
date | Wed, 16 Dec 2009 15:12:51 -0800 |
parents | 035d2e036a9b |
children | c18cbe5936b8 |
comparison
equal
deleted
inserted
replaced
1104:27f9477e879b | 1111:44f61c24ddab |
---|---|
38 | 38 |
39 // The refinement threads collection is linked list. A predecessor can activate a successor | 39 // The refinement threads collection is linked list. A predecessor can activate a successor |
40 // when the number of the rset update buffer crosses a certain threshold. A successor | 40 // when the number of the rset update buffer crosses a certain threshold. A successor |
41 // would self-deactivate when the number of the buffers falls below the threshold. | 41 // would self-deactivate when the number of the buffers falls below the threshold. |
42 bool _active; | 42 bool _active; |
43 ConcurrentG1RefineThread * _next; | 43 ConcurrentG1RefineThread* _next; |
44 public: | 44 Monitor* _monitor; |
45 virtual void run(); | 45 ConcurrentG1Refine* _cg1r; |
46 | 46 |
47 bool is_active() { return _active; } | 47 int _thread_threshold_step; |
48 void activate() { _active = true; } | 48 // This thread activation threshold |
49 void deactivate() { _active = false; } | 49 int _threshold; |
50 // This thread deactivation threshold | |
51 int _deactivation_threshold; | |
50 | 52 |
51 private: | 53 void sample_young_list_rs_lengths(); |
52 ConcurrentG1Refine* _cg1r; | 54 void run_young_rs_sampling(); |
55 void wait_for_completed_buffers(); | |
53 | 56 |
54 double _interval_ms; | 57 void set_active(bool x) { _active = x; } |
55 | 58 bool is_active(); |
56 void decreaseInterval(int processing_time_ms) { | 59 void activate(); |
57 double min_interval_ms = (double) processing_time_ms; | 60 void deactivate(); |
58 _interval_ms = 0.8 * _interval_ms; | |
59 if (_interval_ms < min_interval_ms) | |
60 _interval_ms = min_interval_ms; | |
61 } | |
62 void increaseInterval(int processing_time_ms) { | |
63 double max_interval_ms = 9.0 * (double) processing_time_ms; | |
64 _interval_ms = 1.1 * _interval_ms; | |
65 if (max_interval_ms > 0 && _interval_ms > max_interval_ms) | |
66 _interval_ms = max_interval_ms; | |
67 } | |
68 | |
69 void sleepBeforeNextCycle(); | |
70 | 61 |
71 // For use by G1CollectedHeap, which is a friend. | 62 // For use by G1CollectedHeap, which is a friend. |
72 static SuspendibleThreadSet* sts() { return &_sts; } | 63 static SuspendibleThreadSet* sts() { return &_sts; } |
73 | 64 |
74 public: | 65 public: |
66 virtual void run(); | |
75 // Constructor | 67 // Constructor |
76 ConcurrentG1RefineThread(ConcurrentG1Refine* cg1r, ConcurrentG1RefineThread* next, | 68 ConcurrentG1RefineThread(ConcurrentG1Refine* cg1r, ConcurrentG1RefineThread* next, |
77 int worker_id_offset, int worker_id); | 69 int worker_id_offset, int worker_id); |
70 | |
71 void initialize(); | |
78 | 72 |
79 // Printing | 73 // Printing |
80 void print() const; | 74 void print() const; |
81 void print_on(outputStream* st) const; | 75 void print_on(outputStream* st) const; |
82 | 76 |
83 // Total virtual time so far. | 77 // Total virtual time so far. |
84 double vtime_accum() { return _vtime_accum; } | 78 double vtime_accum() { return _vtime_accum; } |
85 | 79 |
86 ConcurrentG1Refine* cg1r() { return _cg1r; } | 80 ConcurrentG1Refine* cg1r() { return _cg1r; } |
87 | |
88 void sample_young_list_rs_lengths(); | |
89 | 81 |
90 // Yield for GC | 82 // Yield for GC |
91 void yield(); | 83 void yield(); |
92 | |
93 // shutdown | 84 // shutdown |
94 void stop(); | 85 void stop(); |
95 }; | 86 }; |