rbbcc 0.3.1 → 0.4.0
Sign up to get free protection for your applications and to get access to all the features.
- 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
|