freebsd-dev/sys/sys
Robert Watson 2c255e9df6 Moderate rewrite of kernel ktrace code to attempt to generally improve
reliability when tracing fast-moving processes or writing traces to
slow file systems by avoiding unbounded queueuing and dropped records.
Record loss was previously possible when the global pool of records
become depleted as a result of record generation outstripping record
commit, which occurred quickly in many common situations.

These changes partially restore the 4.x model of committing ktrace
records at the point of trace generation (synchronous), but maintain
the 5.x deferred record commit behavior (asynchronous) for situations
where entering VFS and sleeping is not possible (i.e., in the
scheduler).  Records are now queued per-process as opposed to
globally, with processes responsible for committing records from their
own context as required.

- Eliminate the ktrace worker thread and global record queue, as they
  are no longer used.  Keep the global free record list, as records
  are still used.

- Add a per-process record queue, which will hold any asynchronously
  generated records, such as from context switches.  This replaces the
  global queue as the place to submit asynchronous records to.

- When a record is committed asynchronously, simply queue it to the
  process.

- When a record is committed synchronously, first drain any pending
  per-process records in order to maintain ordering as best we can.
  Currently ordering between competing threads is provided via a global
  ktrace_sx, but a per-process flag or lock may be desirable in the
  future.

- When a process returns to user space following a system call, trap,
  signal delivery, etc, flush any pending records.

- When a process exits, flush any pending records.

- Assert on process tear-down that there are no pending records.

- Slightly abstract the notion of being "in ktrace", which is used to
  prevent the recursive generation of records, as well as generating
  traces for ktrace events.

Future work here might look at changing the set of events marked for
synchronous and asynchronous record generation, re-balancing queue
depth, timeliness of commit to disk, and so on.  I.e., performing a
drain every (n) records.

