Prior to v1, the version numbers loosely followed the rule that new features would bump the minor version level, and bug fix releases would bump the patch version level.
Beginning with v1, a new scheme is adopted which allows for a "development"
version, and a stable version. Using the version numbers x.y.z
, we have:
- The development version is of the form
x.0.z
, wherex
represents the major version under development. Each release is performed by incrementingz
, the patch level, regardless of the type of changes. The development version ends with the release of the "stable" version ofx.1.0
. The development version is maintained on themain
branch. - The stable version is of the form
x.y.z
, wherey >= 1
, andx
is of course the major version. The "stable" versions are the only ones which are released to Oracle Linux as RPMs. Releases will generally incrementz
, the patch version, for bug fix releases. It's possible that in rare cases, we will incrementy
for backports, in cases where we want to backport a module to the stable release. The stable version is maintained in a branch namedstable/vX
, whereX
is replaced with the major version number (e.g.stable/v1
).
The stable version is maintained in parallel as the development version is developed. Fixes in the stable release must first be present in the development release (and all newer stable releases, if applicable).
For the most part, regular maintenance of the stable version will end with the release of the next stable version, but maintenance may continue at our discretion.
Examples:
1.1.0
- the initial public release of the1.x
stable series.1.1.1
- the first bugfix release of the1.x
stable series.2.0.0
- the initial development version of the2.x
.2.0.1
- an incremental development release in2.x
development. It may contain bug fixes or new features.2.1.0
- the initial public release of the2.x
stable series.
Changes which are committed to git, but not yet released, may appear here.
This is the first public release of drgn-tools!
- Fixes for the irq, workqueue, bt, & nfs_tools modules.
- Add ls and fsnotify modules.
- Added new helpers for tasks & task states.
- Basic functionality for running on UEK-NEXT (unsupported).
- RPM name updated to "drgn-tools".
- Support for CTF debuginfo added for the locks module.
- Bugfix: include
drgn_tools/v2
in wheel distributions. - Bugfix: fix manual page generation on OL7 RPM build.
- Regenerate manual page
This marks the final version before public release! The primary changes have to do with release preparation.
- RPM spec file for packaging
- Manual page for
corelens
- Corelens modules:
net
multipath
(v2 only)virtutil
(v2 only)
- Corelens modules for v2 have been split off into the
drgn_tools.v2
package. They will not be included in the v1 RPM.
- The required drgn version is 0.0.25 or 0.0.26.
- Corelens improvements to user experience:
- When run with
-o
, corelens prints each module as it runs, along with runtime. This helps assure that progress is made. The timing information is also included in the report. - Additional information is provided to the user about each module: what kernel moudles it depends on, special debuginfo requirements, etc.
- Corelens now checks whether CTF is compatible prior to loading it
- When run with
- The
lock
module is improved to index stack traces for much faster runtime. - The
lock
module now supports rwsem. - The
ps
module has more command line arguments similar to crash's.
Another intermediate release prior to 1.0.0. We have a few new corelens modules, and some fixes and general improvements.
slabinfo
corelens modulepartitioninfo
corelens moduleCtfCompatibility
to automatically detect which UEK kernels are compatible with CTF debuginfo
bt
corelens module is more resilient to unwind errorsmd
helpers now support kernels containing a92ce0feffee ("md: drop queue limitation for RAID1 and RAID10"), from 5.17
bt()
function now outputs the task state in[]
brackets as part of the headerscsiinfo
now outputs more useful fields- Several minor improvements to testing infrastructure
This is another intermediate release prior to the anticipated 1.0.0. It contains new corelens modules and an improved Corelens CLI, along with some bug and performance fixes.
- Corelens modules & helpers added:
runq
corelens modulelsmod
corelens moduleblockinfo
corelens modulescsiinfo
corelens modulefilecache
corelens module
- The
ps
corelens module now supports regular output fields - The Corelens CLI has the following changes:
- When run without args, shows a usage summary
- When run without specifying modules, shows the
sys
output - The
-a
and-A
arguments are used to run all modules - CTF is loaded automatically when DWARF is unavailable
- Corelens modules may now be skipped if they don't support live kernels
- Performance issues related to
have_debuginfo()
is greatly reduced, especially when using CTF. - Several block & NVME helpers are updated to work with RHCK 9.
This is the first major release of drgn-tools after open-sourcing! We've been on a mission to add many Corelens modules, and so this release contains several of those. There are also lots of quality of life improvements and a few bug fixes. Since it's been almost three months since our last release, this is a bigger one. I hope to make releases a bit more frequently form here on out.
- Added a
-L
option to corelens which lists all corelens modules alongside a brief description of each. - Consistent with the new changes in drgn, we now can open
/proc/kcore
using sudo, without running drgn & drgn-tools as root. - The "litevm" testing framework now runs in Github Actions!
- Support for aarch64 / arm64 is now available and tested!
- Corelens modules & helpers added:
drgn_tools.irq
andirq
corelens moduledrgn_tools.cpuinfo
andcpuinfo
corelens moduledentrycache
corelens module (most of the helpers were present in 0.5.1)bt
module (equivalent of crash'sforeach bt
)drgn_tools.meminfo
andmeminfo
corelens module (similar to /proc/meminfo)drgn_tools.mounts
andmounts
corelens module (similar to /proc/mounts)drgn_tools.task
andps
corelens module (only supportsps -m
for now)drgn_tools.lock
andlock
corelens module (detecting contended semaphores and mutexes)drgn_tools.numastat
andnumastat
corelens moduledrgn_tools.buddyinfo
andbuddyinfo
corelens moduledrgn_tools.nfs
andnfs
corelens module
- corelens: the
--vmlinux
argument has now become--debuginfo
. This should instead specify a directory containing a vmlinux and any module.ko.debug
files necessary to run. - The required drgn version is 0.0.25.
- corelens: modules are now specified using
-M
, just as the help output indicates. Previously they were specified using--
. - corelens: modules missing necessary debuginfo are now skipped. Previously, we logged an error, but continued to execute them anyway.
In this release we have several new helpers, as well as a lot of changes in preparation for open-sourcing.
- 0.5.1 patch adds an entry point for the "corelens" script.
- Debuginfo fetching API is added. An implementation which downloads from the
public Yum debuginfo repositories is added. The debuginfo fetching is
configurable via
~/.config/drgn_tools.ini
. - New testing framework, "litevm", enables testing drgn-tools without creating large VM images. This is suitable for use in environments like Github actions.
- New helpers
- RDS
- Dentry cache
- File cache
- Sysctl
- The required drgn version is 0.0.24.
- Existing VM testing framework has been renamed to "heavyvm".
- New md/raid helpers and corresponding corelens module.
- New RDS helper and corresponding corelens module.
- Test VMs are now updated to OL8.8 and OL9.2.
- The minimum requirement for drgn is not 0.0.23, the latest release.
- Fix for the SMP CSD helpers.
- An optimization has been added to the symbol loader for modules which don't have debuginfoa available.
- The
drgn_tools.corelens
script has finally become more useful and less preliminary. This is intended to be an automatic mechanism for running analysis code and printing its results to either stdout, or to a sosreport-like directory.- The command line interface is changed & much improved from the preliminary version released in 0.2.0, thanks to feedback in the Drgn Biweekly meeting.
- Helpers may implement Corelens "modules", which can then be executed on the command line with arguments, or executed automatically in bulk using their default arguments.
- The Corelens system handles ensuring that debuginfo is loaded for the correct kernel modules. It defaults to using DWARF debuginfo, but it supports the new provisional CTF API provided by the internal Drgn builds.
- Many pre-existing helpers now have corelens modules, as well as the newly added helper modules.
- During interactive debugging, you may use the special function
cl()
function to execute a corelens command.
- Added the Ext4 Directory Lock scan, which can find tasks blocked on a particular directory inode and identify the current owner of the lock. This scan depends on DWARF debuginfo for finding variables from the stack trace. There is a Corelens module too. Thanks to Junxiao for these.
- Added helpers for the SMP IPI subsystem. These can show pending SMP function calls and help see which CPU is waiting on which others. There is a Corelens module as well. Thanks Imran for these!
- The
drgn_tools.debuginfo
script now correctly outputs the filenamevmlinux
rather thanvmlinux.ko.debug
, as it did before.
- Added
drgn_tools.debuginfo
CLI script. This can be called with a UEK release string to find vmlinux, extracting it if necessary. In the process, it will also update the access time in theaccess.db
file. - Added the
drgn_tools.taint
module that has an enumeration of the module / kernel taint values. These aren't included in debuginfo due since they are preprocessor definitions. - Added a preliminary system called
corelens
which will be able to run scripts against vmcores and live systems. For now, there's no major change introduced, and the system is just a sketch.
drgn_tools.bt.bt()
now has ashow_absent
flag -- and it is false by default. This is a breaking change, but I think a welcome one. There are more absent variables than non-absent in your average stack trace, and they take up a lot of space to show you absolutely nothing. So now, they are hidden by default to free up some real estate on your screen.drgn_tools.bt
has now been refactored into several helper functions. Please see the module documentation for more information. TL;DR: if you wanted to get expanded stack trace frames, without printing them, you're now in luck!
- A relatively uncommon
FaultError
inbt()
was fixed - Fixed some address computation bugs for exported module symbols
- Lots of documentation and testing improvements!
- Improvements to the CLI:
- Debuginfo extraction support is now here! When the
/share/linuxrpm
directory exists, theDRGN
CLI will automatically extract the vmlinux in the case where it is not found. - Module debuginfo extraction support! You can ask drgn-tools to load an
individual module's debuginfo, and optionally extract it when necessary:
KernelModule.load_debuginfo(extract=True)
. You can also ask to load a list of module debuginfo, or all debuginfo, withdrgn_tools.module.load_module_debuginfo()
. Finally, you can have theDRGN
CLI automatically load all module debuginfo withDRGN -x
. dmesg(prog)
will open the kernel log in a pager for easy reading.- The CLI contains a few more commonly used helpers from drgn_tools
- Debuginfo extraction support is now here! When the
- The
drgn.helpers.linux.idr
module has been patched to include support for UEK4. This patch (by Imran) is already integrated indrgn
main branch, but has not been released and won't see release there for a while. So it's included indrgn_tools
. In order for the "patch" to apply, you need to importdrgn_tools
-- even if you're not using it. - Symbol loading for modules without DWARF debuginfo was further improved: now,
module symbols can be found using the exported symbol and GPL symbol list on
the
struct module *
. This information is combined with module kallsyms to provide a decent baseline level of support even for modules without debuginfo. The only area where this would be less helpful is for purposely obfuscated modules, e.g. antivirus. It's quite helpful for giving you better backtrace information. - Added NVMe helpers by Ritika.
- Added In-Flight I/O helpers by Junxiao.
- Added Workqueue helpers by Imran.
- Improvements to the CI testing:
- Each OL and UEK version now shows up under its own collapsible sub-header in the CI testing output. This makes it easier to scan the output and find what you're interested in.
- Fixed a flaky block test by retrying it, so test results should be more reliable now.
- Really fixed the version string
- Fixed the version string
- Fixed missing newline in cli header
- Minor improvements to module symbol table lookup and backtrace printing.
- Minor improvements to CLI code to support unreleased drgn changes.
- Add
redirect_stdout()
Some major improvements to the backtrace helper:
- Use
bt(prog, cpu=5)
as a shortcut for backtracing the active task. - Get rid of the return value unless requested.
- Lookup symbols in the module symbol table even without debuginfo.
Updated the kernel module helper and added the ability to lookup symbols.
Added a CLI wrapper which can automatically locate the vmlinux: DRGN.
Adds the backtrace helper.
This the first release for internal distribution, with more helpers.
Contains additional helpers:
- virtio
- kernel module helpers
- logging
- Initial release, containing one helper and some documentation.