Skip site navigation (1)Skip section navigation (2)

FreeBSD Manual Pages

  
 
  

home | help
HWT(4)			    Kernel Interfaces Manual			HWT(4)

NAME
       hwt -- Hardware Trace Framework

SYNOPSIS
       options HWT_HOOKS
       device hwt

       At least	one of:
       device intel_pt
       (amd64)
       device coresight
       (arm64)
       device spe
       (arm64)

       In rc.conf(5):
       kld_list="hwt"

DESCRIPTION
       The  hwt	 framework provides infrastructure for hardware-assisted trac-
       ing.  It	collects detailed information  about  software	execution  and
       stores  it as events in highly compressed format	into DRAM.  The	events
       cover information about control flow  changes  of  a  program,  whether
       branches	 taken	or  not,  exceptions taken, timing information,	cycles
       elapsed and more.  The information collected allows to reconstruct  en-
       tire program flow of a given application	without	noticeable performance
       impact.

HARDWARE
       The  framework supports several tracing technologies found on arm64 and
       amd64 systems:

          ARM Coresight
          ARM Statistical Profiling Extension (SPE)
          Intel Processor Trace (PT)

       The hwt framework supports two modes of operation:

       CPU mode	    Capture CPU	activity in kernel mode.

       Thread mode  Capture activity of	each of	a process's  threads  in  user
		    mode.

MANAGEMENT
       When  loaded into kernel, the hwt framework provides /dev/hwt character
       device.	The only ioctl(2) request it accepts is	 HWT_IOC_ALLOC.	  This
       request	allocates kernel tracing context (CTX) based on	requested mode
       of operation, set of CPUs and/or	pid.

       Upon successful CTX allocation, the ioctl returns a CTX	identification
       number (ident).

       Each CTX	is then	managed	using its own dedicated	character device found
       at  /dev/hwt_${ident}_${d}, where ident is a unique identification num-
       ber of tracing context, d is either cpu_id (in HWT CPU mode) or process
       pid (in HWT Thread mode).

HOOKS
       During tracing of a target process, HWT records runtime events such  as
       threads	creation, exec and mmap	system calls.  These events are	logged
       as "records" within a particular	CTX associated with traced process.

       Additionally, HWT can suspend the target	thread upon exec or mmap  sys-
       tem calls if requested by the user.  This pause allows user-space tools
       to  retrieve  the  records and adjust tracing settings before execution
       continues.  This	feature	is especially useful when address  range  fil-
       tering  is  enabled,  allowing tracing of specific functions within the
       target executable or a dynamic library.

KERNEL OPTIONS
       The following options in	the kernel configuration  file	are  mandatory
       and related to hwt operation:

       HWT_HOOKS  Enable kernel	hooks.

IOCTL INTERFACE
       Once  a	CTX is allocated, its management character device accepts sev-
       eral ioctl(2) requests:

       HWT_IOC_START	   Start tracing.  In HWT CPU mode  the	 tracing  does
			   actually  start with	this ioctl(2) request.	In the
			   Thread mode,	the tracing "running"  flag  set,  but
			   tracing  begins after scheduler switches the	target
			   thread onto CPU and return to user mode.

       HWT_IOC_STOP	   Stop	tracing	of the particular CTX.

       HWT_IOC_RECORD_GET  Copy	all or part of records collected  during  hook
			   invocation  and  associated	with this CTX to user-
			   space.

       HWT_IOC_BUFPTR_GET  Get current pointer in buffer  that	is  filled  by
			   tracing units in real-time.

       HWT_IOC_SET_CONFIG  Set architecture-specific config (optional).

       HWT_IOC_WAKEUP	   Wake	 up a thread that has been put to sleep	by HWT
			   framework hooks.

       HWT_IOC_SVC_BUF	   For SPE-only, the kernel is waiting	for  userspace
			   to  notify that it has copied out a buffer to avoid
			   data	loss/overwriting buffers.

SEE ALSO
       tracing(7), hwt(8)

HISTORY
       The hwt framework first appeared	in FreeBSD 15.0.

AUTHORS
       Ruslan Bukin <br@FreeBSD.org>
       Bojan Novkovi <bnovkov@freebsd.org>
       Zachary Leaf <zachary.leaf@arm.com>

FreeBSD	ports 15.0		 July 12, 2025				HWT(4)

Want to link to this manual page? Use this URL:
<https://man.freebsd.org/cgi/man.cgi?query=hwt&sektion=4&manpath=FreeBSD+15.0-RELEASE+and+Ports>

home | help