#performance

app precord

Command line tool for recording process or system performance data

45 releases

0.7.6 Feb 1, 2023
0.7.3 Dec 19, 2022
0.6.7 Nov 30, 2022
0.5.6 Jul 27, 2022
0.3.9 Dec 29, 2021

#405 in Command line utilities

Apache-2.0 OR MIT

1.5MB
42K SLoC

precord

crates.io docs.rs Minimum rustc version

Command line tool for recording process or system performance data.

Installation

Install with cargo:

cargo install precord

Usage

precord -p 1203 -o result.svg

Options

precord -h
  • -c / --category - categories for recording, possible values:
    • cpu - CPU usage of process
    • mem - Memory usage of process
    • alloc - Allocation of process
    • gpu - GPU usage of process
    • vram - VRAM usage of process
    • fps - Frame rate of process
    • net_in/net_out - Network recv/send of process
    • disk_read/disk_write - Disk read/write of process
    • kobject - Kernel object count of process
    • sys_cpu - CPU usage of system
    • sys_cpu_freq - CPU frequency of system
    • sys_cpu_temp - CPU temperature of system
    • sys_gpu - GPU usage of system
    • sys_power - Power usage of system
  • -p / --process - ID of processes
  • --name - Name of processes
  • -o / --output - Specify the output file, possible extensions:
    • .svg
    • .html
    • .json
    • .csv
  • -i / --interval - Interval for recording
  • -n - Count for recording
  • --time - Time limit for recording, e.g., --time 1h30m59s
  • -r / --recurse-children - Flag to recurse child processes
  • --skip - Number of skip records
  • --gpu-calc - Gpu calculation, possible values:
    • max
    • sum

Command Mode

Type : during recording will enter the command mode, and press Esc will back to recording. The supported commands are:

  • w - Write(Save) output
  • q - Exit
  • wq - Combination of w and q
  • time - modify time limit for recording

Sub Commands

  • thread-list <PID> - List threads and cpu usage

precord-core

A library for retrieving process and system performance data.

use precord_core::{Features, GpuCalculation, System};
use std::thread;
use std::time::Duration;

fn main() {
  let mut system = System::new(Features::PROCESS || Features::GPU, [1203]).unwrap();
  thread::sleep(Duration::from_secs(1));
  system.update();

  if let Some(cpu_usage) = system.process_cpu_usage(1203) {
    println!("Process({}) %CPU: {:.2}%", 1203, cpu_usage)
  }
  
  #[cfg(target_os = "windows")]
  if let Some(gpu_usage) = system.process_gpu_usage(1203, GpuCalculation::Max) {
    println!("Process({}) %GPU: {:.2}%", 1203, gpu_usage)
  }
  
  if let Some(sys_gpu_usage) = system.system_gpu_usage(GpuCalculation::Max) {
    println!("System %GPU: {:.2}%", sys_gpu_usage);
  }
}

Supported Platforms

macOS Windows Linux
cpu
mem
alloc
gpu
vram
fps
net_in/net_out
disk_read/disk_write
kobject
sys_cpu
sys_cpu_freq
sys_cpu_temp
sys_gpu
sys_power

Privileges

macOS Windows Linux
cpu
mem
alloc
gpu
vram
fps Administrator + get-task-allow Administrator
net_in/net_out Administrator
disk_read/disk_write
kobject
sys_cpu
sys_cpu_freq Administrator
sys_cpu_temp
sys_gpu
sys_power
system processes
(WindowServer, dwm.exe, etc.)
Administrator Administrator

TODO

Dependencies

~7–57MB
~1M SLoC