RubyGems Navigation menu

cirron 0.4.0

Cirron

Cirron measures a piece of Ruby code and reports back several performance counters: CPU instruction count, branch misses, page faults and time spent measuring. It uses the Linux perf events interface or @ibireme’s KPC demo on OSX.

It can also trace syscalls using strace, Linux only!

Prerequisites

- Linux with perf events support / Apple ARM OSX
- C++
- Ruby 3.x

Usage

Performance Counters

$ sudo irb
irb(main):001> require 'cirron'
=> true
irb(main):002* c = Cirron::collector do
irb(main):003*   puts "Hello"
irb(main):004> end
Hello
=> Counter(time_enabled_ns: 110260, instruction_count: 15406, branch_misses: 525, page_faults: 0)

Tracing Syscalls

$ sudo irb
irb> require 'cirron'
=> true
irb> trace = Cirron::tracer do
irb>  # Your code here
irb>  puts "Hello"
irb> end
=> [#<Syscall:0x00007c6c1a4b3608 @args="1, [{iov_base=\"Hello\", iov_len=5}, {iov_base=\"\\n\", iov_len=1}], 2", @duration="0.000201", @name="writev", @pid="2261962", @retval="6", @timestamp="1720285300.334976">]
# Save the trace for ingesting to Perfetto
irb> File.write("/tmp/trace", Cirron::to_tef(trace))
=> 267

Tampering with Syscalls

Available tampering actions are: error: Inject a fault with the specified errno. retval: Inject a success with the specified return value. signal: Deliver the specified signal on syscall entry. delay_enter: Delay syscall entry by the specified time. delay_exit: Delay syscall exit by the specified time. poke_enter: Modify memory at argN on syscall entry. poke_exit: Modify memory at argN on syscall exit. syscall: Inject a different syscall instead.

The when argument can be used to specify when to perform the tampering.

See the Tampering section of the [strace manual page](man7.org/linux/man-pages/man1/strace.1.html) for more detailed explanaition of the arguments.

“‘ $ sudo irb irb> require ’cirron’

irb> injector = Cirron.injector irb> injector.inject(“openat”, “error”, “ENOSPC”) irb> injector.inject(“openat”, “delay_enter”, “1s”, when_condition=“2+2”) irb> injector.run do irb> # Open now fails with “No space left on device” and every irb> # other call to ‘openat` will be delayed by 1s. irb> File.open(“test.txt”, “w”) irb> end “`

Additional Information

For more detailed information, please visit the project’s GitHub page: github.com/s7nfo/Cirron

Gemfile:
=

安裝:
=

版本列表:

  1. 0.4.0 September 10, 2024 (19.0 KB)
  2. 0.3.1 July 09, 2024 (18.0 KB)
  3. 0.3 July 07, 2024 (18.0 KB)
  4. 0.2.9 July 06, 2024 (18.0 KB)
  5. 0.2.8 July 06, 2024 (18.0 KB)
顯示所有版本(共 12)

擁有者:

推送者:

作者:

  • Matt Stuchlik

SHA 256 總和檢查碼:

=

總下載次數 2,316

這個版本 301

版本发布:

授權:

MIT

Ruby 版本需求: >= 3.0.0

相關連結: