Re: DTrace, kernel loader, unknown probes, enable on load?

From: Bjoern A. Zeeb <bzeeb-lists_at_lists.zabbadoz.net>
Date: Fri, 11 Feb 2022 15:52:37 UTC
On Fri, 11 Feb 2022, Mark Johnston wrote:

> On Fri, Feb 11, 2022 at 09:23:47AM -0500, Mark Johnston wrote:
>> On Fri, Feb 11, 2022 at 02:10:30PM +0000, Bjoern A. Zeeb wrote:
>>> Hi,
>>>
>>> one of the drawbacks of Dtrace (and other tracing frameworks out there
>>> on various OSes) is that they do need a list of probes upfront before
>>> they can enable.
>>
>> The probes don't have to exist, add -Z to the dtrace(1) parameters.
>>
>>> Say I want to trace a kernel module from the moment it is loaded, that
>>> is currently not possible.
>>
>> So something like:
>>
>> # dtrace -n 'fbt::coretemp_identify:entry {stack();}' -Z
>> # kldload coretemp
>>
>> ought to work, I think, but it doesn't.  It's been a while since I
>> looked at this code but I think it might be related to the unimplemented
>> (on FreeBSD) portion of dtrace_probe_provide().  IIRC that's due to a
>> lock order reversal...
>
> I see now: the problem is that FBT registers probes after KLD SYSINITs
> and module hooks are invoked.  See dtrace_module_loaded(), which
> (asynchronously) calls dtrace_enabling_matchall() to see if any newly
> registered probes match pending "retained enablings", in this case,
> enablings created by dtrace -Z.  We could perhaps add a new eventhandler
> that gets called before anything in the KLD is executed, and register
> probes at that point.  Or, if the code you're interested runs after
> SYSINITs are finished, then -Z might be sufficient today.

-Z didn't do it last I tried.  I wasn't expecting it to actually
enable the probes at a later time based on the man page.

Having something which will do the job before SYSINTs are run, that
would be awesome.


>>> What I am wondering is how hard it would be to "ignore" unknown probes
>>> but enable them the moment on loading matching ones.  I assume that
>>> will probably need a callback through user space to complicate things
>>> but it should not be impossible.
>>>
>>> In case anyone has some spare time to draft this up, I'll be happily a
>>> first tester;  otherwise the idea is out at least for someone to find
>>> it one day ...
>>>
>>> Lots of health,
>>> /bz
>>>
>>> --
>>> Bjoern A. Zeeb                                                     r15:7
>>>
>
>

-- 
Bjoern A. Zeeb                                                     r15:7