## Sensor Interfaces ### What are Sensor Interfaces? Sensor interfaces are interfaces that help the Oaklean Profiler to obtain energy measurements from the system. Currently, there are two sensor interfaces: | SensorInterface | Operating System | Requires Root Privileges | | --------------- | ---------------- | -------------------------| | [powermetrics](#power-metrics-sensor-interface) | macOS | yes | | [perf](#perf-sensor-interface) | linux | yes
(read below to see
how it works
without root privileges)
| | [windows](#windows-sensor-interface) | windows | yes | > :warning: **Configure the Sensor Interface in the .oaklean.local config file**
> We strongly recommend configuring the Sensor Interface in a dedicated `.oaklean.local` file, read here more about how and why: [Local Oaklean Config](Config.md#local-oaklean-config) ## Power Metrics Sensor Interface `powermetrics` is a tool for macOS that provides detailed information about power consumption and energy use of the system, it comes **pre-installed** on macOS and can handle **Apple Silicon** and **Intel** machines. It can be executed from command line with command:`powermetrics` > :warning: **requires root priviliges**
> Unfortunately `powermetrics` needs root priviliges and we haven't discovered a work around yet. ### How to use it? In order to use the `powermetrics` Sensor Interface simple add this to the `.oaklean` or to the `.oaklean.local` config file in your project: ```json // .oaklean or .oaklean.local { ... "runtimeOptions": { ... "sensorInterface": { "type": "powermetrics", "options": { "sampleInterval": 100, // sample interval in microseconds "outputFilePath": "energy-measurements.plist" } } ... }, ... } ``` #### Docker support > :hourglass_flowing_sand: **In Progress**
We are currently working on a solution to make the powermetrics interface available within a docker container. ## Perf Sensor Interface `perf` is a performance analysis tool for Linux that collects and analyzes performance and trace data. It helps in monitoring and profiling the performance of the entire system, including CPU, memory, and I/O activities. It is usually **not pre-installed** on Linux systems #### How to install perf? - Ubuntu `apt-get update && apt-get -y install linux-tools-generic` - Debian `apt-get update && apt-get -y install linux-perf` - Fedora/RedHat derivates `yum install -y perf` > :point_up: **Other Linux Distributions**
Remember, `perf` is available on various other Linux distributions as well. If you need installation instructions for a specific distribution not listed here, you can easily find them by searching online or referring to the documentation for your particular system! ### How to use it? In order to use the `perf` Sensor Interface simple add this to the `.oaklean` or to the `.oaklean.local` config file in your project: ```json // .oaklean or .oaklean.local { ... "runtimeOptions": { ... "sensorInterface": { "type": "perf", "options": { "sampleInterval": 100, // sample interval in microseconds "outputFilePath": "energy-measurements.txt" } } ... }, ... } ``` #### Running without root privileges Collecting energy measurements with `perf` without root privileges may result in an error like this: ``` You may not have permission to collect stats. Consider tweaking /proc/sys/kernel/perf_event_paranoid: -1 - Not paranoid at all 0 - Disallow raw tracepoint access for unpriv 1 - Disallow cpu events for unpriv 2 - Disallow kernel profiling for unpriv ``` So in order to allow perf to collect energy measurements without root privileges simple run: `sudo sysctl -w kernel.perf_event_paranoid=-1` #### Docker support In order to use `perf` with docker you need to install perf on your host system and mount the kernel modules into your docker container: Be aware that the service needs the **privileged** flag ```yml # docker-compose.yml version: '3' services: service-name: image: # docker image here (needs to be the same kernel as the host system) volumes: - /lib/modules:/lib/modules privileged: true ``` ## Windows Sensor Interface The Windows Sensor Interface is a .NET binary developed for Oaklean. It uses the [LibreHardwareMonitor](https://github.com/LibreHardwareMonitor/LibreHardwareMonitor) library to access hardware sensors on Windows machines. This binary is included with the [@oaklean/windows-sensorinterface](/packages/windows-sensorinterface/README.md) package, which is automatically installed on Windows when you install the [@oaklean/profiler](/packages/profiler/README.md). > :warning: **requires admin priviliges**
> Unfortunately the `Windows Sensor Interface` needs admin priviliges and we haven't discovered a work around yet. > To ensure correct permissions during measurement, we highly recommend opening a shell (e.g., PowerShell) with administrator privileges and running the measurement from there. ### How to use it? In order to use the Windows Sensor Interface simple add this to the `.oaklean` or to the `.oaklean.local` config file in your project: ```json // .oaklean or .oaklean.local { ... "runtimeOptions": { ... "sensorInterface": { "type": "windows", "options": { "sampleInterval": 100, // sample interval in microseconds "outputFilePath": "energy-measurements.csv" } } ... }, ... } ```