[ANNOUNCE] tuna v0.21 released

From: John Kacur

Date: Tue Jul 28 2026 - 17:37:28 EST


Major Features:
- Complete cpuset support for CPU isolation using cgroup v2
- Commands: create, list, destroy, move, show, status, modify
- save/apply functionality for persisting cpuset configurations
- Integration with isolate, move, run, and show_threads commands
- NUMA-aware memory node assignment
- Process blocklist to protect critical system processes
- Comprehensive testing infrastructure with unittest framework
- Context-aware default paths for cpuset profiles (git vs production)
- Intelligent path resolution for finding configuration files

Code Quality Improvements:
- Centralized version management (single source in tuna/version.py)
- Input validation for CPU numbers and RT priorities
- Eliminated global variables and argparse side effects
- Replace bare except clauses with specific exception types
- Enhanced kernel thread descriptions in what_is command

Documentation:
- Updated man page for cpuset functionality and recent changes
- Comprehensive test documentation
- AGENTS.md guide for AI coding assistants

Cleanup:
- Removed obsolete ChangeLog file (not updated since 2013)
- Removed obsolete tuna apply functionality
- Simplified GUI to monitoring-only functionality

Full commit list below.

To fetch tuna:
Clone one of the following
git://git.kernel.org/pub/scm/utils/tuna/tuna.git
https://git.kernel.org/pub/scm/utils/tuna/tuna.git
https://kernel.googlesource.com/pub/scm/utils/tuna/tuna.git

Branch: main
Tag: v0.20

Tarballs are here:
https://kernel.org/pub/software/utils/tuna/
older ones are here
https://kernel.org/pub/software/utils/tuna/older

Enjoy!

John Kacur

John Kacur (63):
tuna: Disable the tuna apply functionality
tuna: Remove tuna apply from the man page
tuna: Print warning if setting affinity results in EPERM and continue
tuna: Add testing infrastructure using unittest framework
tuna: Fix setuptools deprecation warnings for license field
tuna: Replace bare except clauses with specific exception types
tuna: Eliminate side effects from argparse by deferring type
conversions
tuna: Eliminate global ps and irqs variables
tuna: Add .local/ directory to .gitignore
tuna: Add tests for converter functions and update test README
tuna: Update copyright notices to reflect current maintainership
tuna: Add AGENTS.md guide for AI coding assistants
tuna: Warn when user-specified patterns match zero threads or IRQs
tuna: Suppress output when pattern matches zero results
tuna: Make warnings opt-in with -w/--warn flag
tuna: Enhance what_is command with new kernel thread descriptions and
usability improvements
tuna: Add comprehensive docstrings to converter functions
tuna: Add centralized input validation for CPU numbers and RT
priorities
tuna: Add cpuset module for CPU isolation using cgroup v2
tuna: Add comprehensive test suite for cpuset module
tuna: Add CLI commands for cpuset management
tuna: Add comprehensive test suite for cpuset CLI commands
tuna: Add comprehensive test targets and documentation
tuna: Add cpuset move command for process migration
tuna: Add comprehensive tests for cpuset move command
tuna: Add NUMA-aware memory node assignment for cpusets
tuna: Add tests for NUMA-aware memory node assignment
tuna: Add process blocklist to prevent shutdown issues
tuna: Add memory nodes and blocklist warnings to cpuset list
tuna: Add cpuset show and status commands
tuna: Add tests for cpuset show and status commands
tuna: Dynamically find free CPU for test_cpu_exclusive
tuna: Change cpuset commands to skip empty by default
tuna: Add cpuset modify command
tuna: Add tests for cpuset modify command
tuna: Fix test_modify_cpus_empty_result for kernel constraints
tuna: Add --cpuset option to move command
tuna: Add tests for tuna move --cpuset command
tuna: Add --cpuset option to isolate command
tuna: Add tests for isolate --cpuset functionality
tuna: Document high-level workflow vs manual primitives for cpusets
tuna: Add --cpuset filter option to show_threads command
tuna: Add tests for show_threads --cpuset filter
tuna: Enhance show_threads -G to display cpuset names
tuna: Add tests for cpuset name display in show_threads -G
tuna: Add --cpuset option to run command
tuna: Add tests for run --cpuset functionality
tuna: Update man page for cpusets and current functionality
tuna: Add --show-system flag to filter systemd cpusets
tuna: Add cpuset save/apply functionality
tuna: Add comprehensive tests for save/apply functionality
tuna: Remove obsolete apply command functionality
tuna: Simplify GUI to monitoring-only functionality
tuna: Change housekeeping cpuset default to partition=member
tuna: Change default profile filename to cpuset-profile.yaml
tuna: Improve process migration messaging clarity
tuna: Allow cpuset destroy to accept multiple names
tests: Update cpuset_destroy test calls for new parameter name
tuna: Remove obsolete ChangeLog file
tuna: Use context-aware default path for cpuset profiles
tuna: Update man page for cpuset save/apply and recent changes
tuna: Add intelligent path resolution for cpuset apply
tuna: Get the tuna version from a single source

.gitignore | 1 +
AGENTS.md | 415 ++++++++
ChangeLog | 152 ---
Makefile | 33 +
docs/tuna.8 | 261 ++++-
po/LINGUAS | 3 -
po/POTFILES.in | 17 -
po/ja.po | 718 --------------
po/pt_BR.po | 634 ------------
po/zh_CN.po | 667 -------------
pyproject.toml | 8 +-
setup.py | 5 +-
tests/README.md | 542 +++++++++++
tests/run_tests.sh | 25 +
tests/test_converters.py | 160 ++++
tests/test_cpuset.py | 944 ++++++++++++++++++
tests/test_cpuset_cli.py | 1370 ++++++++++++++++++++++++++
tests/test_eperm_handling.py | 87 ++
tests/test_process_blocklist.py | 139 +++
tests/test_save_apply.py | 300 ++++++
tests/test_show_threads_cgroups.py | 199 ++++
tests/test_show_threads_cpuset.py | 245 +++++
tuna-cmd.py | 1433 +++++++++++++++++++++++++---
tuna/__init__.py | 3 +-
tuna/config.py | 2 -
tuna/cpuset.py | 820 ++++++++++++++++
tuna/cpuset_README.md | 597 ++++++++++++
tuna/gui/__init__.py | 3 +-
tuna/gui/profileview.py | 4 +-
tuna/help.py | 27 +-
tuna/profile.py | 177 ++++
tuna/tuna.py | 191 +++-
tuna/tuna_gui.glade | 8 +-
tuna/version.py | 7 +
34 files changed, 7794 insertions(+), 2403 deletions(-)
create mode 100644 AGENTS.md
delete mode 100644 ChangeLog
delete mode 100644 po/LINGUAS
delete mode 100644 po/POTFILES.in
delete mode 100644 po/ja.po
delete mode 100644 po/pt_BR.po
delete mode 100644 po/zh_CN.po
create mode 100644 tests/README.md
create mode 100755 tests/run_tests.sh
create mode 100644 tests/test_converters.py
create mode 100644 tests/test_cpuset.py
create mode 100644 tests/test_cpuset_cli.py
create mode 100644 tests/test_eperm_handling.py
create mode 100644 tests/test_process_blocklist.py
create mode 100644 tests/test_save_apply.py
create mode 100644 tests/test_show_threads_cgroups.py
create mode 100755 tests/test_show_threads_cpuset.py
create mode 100644 tuna/cpuset.py
create mode 100644 tuna/cpuset_README.md
create mode 100644 tuna/profile.py
create mode 100644 tuna/version.py

--
2.55.0