84 #define DTRACE_MONITOR_PROBE(probe, monitor, obj, thread) \
85 { \
86 if (DTraceMonitorProbes) { \
87 DTRACE_MONITOR_PROBE_COMMON(obj, thread); \
88 HOTSPOT_MONITOR_##probe(jtid, \
89 (uintptr_t)(monitor), bytes, len); \
90 } \
91 }
92
93 #else // ndef DTRACE_ENABLED
94
95 #define DTRACE_MONITOR_WAIT_PROBE(obj, thread, millis, mon) {;}
96 #define DTRACE_MONITOR_PROBE(probe, obj, thread, mon) {;}
97
98 #endif // ndef DTRACE_ENABLED
99
100 // Tunables ...
101 // The knob* variables are effectively final. Once set they should
102 // never be modified hence. Consider using __read_mostly with GCC.
103
104 int ObjectMonitor::Knob_InlineNotify = 1;
105 int ObjectMonitor::Knob_Verbose = 0;
106 int ObjectMonitor::Knob_VerifyInUse = 0;
107 int ObjectMonitor::Knob_VerifyMatch = 0;
108 int ObjectMonitor::Knob_SpinLimit = 5000; // derived by an external tool -
109
110 static int Knob_SpinBase = 0; // Floor AKA SpinMin
111 static int Knob_CASPenalty = -1; // Penalty for failed CAS
112 static int Knob_OXPenalty = -1; // Penalty for observed _owner change
113 static int Knob_SpinSetSucc = 1; // spinners set the _succ field
114 static int Knob_SpinEarly = 1;
115 static int Knob_SuccEnabled = 1; // futile wake throttling
116 static int Knob_SuccRestrict = 0; // Limit successors + spinners to at-most-one
117 static int Knob_MaxSpinners = -1; // Should be a function of # CPUs
118 static int Knob_Bonus = 100; // spin success bonus
119 static int Knob_BonusB = 100; // spin success bonus
120 static int Knob_Penalty = 200; // spin failure penalty
121 static int Knob_Poverty = 1000;
122 static int Knob_SpinAfterFutile = 1; // Spin after returning from park()
123 static int Knob_FixedSpin = 0;
124 static int Knob_OState = 3; // Spinner checks thread state of _owner
|
84 #define DTRACE_MONITOR_PROBE(probe, monitor, obj, thread) \
85 { \
86 if (DTraceMonitorProbes) { \
87 DTRACE_MONITOR_PROBE_COMMON(obj, thread); \
88 HOTSPOT_MONITOR_##probe(jtid, \
89 (uintptr_t)(monitor), bytes, len); \
90 } \
91 }
92
93 #else // ndef DTRACE_ENABLED
94
95 #define DTRACE_MONITOR_WAIT_PROBE(obj, thread, millis, mon) {;}
96 #define DTRACE_MONITOR_PROBE(probe, obj, thread, mon) {;}
97
98 #endif // ndef DTRACE_ENABLED
99
100 // Tunables ...
101 // The knob* variables are effectively final. Once set they should
102 // never be modified hence. Consider using __read_mostly with GCC.
103
104 int ObjectMonitor::Knob_Verbose = 0;
105 int ObjectMonitor::Knob_VerifyInUse = 0;
106 int ObjectMonitor::Knob_VerifyMatch = 0;
107 int ObjectMonitor::Knob_SpinLimit = 5000; // derived by an external tool -
108
109 static int Knob_SpinBase = 0; // Floor AKA SpinMin
110 static int Knob_CASPenalty = -1; // Penalty for failed CAS
111 static int Knob_OXPenalty = -1; // Penalty for observed _owner change
112 static int Knob_SpinSetSucc = 1; // spinners set the _succ field
113 static int Knob_SpinEarly = 1;
114 static int Knob_SuccEnabled = 1; // futile wake throttling
115 static int Knob_SuccRestrict = 0; // Limit successors + spinners to at-most-one
116 static int Knob_MaxSpinners = -1; // Should be a function of # CPUs
117 static int Knob_Bonus = 100; // spin success bonus
118 static int Knob_BonusB = 100; // spin success bonus
119 static int Knob_Penalty = 200; // spin failure penalty
120 static int Knob_Poverty = 1000;
121 static int Knob_SpinAfterFutile = 1; // Spin after returning from park()
122 static int Knob_FixedSpin = 0;
123 static int Knob_OState = 3; // Spinner checks thread state of _owner
|