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
         
     |