Skip to main content

Cirron measures how many CPU instructions and system calls a piece of Python code executes.

Project description

Cirron

Cirron measures a piece of Python code and report 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 and modify syscalls using strace, Linux only!

Prerequisites

  • Linux with perf events support / Apple ARM OSX
  • C++
  • Python 3.x

Installation

Python

pip install cirron

The wrapper automatically compiles the C++ library (cirronlib.cpp) on first use.

Usage

Performance Counters

$ sudo python
>>> from cirron import Collector
>>> 
>>> # Start collecting performance metrics
>>> with Collector() as collector:
>>>     # Your code here
>>>     print("Hello")
>>> 
>>> # Retrieve the metrics
>>> print(collector.counters)
Counter(time_enabled_ns=144185, instruction_count=19434, branch_misses=440, page_faults=0)

Tracing Syscalls

$ sudo python
>>> from cirron import Tracer, to_tef

>>> with Tracer() as tracer:
>>>     # Your code here
>>>     print("Hello")
>>> 
>>> # Retrieve the trace
>>> print(tracer.trace)
>>> [Syscall(name='write', args='1, "Hello\\n", 6', retval='6', duration='0.000043', timestamp='1720333364.368337', pid='2270837')]
>>> 
>>> # Save the trace for ingesting to Perfetto
>>> open("/tmp/trace", "w").write(to_tef(tracer.trace))

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 for more detailed explanaition of the arguments.

$ sudo python
>>> from cirron import Injector

>>> injector = Injector()
>>> injector.inject("openat", "error", "ENOSPC")
>>> injector.inject("openat", "delay_enter", "1s", when="2+2")
>>> with injector:
>>>     # Open now fails with "No space left on device" and every
>>>     # other call to `openat` will be delayed by 1s.
>>>     f = open("test.txt", "w")

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

Cirron-0.4.tar.gz (15.8 kB view details)

Uploaded Source

Built Distribution

Cirron-0.4-py3-none-any.whl (16.3 kB view details)

Uploaded Python 3

File details

Details for the file Cirron-0.4.tar.gz.

File metadata

  • Download URL: Cirron-0.4.tar.gz
  • Upload date:
  • Size: 15.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.0.0 CPython/3.11.7

File hashes

Hashes for Cirron-0.4.tar.gz
Algorithm Hash digest
SHA256 ada79cdd34e596522f9a49e99e53c635b602662e51e7e0759f98f89d0c166b33
MD5 c999f1aaccdc08e51ae4c2bc8368289b
BLAKE2b-256 b8945787f7de440911eb17a8ce0e035070ecf4ba48596747f8f44f684d5ec725

See more details on using hashes here.

File details

Details for the file Cirron-0.4-py3-none-any.whl.

File metadata

  • Download URL: Cirron-0.4-py3-none-any.whl
  • Upload date:
  • Size: 16.3 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.0.0 CPython/3.11.7

File hashes

Hashes for Cirron-0.4-py3-none-any.whl
Algorithm Hash digest
SHA256 cb6afbd1feccbb38c87708b24cc21134e6fe99d23238bff77fd0bb598abc994b
MD5 e95ba0f71010e86cd4aa5f59254681cc
BLAKE2b-256 368d02d428a9e32f25eef62df3ed195201059300c74b85206e26d491fafddc9e

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page