DTrace Improvements
A number of bug fixes and enhancements including module and utility updates are included for DTrace on UEK R4u5, bringing the current version to 0.6.1. Other notable changes include the following:
-
General bug fixes
Numerous bug fixes have been applied to provide greater stability and better performance.
-
Function Boundary Tracing (FBT) improvements
Fixes were applied to code for detecting whether a kernel function could be probed using FBT upon entry to make it less restrictive and to improve its ability to function on Oracle Linux 7 systems. A patch was also applied to code that handled passing the offset as an argument to FBT return probes to help ensure that FBT return probe arguments have the correct value.
-
I/O Providers
I/O provider coverage has been expanded to add probes for block file systems based on the common block layer. Additionally, probes have been added to support the tracing of I/O read and write performed on NFS. SDT probes for the TCP and UDP protocols have also been added. These include
tcp:::send
,tcp:::receive
,tcp:::state-change
,tcp:::connect-request
,tcp:::connect-refused
,tcp:::connect-established
,tcp:::accept-refused
,tcp:::accept-established
,udp:::send
andudp:::receive
. -
Automatic loading of DTrace Modules
DTrace kernel modules are automatically loaded for providers. This is achieved by pre-populating the
/etc/dtrace-modules
file with a list of default provider modules. This is implemented whendtrace-utils
is installed on the system. -
Improvements and fixes for CTF
Changes have been applied to add support for bitfields in
libdtrace-ctf
, including changes to dwarf2ctf to emit the correct CTF, where bitfields are represented. This change enables DTrace to see the values of bitfields within structures and unions. A fix was also applied so that the Kernel CTF could start to include kernel static variables. This change also introduces a module-scopevars_seen
hashtable into the deduplicator state, which identifies whether a variable is or is not static. Variables for which multiple static definitions exist are blacklisted, along with matching static and external variables that are declared for the same module, to avoid confusion over duplicate variable names.