MFC after:	1 month
Discussed with:	jhb
Requested by:	Marc Olzheim <marcolz at stack dot nl>
2005-11-13 13:27:44 +00:00
..
_iovec.h /* -> /*- for license, minor formatting changes 2005-01-07 02:29:27 +00:00
_label.h
_lock.h
_mutex.h
_null.h /* -> /*- for license, minor formatting changes 2005-01-07 02:29:27 +00:00
_pthreadtypes.h According to: 2005-05-31 15:18:17 +00:00
_semaphore.h Const-qualify ksem_timedwait's parameter abstime as it's only passed in. 2005-10-18 11:46:24 +00:00
_sigset.h /* -> /*- for license, minor formatting changes 2005-01-07 02:29:27 +00:00
_task.h o eliminate modification of task structures after their run to avoid 2005-04-24 16:52:45 +00:00
_timespec.h /* -> /*- for license, minor formatting changes 2005-01-07 02:29:27 +00:00
_timeval.h
_types.h - Declare mknod in stat.h (in addition to unistd.h), as per XSI. 2005-03-22 01:19:18 +00:00
aac_ioctl.h
acct.h
acl.h Convert the primary ACL allocator from malloc(9) to using a UMA zone instead. 2005-09-06 00:06:30 +00:00
agpio.h
aio.h Fix sigevent's POSIX incompatible problem by adding member fields 2005-10-30 02:12:49 +00:00
alq.h Modify the alq(9) alq_open() API to accept a file creation mode, rather 2005-04-16 12:12:27 +00:00
assym.h
ata.h add set/read max address 48bit versions 2005-11-10 10:29:04 +00:00
bio.h - switch_point is now unused. This doesn't break module binary compatability 2005-06-12 22:33:06 +00:00
bitstring.h /* -> /*- for license, minor formatting changes 2005-01-07 02:29:27 +00:00
blist.h /* -> /*- for license, minor formatting changes 2005-01-07 02:29:27 +00:00
buf.h Un-staticize waitrunningbufspace() and call it before returning from 2005-09-30 18:07:41 +00:00
bufobj.h Fix a serious deadlock with the NFS client. Given a large enough 2005-06-10 23:50:41 +00:00
bus_dma.h fix arm wrt to busdma... 2005-03-15 14:57:30 +00:00
bus.h Add convenience macros for bus_space usage that doesn't require specification 2005-09-24 20:11:07 +00:00
callout.h Make callout_reset() return a non-zero value if a pending callout 2005-09-08 14:20:39 +00:00
cdefs.h Don't use the builtin vaalist for icc. 2005-10-05 17:21:09 +00:00
cdio.h Boot away another stackgap (one of the lest ones in linuxlator/i386) by 2005-01-30 08:12:37 +00:00
cdrio.h
chio.h /* -> /*- for license, minor formatting changes 2005-01-07 02:29:27 +00:00
clist.h
clock.h
condvar.h
conf.h Rewamp DEVFS internals pretty severely [1]. 2005-09-19 19:56:48 +00:00
cons.h /* -> /*- for license, minor formatting changes 2005-01-07 02:29:27 +00:00
consio.h Remove the ADJUST_CLOCK ioctl on pc98. It's not used at all. 2005-05-15 07:35:49 +00:00
copyright.h /* -> /*- for license, minor formatting changes 2005-01-07 02:29:27 +00:00
cpu.h Add a new field to struct cf_setting for special values. These are driver- 2005-02-19 06:13:26 +00:00
ctype.h
dataacq.h
device_port.h Remove code for pre-4.0 versions of FreeBSD. It is there in prior 2005-01-19 01:31:33 +00:00
devicestat.h /* -> /*- for license, minor formatting changes 2005-01-07 02:29:27 +00:00
digiio.h
dir.h netchild's mega-patch to isolate compiler dependencies into a central 2005-03-02 21:33:29 +00:00
dirent.h
disk.h /* -> /*- for license, minor formatting changes 2005-01-07 02:29:27 +00:00
disklabel.h Treat arm as i386. 2005-04-07 22:09:02 +00:00
diskmbr.h /* -> /*- for license, minor formatting changes 2005-01-07 02:29:27 +00:00
diskpc98.h Change DOSPTYP_386BSD to 0xc494. 2005-05-08 11:30:26 +00:00
dkstat.h
domain.h /* -> /*- for license, minor formatting changes 2005-01-07 02:29:27 +00:00
dvdio.h
elf32.h
elf64.h
elf_common.h
elf_generic.h
endian.h
errno.h Add some missing errnos from POSIX. Nothing in FreeBSD generates 2005-04-02 12:33:28 +00:00
eui64.h /* -> /*- for license, minor formatting changes 2005-01-07 02:29:27 +00:00
event.h Use a better EVFILT_LIO description! 2005-10-12 18:07:13 +00:00
eventhandler.h Use 'const char *' for a few prototypes. 2004-12-06 10:53:40 +00:00
eventvar.h Add locking to the kqueue subsystem. This also makes the kqueue subsystem 2004-08-15 06:24:42 +00:00
exec.h Make ps_nargvstr and ps_nenvstr unsigned. This fixes an input 2005-03-23 08:27:59 +00:00
extattr.h
fbio.h Grab FBTYPE_NOTSUN3 and use it for FBTYPE_PCIMISC. The value matches 2005-05-21 20:40:51 +00:00
fcntl.h
fdcio.h /* -> /*- for license, minor formatting changes 2005-01-07 02:29:27 +00:00
file.h Make some file/filedesc related functions static 2005-02-10 12:27:58 +00:00
filedesc.h Remove bogous semicolons at the end of the definitions of 2005-09-14 14:57:04 +00:00
filio.h Add ioctl to ask DEVFS about the name of device. 2005-03-08 21:32:19 +00:00
fnv_hash.h /* -> /*- for license, minor formatting changes 2005-01-07 02:29:27 +00:00
gmon.h
gpt.h o Change the type of the ent_name field from short to uint16_t. 2005-09-17 06:34:18 +00:00
iconv.h Fix panic when loading libiconv.ko on sparc64. 2005-09-05 17:03:40 +00:00
imgact_aout.h Capitalize at the start of sentence. 2005-05-08 02:20:10 +00:00
imgact_elf.h Add __elfN(dump_thread). This function is called from __elfN(coredump) 2004-08-11 02:35:06 +00:00
imgact.h Welcome to the 21st century: increase MAXSHELLCMDLEN from 128 bytes to 2005-02-25 11:49:42 +00:00
inflate.h /* -> /*- for license, minor formatting changes 2005-01-07 02:29:27 +00:00
interrupt.h Add a swi_remove() function to teardown software interrupt handlers. For 2005-10-26 15:51:05 +00:00
ioccom.h
ioctl_compat.h /* -> /*- for license, minor formatting changes 2005-01-07 02:29:27 +00:00
ioctl.h netchild's mega-patch to isolate compiler dependencies into a central 2005-03-02 21:33:29 +00:00
ipc.h /* -> /*- for license, minor formatting changes 2005-01-07 02:29:27 +00:00
jail.h Rename sysctl security.jail.getfsstatroot_only to security.jail.enforce_statfs 2005-06-09 18:49:19 +00:00
joystick.h Comment typo. 2005-01-07 19:31:43 +00:00
kbio.h kbdmux(4) keyboard multiplexer integration 2005-07-14 22:43:20 +00:00
kdb.h Don't enter the debugger if KDB_UNATTENDED is set or if 2005-04-20 20:52:46 +00:00
kenv.h
kernel.h Convert the primary ACL allocator from malloc(9) to using a UMA zone instead. 2005-09-06 00:06:30 +00:00
kerneldump.h Define KERNELDUMP_ARM_VERSION. 2005-10-03 14:06:00 +00:00
kobj.h Export a routine, kobj_machdep_init(), that allows platforms 2005-08-07 02:20:35 +00:00
kse.h /* -> /*- for license, minor formatting changes 2005-01-07 02:29:27 +00:00
ksem.h Introduce MAC Framework and MAC Policy entry points to label and control 2005-05-04 10:39:15 +00:00
kthread.h
ktr.h Change default KTR_COMPILE from KTR_GEN to KTR_ALL, to match with 2005-09-02 19:34:13 +00:00
ktrace.h Moderate rewrite of kernel ktrace code to attempt to generally improve 2005-11-13 13:27:44 +00:00
libkern.h Backout strtok() addition to libkern, strsep() is enough and strtok() 2005-10-06 19:06:07 +00:00
limits.h /* -> /*- for license, minor formatting changes 2005-01-07 02:29:27 +00:00
linedisc.h
link_aout.h /* -> /*- for license, minor formatting changes 2005-01-07 02:29:27 +00:00
link_elf.h /* -> /*- for license, minor formatting changes 2005-01-07 02:29:27 +00:00
linker_set.h netchild's mega-patch to isolate compiler dependencies into a central 2005-03-02 21:33:29 +00:00
linker.h Add a new module information type MODINFOMD_SHDR that will be used 2004-08-27 01:10:16 +00:00
lock.h - Define LOP_DUPOK in lock.h so that we may pass it to individual 2005-04-22 22:37:41 +00:00
lockf.h - Fix leak of struct nlminfo on process exit. 2005-10-26 07:18:37 +00:00
lockmgr.h - Fix a problem that slipped through review; the stack member of the lockmgr 2005-08-03 04:59:07 +00:00
mac_policy.h Complete removal of mac_create_root_mount/mpo_create_root_mount MAC 2005-10-02 09:53:00 +00:00
mac.h Complete removal of mac_create_root_mount/mpo_create_root_mount MAC 2005-10-02 09:53:00 +00:00
malloc.h End the MALLOC_DEFINE macro without the semi-colon, the caller supplies 2005-08-23 20:31:21 +00:00
mbpool.h /* -> /*- for license, minor formatting changes 2005-01-07 02:29:27 +00:00
mbuf.h Free only those mbuf+clusters back to the packet zone that were allocated 2005-11-05 19:43:55 +00:00
mchain.h Remove macros 2005-09-19 08:07:18 +00:00
md4.h /* -> /*- for license, minor formatting changes 2005-01-07 02:29:27 +00:00
md5.h MD5Pad() should never have been exposed. 2005-02-10 12:20:42 +00:00
mdioctl.h Rename GEOM class kernel module g_md.ko to geom_md.ko for consistency 2005-11-11 11:31:23 +00:00
memrange.h Fix module builds for i386 and amd64. 2004-08-04 18:30:31 +00:00
mman.h Namespace issues. 2005-04-02 12:33:31 +00:00
module.h
mount.h Add utility function to propagate mount errors as text string messages. 2005-11-08 04:13:39 +00:00
mouse.h Support for the GTCO Digipad. 2005-04-13 07:25:45 +00:00
msg.h /* -> /*- for license, minor formatting changes 2005-01-07 02:29:27 +00:00
msgbuf.h /* -> /*- for license, minor formatting changes 2005-01-07 02:29:27 +00:00
mtio.h /* -> /*- for license, minor formatting changes 2005-01-07 02:29:27 +00:00
mutex.h Include a SYSUNINIT() to destroy the mutex in MTX_SYSINIT. This makes 2005-08-02 20:50:45 +00:00
namei.h - Add an ISOPEN flag that filesystems can use to determine if a namei() 2005-04-27 09:00:47 +00:00
nlist_aout.h
param.h - Store pointer to the link-level address right in "struct ifnet" 2005-11-11 16:04:59 +00:00
pciio.h
pcpu.h Drop the CURPROC, curkse, and curksegrp aliases as they aren't used 2005-04-26 17:07:40 +00:00
pioctl.h /* -> /*- for license, minor formatting changes 2005-01-07 02:29:27 +00:00
pipe.h /* -> /*- for license, minor formatting changes 2005-01-07 02:29:27 +00:00
pmc.h sys/dev/hwpmc/hwpmc_{amd,piv,ppro}.c: 2005-07-09 17:29:36 +00:00
pmckern.h Fail the module loading process if the currently executing kernel 2005-07-30 09:02:42 +00:00
pmclog.h MFP4: 2005-06-30 19:01:26 +00:00
poll.h
posix4.h
power.h
priority.h /* -> /*- for license, minor formatting changes 2005-01-07 02:29:27 +00:00
proc.h Moderate rewrite of kernel ktrace code to attempt to generally improve 2005-11-13 13:27:44 +00:00
procfs.h
protosw.h Push the assignment of a new or updated so_qlimit from solisten() 2005-10-30 19:44:40 +00:00
ptio.h
ptrace.h Jumbo-commit to enhance 32 bit application support on 64 bit kernels. 2005-06-30 07:49:22 +00:00
queue.h Fix typo so QUEUE_MACRO_DEBUG works again. 2005-08-08 05:43:57 +00:00
random.h Add a note ahea of the esource enum that if new entropy source 2004-10-12 14:55:59 +00:00
reboot.h /* -> /*- for license, minor formatting changes 2005-01-07 02:29:27 +00:00
refcount.h Add a simple reference count API that is simply a thin wrapper API around 2005-09-27 18:01:33 +00:00
regression.h
resource.h /* -> /*- for license, minor formatting changes 2005-01-07 02:29:27 +00:00
resourcevar.h Use the reference count API to manage the reference counts for process 2005-09-27 18:07:05 +00:00
rman.h Eliminate __RMAN_RESOURCE_VISIBLE hack entirely by moving the struct 2005-10-06 21:49:31 +00:00
rtprio.h /* -> /*- for license, minor formatting changes 2005-01-07 02:29:27 +00:00
runq.h /* -> /*- for license, minor formatting changes 2005-01-07 02:29:27 +00:00
sbuf.h
sched.h Bring a working snapshot of hwpmc(4), its associated libraries, userland utilities 2005-04-19 04:01:25 +00:00
select.h
selinfo.h Add locking to the kqueue subsystem. This also makes the kqueue subsystem 2004-08-15 06:24:42 +00:00
sem.h In the kernel-only portionss of System V IPC objects (messages, 2004-11-17 13:12:06 +00:00
sema.h /* -> /*- for license, minor formatting changes 2005-01-07 02:29:27 +00:00
semaphore.h
serial.h
sf_buf.h Introduce two new options, "CPU private" and "no wait", to sf_buf_alloc(). 2004-11-08 00:43:46 +00:00
shm.h Change the data type of the upper shared memory limits from a signed 2005-08-06 07:20:18 +00:00
sigio.h /* -> /*- for license, minor formatting changes 2005-01-07 02:29:27 +00:00
signal.h Define SIGLWP which is an alias for SIGTHR, the reason why I did this 2005-11-13 09:57:44 +00:00
signalvar.h Add support for queueing SIGCHLD same as other UNIX systems did. 2005-11-08 09:09:26 +00:00
sleepqueue.h /* -> /*- for license, minor formatting changes 2005-01-07 02:29:27 +00:00
smp.h Rename the KDB_STOP_NMI kernel option to STOP_NMI and make it apply to all 2005-10-24 21:04:19 +00:00
snoop.h Slightly change the API for the SNPSTTY ioctl so that the userland now 2005-09-18 19:23:35 +00:00
socket.h Add three new read-only socket options, which allow regression tests 2005-09-18 21:08:03 +00:00
socketvar.h Retire MT_HEADER mbuf type and change its users to use MT_DATA. 2005-11-02 13:46:32 +00:00
sockio.h Add hooks into the networking layer to support if_bridge. This changes struct 2005-06-05 03:13:13 +00:00
soundcard.h OSS defines AFMT_x32_xE as: 2005-07-31 16:08:03 +00:00
stack.h Add 'depth' argument to CTRSTACK() macro, which allows to reduce number 2005-08-29 11:34:08 +00:00
stat.h - Declare mknod in stat.h (in addition to unistd.h), as per XSI. 2005-03-22 01:19:18 +00:00
statvfs.h /* -> /*- for license, minor formatting changes 2005-01-07 02:29:27 +00:00
stddef.h
stdint.h
sun_disklabel.h Support VTOC volume names. This can be useful to distinguish multiple 2005-03-30 09:33:10 +00:00
sx.h Add a SYSUNINIT() to SX_SYSINIT() to call sx_destroy() to destroy the sx 2005-09-02 20:41:03 +00:00
syscall.h Regen. 2005-10-30 02:14:37 +00:00
syscall.mk Regen. 2005-10-30 02:14:37 +00:00
syscallsubr.h Reformat socket control messages on input/output for 32bit compatibility 2005-10-31 21:09:56 +00:00
sysctl.h Add a sysctl that returns the full path of a process' text file. 2005-04-18 02:10:37 +00:00
sysent.h Calling setrlimit from 32bit apps could potentially increase certain 2005-11-02 21:18:07 +00:00
syslimits.h netchild's mega-patch to isolate compiler dependencies into a central 2005-03-02 21:33:29 +00:00
syslog.h /* -> /*- for license, minor formatting changes 2005-01-07 02:29:27 +00:00
sysproto.h Regen. 2005-10-30 02:14:37 +00:00
systm.h Avoid code duplication and implement bitcount32() function in systm.h only. 2005-08-19 22:10:19 +00:00
taskqueue.h o enable shutdown of taskqueue threads; the thread servicing the queue checks 2005-05-01 00:38:11 +00:00
termios.h /* -> /*- for license, minor formatting changes 2005-01-07 02:29:27 +00:00
thr.h Add new syscall thr_new to create thread in atomic, it will 2005-04-23 02:36:07 +00:00
tiio.h
time.h Define CLOCK_* and TIMER_* in time.h, where they are supposed to be. 2005-04-02 12:33:27 +00:00
timeb.h
timepps.h /* -> /*- for license, minor formatting changes 2005-01-07 02:29:27 +00:00
timers.h Let itimer store itimerspec instead of itimerval, so I don't have to 2005-10-30 02:56:08 +00:00
times.h
timespec.h Implement POSIX timers. Current only CLOCK_REALTIME and CLOCK_MONOTONIC 2005-10-23 04:22:56 +00:00
timetc.h
timex.h /* -> /*- for license, minor formatting changes 2005-01-07 02:29:27 +00:00
tree.h Make the default RB_AUGMENT() produce a 'do {} while (0)' instead 2005-06-10 11:44:57 +00:00
tty.h Make ttsetcompat() static 2005-10-16 20:40:40 +00:00
ttychars.h
ttycom.h
ttydefaults.h Restore TTYDEF_LFLAG to set echo bits. 2004-11-03 19:16:55 +00:00
ttydev.h
turnstile.h /* -> /*- for license, minor formatting changes 2005-01-07 02:29:27 +00:00
types.h Fix order and style(9) to match surrounding defs. 2005-09-26 07:45:35 +00:00
ucontext.h
ucred.h Use the refcount API to manage the reference count for user credentials 2005-09-27 18:09:42 +00:00
uio.h - Add two new system calls: preadv() and pwritev() which are like readv() 2005-07-07 18:17:55 +00:00
umtx.h do umtx_wake at userland thread exit address, so that others userland 2005-10-26 06:55:46 +00:00
un.h Implement unix(4) socket options LOCAL_CREDS and LOCAL_CONNWAIT. 2005-04-13 00:01:46 +00:00
unistd.h Change POSIX_TIMERS to 200112L. 2005-10-30 03:20:39 +00:00
unpcb.h Implement unix(4) socket options LOCAL_CREDS and LOCAL_CONNWAIT. 2005-04-13 00:01:46 +00:00
user.h Re-arrange some variables in kinfo_proc, and add more spare room. This 2005-06-09 19:09:02 +00:00
utsname.h
uuid.h Add parse_uuid() that creates a binary representation of an UUID from 2005-10-07 13:37:10 +00:00
vmmeter.h
vnode.h Move execve's access time update functionality into a new 2005-10-12 06:56:00 +00:00
wait.h Since union wait was removed in revision 1.17 (3 years, 5 months ago), 2005-11-10 05:00:20 +00:00
watchdog.h
xrpuio.h /* -> /*- for license, minor formatting changes 2005-01-07 02:29:27 +00:00