- AMD GPU support via Linux sysfs — no new dependencies required
- AMD GPUs detected automatically from
/sys/class/drm/card*/device/vendor(vendor0x1002) - GPU utilization from
gpu_busy_percent, VRAM frommem_info_vram_total/mem_info_vram_used - AMD GPU temperatures from hwmon
temp1_input/temp1_crit - Mixed NVIDIA+AMD systems show all GPUs together with unified numbering
- Gracefully handles missing sysfs files (older cards, APUs): util→0%, VRAM→0/0 GB, temp→N/A
- GPU name from
product_namewith fallback to PCI device ID - Strips "AMD " and "Advanced Micro Devices, Inc. " prefixes in GPU panel subtitles
- NVIDIA-only path unchanged — refactored
gpu_ok→nvidia_okfor vendor-specific guards - Tested: verified no regression on NVIDIA-only system, ran
ktop --sim, reinstalled via setup.sh
- OOM tracker now detects
systemd-oomdkills in addition to kernel OOM kills - Fixed
capture_output=True+stderr=DEVNULLconflict that silently broke OOM detection entirely - Uses
short-unixjournal output for reliable timestamp comparison between OOM sources - Scope names cleaned up: strips
.scopesuffix and UUIDs for readable display (e.g.tmux-spawn) - Added
__version__andktop --versionflag - Tested: verified both kernel OOM and systemd-oomd kills detected from real journal entries, reinstalled via setup.sh
- CPU process table now shows both Core % (per-core, matches
top) and CPU % (system-wide) - Fixed per-process CPU calculation: no longer divides by num_cpus
- Raw binary I/O for
/procreads:os.open/os.read/os.closeinstead of Python file objects - Binary mode (
rb) andsplit(None, 22)to avoid decoding overhead and unnecessary allocations - CPU frequency read from sysfs (
scaling_cur_freq) instead ofpsutil.cpu_freq()(9ms → 0.02ms), with psutil fallback - Deferred
/proc/pid/statmreads: only read for the top 20 displayed processes instead of all ~1690 cpu_countcached at init;cpu_freqpolled every 5s- Process CPU baselines seeded at startup for accurate first-frame deltas
- Process tables populate after 1s, refresh every 3s
- Total frame time: 228ms → 20ms (11x improvement)
- Tested: profiled with
--sim, reinstalled via setup.sh
- Process scanning optimized: replaced
psutil.process_iterwith direct/proc/pid/stat+/proc/pid/statmreads (214ms → 23ms per scan, ~9x faster) - Process list cached for 5 seconds instead of rescanning every frame
- Added
--simflag for simulation mode (fake OOM kills, profiling output to/tmp/ktop_profile.log) - Profiler logs avg/max/calls per section every 5s in sim mode
- OOM kill tracker uses
journalctlfor persistent 8-hour lookback instead ofdmesgkernel ring buffer - OOM status shows solid block
█when OOM detected, hollow░when clear - Tested: profiled with
--sim, reinstalled via setup.sh
- Network panel: sparklines now centered between bar charts — upload sparkline extends upward, download sparkline extends downward using upper-block Unicode characters
- Added
SPARK_DOWNcharacter set and_sparkline_down()for top-down sparklines - Network upload and download now have separate theme colors (
net_updefaults to GPU color,net_downdefaults to net color) - Theme picker swatches updated to show net_up/net_down colors
- Status bar now shows most recent OOM kill (process name + timestamp) on the right side
- Temperature strip between charts and process tables with hardware-accurate thresholds (GPU slowdown from NVML, CPU critical from psutil, 85°C JEDEC for memory)
- Temperature strip border uses theme
bar_midcolor; entries evenly spaced - GPU bar charts now use dynamic width matching CPU/memory panel sizing
- Tested: reinstalled via setup.sh
- Added Network panel to the second row (layout is now Network, CPU, Memory)
- Shows upload and download bar charts with auto-scaling and sparkline history
- Displays current speed (B/s, KB/s, MB/s, GB/s) and peak observed speed
- Added
netcolor to theme system (defaults to CPU color for all existing themes) - Theme picker preview and swatches updated to include network color
- Added spacing between GPU utilization sparkline and memory bar chart
- Tested: reinstalled via setup.sh
- Memory values shown in GB or MB with max 1 decimal place
- Tested: reinstalled via setup.sh
- Bar charts now render a smooth per-block gradient from bar_low to bar_high across the full 0-100% width
- Each filled block gets its own interpolated hex color via linear RGB lerp
- RGB conversion cached to avoid re-parsing color names every frame
- Tested: reinstalled via setup.sh
- Memory process table now shows Used (RSS−shared) + Shared columns instead of just RSS
- Uses
memory_info().sharedfrom/proc/statm(instant) instead ofmemory_full_info()which reads/proc/smapsand was extremely slow on systems with large memory maps, causing ktop to hang on launch - Tested: reinstalled via setup.sh, launches instantly
- Fixed arrow key input: rewrote
_read_keyto useos.read()on raw fd instead of bufferedsys.stdin.read(), so escape sequences are captured atomically - Responsive input loop: keys polled at 50ms with immediate redraw on keypress
- Theme picker: color swatches (background-colored chips for gpu/cpu/mem/bar) right-aligned next to each theme name with gaps between colors
- Sparklines aligned with bar chart left edge in GPU and CPU panels
- Bar charts now render as gradients: green→yellow→red across the filled region (thresholds at 50% and 80%)
- Tested: reinstalled via setup.sh
- Sparklines now match the color of their metric (GPU util, GPU mem, CPU) instead of default white
- Sparklines dynamically fill the width of their enclosing panel (with margin) instead of fixed 20 chars
- Increased history buffer from 60 to 300 samples to support wide terminals
- Tested: reinstalled via setup.sh
- Added theme system with 50 color themes (press
tto open theme picker) - Arrow keys + Enter to select theme, ESC to cancel
- Theme preference saved to
~/.config/ktop/config.jsonand persists across sessions --themeCLI flag to set theme from command line- Bottom status bar showing keybindings (q/ESC quit, t themes)
- Proper arrow key handling for theme picker navigation
- Tested: both main view and theme picker render correctly; config persistence works
- GPU panels now laid out horizontally — all GPUs visible side by side
- Added q and ESC keys to quit the app (in addition to Ctrl+C)
- Tested: horizontal layout renders correctly with 3 GPUs at 140-col width
- Added
setup.shinstaller script — installsktopas a command to~/.local/bin(or/usr/local/binwith--system) - Suppressed pynvml FutureWarning deprecation noise
- Updated README with quick-install instructions
- Tested:
ktopcommand works system-wide after./setup.sh
- Initial release of ktop
- GPU utilization and memory monitoring with per-GPU sparkline history (NVIDIA)
- CPU usage monitoring with overall bar chart and sparkline history
- RAM and swap usage bar charts
- Top 10 processes by memory usage table
- Top 10 processes by CPU usage table
- Color-coded thresholds (green/yellow/red)
- Configurable refresh rate via
-rflag - Tested: renders correctly with 3x NVIDIA RTX 2000 Ada GPUs, 128-core CPU, ~1 TB RAM