rbbcc 0.3.1 → 0.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/Gemfile.lock +2 -2
- data/README.md +4 -0
- data/docs/README.md +2 -0
- data/docs/answers/01-hello-world.rb +16 -0
- data/docs/answers/02-sys_sync.rb +18 -0
- data/docs/answers/03-hello_fields.rb +33 -0
- data/docs/answers/04-sync_timing.rb +46 -0
- data/docs/answers/05-sync_count.rb +54 -0
- data/docs/answers/06-disksnoop.rb +71 -0
- data/docs/answers/07-hello_perf_output.rb +59 -0
- data/docs/answers/08-sync_perf_output.rb +60 -0
- data/docs/answers/09-bitehist.rb +32 -0
- data/docs/answers/10-disklatency.rb +51 -0
- data/docs/answers/11-vfsreadlat.c +46 -0
- data/docs/answers/11-vfsreadlat.rb +66 -0
- data/docs/answers/12-urandomread.rb +38 -0
- data/docs/answers/13-disksnoop_fixed.rb +108 -0
- data/docs/answers/14-strlen_count.rb +46 -0
- data/docs/answers/15-nodejs_http_server.rb +44 -0
- data/docs/answers/16-task_switch.c +23 -0
- data/docs/answers/16-task_switch.rb +17 -0
- data/docs/answers/node-server.js +11 -0
- data/docs/projects_using_rbbcc.md +43 -0
- data/docs/tutorial_bcc_ruby_developer.md +772 -0
- data/lib/rbbcc/bcc.rb +41 -13
- data/lib/rbbcc/clib.rb +1 -0
- data/lib/rbbcc/table.rb +16 -22
- data/lib/rbbcc/version.rb +1 -1
- data/rbbcc.gemspec +1 -1
- metadata +25 -4
data/lib/rbbcc/bcc.rb
CHANGED
@@ -14,6 +14,20 @@ module RbBCC
|
|
14
14
|
|
15
15
|
class BCC
|
16
16
|
class << self
|
17
|
+
def _find_file(filename)
|
18
|
+
if filename
|
19
|
+
unless File.exist?(filename)
|
20
|
+
t = File.expand_path "../#{filename}", $0
|
21
|
+
if File.exist?(t)
|
22
|
+
filename = t
|
23
|
+
else
|
24
|
+
raise "Could not find file #{filename}"
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
return filename
|
29
|
+
end
|
30
|
+
|
17
31
|
def ksym(addr, show_module: false, show_offset: false)
|
18
32
|
self.sym(addr, -1, show_module: show_module, show_offset: show_offset, demangle: false)
|
19
33
|
end
|
@@ -163,23 +177,37 @@ module RbBCC
|
|
163
177
|
end
|
164
178
|
end
|
165
179
|
|
166
|
-
def initialize(text
|
180
|
+
def initialize(text: "", src_file: nil, hdr_file: nil, debug: 0, cflags: [], usdt_contexts: [], allow_rlimit: 0)
|
167
181
|
@kprobe_fds = {}
|
168
182
|
@uprobe_fds = {}
|
169
183
|
@tracepoint_fds = {}
|
170
184
|
@raw_tracepoint_fds = {}
|
171
|
-
|
172
|
-
if
|
173
|
-
|
174
|
-
|
175
|
-
|
176
|
-
|
177
|
-
|
178
|
-
debug,
|
179
|
-
|
180
|
-
|
181
|
-
|
182
|
-
|
185
|
+
|
186
|
+
if src_file
|
187
|
+
src_file = BCC._find_file(src_file)
|
188
|
+
hdr_file = BCC._find_file(hdr_file)
|
189
|
+
end
|
190
|
+
|
191
|
+
if src_file && src_file.end_with?(".b")
|
192
|
+
@module = Clib.bpf_module_create_b(src_file, hdr_file, debug, device)
|
193
|
+
else
|
194
|
+
if src_file
|
195
|
+
text = File.read(src_file)
|
196
|
+
end
|
197
|
+
|
198
|
+
@usdt_contexts = usdt_contexts
|
199
|
+
if code = gen_args_from_usdt
|
200
|
+
text = code + text
|
201
|
+
end
|
202
|
+
|
203
|
+
@module = Clib.bpf_module_create_c_from_string(
|
204
|
+
text,
|
205
|
+
debug,
|
206
|
+
cflags.pack('p*'),
|
207
|
+
cflags.size,
|
208
|
+
allow_rlimit
|
209
|
+
)
|
210
|
+
end
|
183
211
|
@funcs = {}
|
184
212
|
@tables = {}
|
185
213
|
@perf_buffers = {}
|
data/lib/rbbcc/clib.rb
CHANGED
@@ -45,6 +45,7 @@ module RbBCC
|
|
45
45
|
typealias "size_t", "int"
|
46
46
|
|
47
47
|
extern 'void * bpf_module_create_c_from_string(char *, unsigned int, char **, int, long)'
|
48
|
+
extern 'void * bpf_module_create_b(char *filename, char *proto_filename, unsigned int flags, char *dev_name)'
|
48
49
|
extern 'int bpf_num_functions(void *)'
|
49
50
|
extern 'char * bpf_function_name(void *, int)'
|
50
51
|
extern 'void bpf_module_destroy(void *)'
|
data/lib/rbbcc/table.rb
CHANGED
@@ -78,7 +78,9 @@ module RbBCC
|
|
78
78
|
return next_key
|
79
79
|
end
|
80
80
|
|
81
|
-
def [](
|
81
|
+
def [](_key)
|
82
|
+
key = normalize_key(_key)
|
83
|
+
|
82
84
|
leaf = Fiddle::Pointer.malloc(self.leafsize)
|
83
85
|
res = Clib.bpf_lookup_elem(self.map_fd, key, leaf)
|
84
86
|
if res < 0
|
@@ -91,7 +93,8 @@ module RbBCC
|
|
91
93
|
self[key] || raise(KeyError, "key not found")
|
92
94
|
end
|
93
95
|
|
94
|
-
def []=(
|
96
|
+
def []=(_key, leaf)
|
97
|
+
key = normalize_key(_key)
|
95
98
|
res = Clib.bpf_update_elem(self.map_fd, key, leaf, 0)
|
96
99
|
if res < 0
|
97
100
|
raise SystemCallError.new("Could not update table", Fiddle.last_error)
|
@@ -180,6 +183,17 @@ module RbBCC
|
|
180
183
|
end
|
181
184
|
|
182
185
|
private
|
186
|
+
def normalize_key(key)
|
187
|
+
case key
|
188
|
+
when Fiddle::Pointer
|
189
|
+
key
|
190
|
+
when Integer
|
191
|
+
byref(key, keysize)
|
192
|
+
else
|
193
|
+
raise KeyError, "#{key.inspect} must be integer or pointor"
|
194
|
+
end
|
195
|
+
end
|
196
|
+
|
183
197
|
def byref(value, size=sizeof("int"))
|
184
198
|
pack_fmt = case size
|
185
199
|
when sizeof("int") ; "i!"
|
@@ -207,14 +221,6 @@ module RbBCC
|
|
207
221
|
end
|
208
222
|
alias length size
|
209
223
|
|
210
|
-
def [](key)
|
211
|
-
super(normalize_key(key))
|
212
|
-
end
|
213
|
-
|
214
|
-
def []=(key, value)
|
215
|
-
super(normalize_key(key), value)
|
216
|
-
end
|
217
|
-
|
218
224
|
def clearitem(key)
|
219
225
|
self[key] = byref(0, @leafsize)
|
220
226
|
end
|
@@ -229,18 +235,6 @@ module RbBCC
|
|
229
235
|
b.call(v.to_bcc_value)
|
230
236
|
end
|
231
237
|
end
|
232
|
-
|
233
|
-
private
|
234
|
-
def normalize_key(key)
|
235
|
-
case key
|
236
|
-
when Fiddle::Pointer
|
237
|
-
key
|
238
|
-
when Integer
|
239
|
-
byref(key, keysize)
|
240
|
-
else
|
241
|
-
raise KeyError, "#{key.inspect} must be integer or pointor"
|
242
|
-
end
|
243
|
-
end
|
244
238
|
end
|
245
239
|
|
246
240
|
class PerfEventArray < TableBase
|
data/lib/rbbcc/version.rb
CHANGED
data/rbbcc.gemspec
CHANGED
@@ -22,7 +22,7 @@ Gem::Specification.new do |spec|
|
|
22
22
|
spec.require_paths = ["lib"]
|
23
23
|
|
24
24
|
spec.add_development_dependency "bundler", "~> 2.0"
|
25
|
-
spec.add_development_dependency "rake", "~>
|
25
|
+
spec.add_development_dependency "rake", "~> 13.0"
|
26
26
|
spec.add_development_dependency "pry"
|
27
27
|
spec.add_development_dependency "minitest"
|
28
28
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rbbcc
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.4.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Uchio Kondo
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2020-
|
11
|
+
date: 2020-03-13 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -30,14 +30,14 @@ dependencies:
|
|
30
30
|
requirements:
|
31
31
|
- - "~>"
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version: '
|
33
|
+
version: '13.0'
|
34
34
|
type: :development
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
38
|
- - "~>"
|
39
39
|
- !ruby/object:Gem::Version
|
40
|
-
version: '
|
40
|
+
version: '13.0'
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
42
|
name: pry
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
@@ -85,7 +85,28 @@ files:
|
|
85
85
|
- bin/console
|
86
86
|
- bin/setup
|
87
87
|
- docs/README.md
|
88
|
+
- docs/answers/01-hello-world.rb
|
89
|
+
- docs/answers/02-sys_sync.rb
|
90
|
+
- docs/answers/03-hello_fields.rb
|
91
|
+
- docs/answers/04-sync_timing.rb
|
92
|
+
- docs/answers/05-sync_count.rb
|
93
|
+
- docs/answers/06-disksnoop.rb
|
94
|
+
- docs/answers/07-hello_perf_output.rb
|
95
|
+
- docs/answers/08-sync_perf_output.rb
|
96
|
+
- docs/answers/09-bitehist.rb
|
97
|
+
- docs/answers/10-disklatency.rb
|
98
|
+
- docs/answers/11-vfsreadlat.c
|
99
|
+
- docs/answers/11-vfsreadlat.rb
|
100
|
+
- docs/answers/12-urandomread.rb
|
101
|
+
- docs/answers/13-disksnoop_fixed.rb
|
102
|
+
- docs/answers/14-strlen_count.rb
|
103
|
+
- docs/answers/15-nodejs_http_server.rb
|
104
|
+
- docs/answers/16-task_switch.c
|
105
|
+
- docs/answers/16-task_switch.rb
|
106
|
+
- docs/answers/node-server.js
|
88
107
|
- docs/getting_started.md
|
108
|
+
- docs/projects_using_rbbcc.md
|
109
|
+
- docs/tutorial_bcc_ruby_developer.md
|
89
110
|
- examples/bitehist.rb
|
90
111
|
- examples/charty/Gemfile
|
91
112
|
- examples/charty/Gemfile.lock
|