gvltools 0.2.0 → 0.3.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.rubocop.yml +9 -0
- data/CHANGELOG.md +5 -0
- data/Gemfile.lock +1 -1
- data/ext/gvltools/instrumentation.c +8 -2
- data/lib/gvltools/version.rb +1 -1
- data/lib/gvltools.rb +19 -0
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 5ffb320bec5fdc8a0d4940d8b370af1607a20383e1a9a8f939cc759588ca6627
|
4
|
+
data.tar.gz: 223bee0c124c17296b8386bbdda94406f91b84ad0adcf3acd09921424bb8eaf8
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 1c988c2e9d2c17925b178e4201f99530e75328cda648b3e3b50664e1d751ff5ad086139293a22dab5a54ae18e86bdd7d6e14064f4a4833eae18d3d948f134f20
|
7
|
+
data.tar.gz: 3b56ad91bf7784d0c61e4d321964eeaaae8ca97ec6c6c86c1934e8e95ad9d720b00933a7b0f7e91ec45e7ffd2a07665800c6f616250b7251318dc889a5ba94ca
|
data/.rubocop.yml
CHANGED
data/CHANGELOG.md
CHANGED
@@ -1,5 +1,10 @@
|
|
1
1
|
## [Unreleased]
|
2
2
|
|
3
|
+
## [0.3.0] - 2023-04-11
|
4
|
+
|
5
|
+
- Automatically reset the `WaitingThreads` counter when enabling it (#7).
|
6
|
+
- Disallow resetting the `WaitingThreads` counter when it is active (#7).
|
7
|
+
|
3
8
|
## [0.2.0] - 2023-03-28
|
4
9
|
|
5
10
|
- Use C11 atomics instead of MRI's `rb_atomic_t`.
|
data/Gemfile.lock
CHANGED
@@ -93,12 +93,15 @@ static VALUE local_timer_reset(VALUE module) {
|
|
93
93
|
|
94
94
|
// Thread counts
|
95
95
|
static _Atomic counter_t waiting_threads_total = 0;
|
96
|
+
static _Atomic counter_t waiting_threads_current_generation = 1;
|
97
|
+
static THREAD_LOCAL_SPECIFIER counter_t waiting_threads_ready_generation = 0;
|
96
98
|
|
97
99
|
static VALUE waiting_threads_count(VALUE module) {
|
98
100
|
return ULL2NUM(waiting_threads_total);
|
99
101
|
}
|
100
102
|
|
101
103
|
static VALUE waiting_threads_reset(VALUE module) {
|
104
|
+
waiting_threads_current_generation++;
|
102
105
|
waiting_threads_total = 0;
|
103
106
|
return Qtrue;
|
104
107
|
}
|
@@ -122,6 +125,7 @@ static void gt_thread_callback(rb_event_flag_t event, const rb_internal_thread_e
|
|
122
125
|
if (!was_ready) was_ready = true;
|
123
126
|
|
124
127
|
if (ENABLED(WAITING_THREADS)) {
|
128
|
+
waiting_threads_ready_generation = waiting_threads_current_generation;
|
125
129
|
waiting_threads_total++;
|
126
130
|
}
|
127
131
|
|
@@ -134,7 +138,9 @@ static void gt_thread_callback(rb_event_flag_t event, const rb_internal_thread_e
|
|
134
138
|
if (!was_ready) break; // In case we registered the hook while some threads were already waiting on the GVL
|
135
139
|
|
136
140
|
if (ENABLED(WAITING_THREADS)) {
|
137
|
-
|
141
|
+
if (waiting_threads_ready_generation == waiting_threads_current_generation) {
|
142
|
+
waiting_threads_total--;
|
143
|
+
}
|
138
144
|
}
|
139
145
|
|
140
146
|
if (ENABLED(TIMER_GLOBAL | TIMER_LOCAL)) {
|
@@ -172,6 +178,6 @@ void Init_instrumentation(void) {
|
|
172
178
|
rb_define_singleton_method(rb_mLocalTimer, "monotonic_time", local_timer_monotonic_time, 0);
|
173
179
|
|
174
180
|
VALUE rb_mWaitingThreads = rb_const_get(rb_mGVLTools, rb_intern("WaitingThreads"));
|
175
|
-
rb_define_singleton_method(rb_mWaitingThreads, "
|
181
|
+
rb_define_singleton_method(rb_mWaitingThreads, "_reset", waiting_threads_reset, 0);
|
176
182
|
rb_define_singleton_method(rb_mWaitingThreads, "count", waiting_threads_count, 0);
|
177
183
|
}
|
data/lib/gvltools/version.rb
CHANGED
data/lib/gvltools.rb
CHANGED
@@ -96,8 +96,27 @@ module GVLTools
|
|
96
96
|
end
|
97
97
|
alias_method :count, :count
|
98
98
|
|
99
|
+
def enable
|
100
|
+
unless enabled?
|
101
|
+
reset
|
102
|
+
end
|
103
|
+
super
|
104
|
+
end
|
105
|
+
|
106
|
+
def reset
|
107
|
+
if enabled?
|
108
|
+
raise Error, "can't reset WaitingThreads counter while it is active"
|
109
|
+
else
|
110
|
+
_reset
|
111
|
+
end
|
112
|
+
end
|
113
|
+
|
99
114
|
private
|
100
115
|
|
116
|
+
def _reset
|
117
|
+
end
|
118
|
+
alias_method :_reset, :_reset # to be redefined from C.
|
119
|
+
|
101
120
|
def metric
|
102
121
|
WAITING_THREADS
|
103
122
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: gvltools
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.3.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Jean Boussier
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2023-
|
11
|
+
date: 2023-04-11 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rake-compiler
|
@@ -67,7 +67,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
67
67
|
- !ruby/object:Gem::Version
|
68
68
|
version: '0'
|
69
69
|
requirements: []
|
70
|
-
rubygems_version: 3.4.
|
70
|
+
rubygems_version: 3.4.10
|
71
71
|
signing_key:
|
72
72
|
specification_version: 4
|
73
73
|
summary: Set of GVL instrumentation tools
|