mirror of
https://github.com/freebsd/freebsd-src.git
synced 2024-12-03 14:48:57 +00:00
Add "jid" and "jailname" variables to DTrace.
These return the jail ID and jail name for the traced process, respectively, and are analogous to "zonename" on Solaris/illumos. "zonename" is now aliased to "jailname". Also add some stress tests for the new variables. Submitted by: Domagoj Stolfa <domagoj.stolfa@gmail.com> Reviewed by: dteske (previous version) MFC after: 2 weeks Sponsored by: DARPA, AFRL Differential Revision: https://reviews.freebsd.org/D13877
This commit is contained in:
parent
44c1484a53
commit
224e0c2f61
Notes:
svn2git
2020-12-20 02:59:44 +00:00
svn path=/head/; revision=327888
@ -0,0 +1,44 @@
|
||||
/*
|
||||
* This file and its contents are supplied under the terms of the
|
||||
* Common Development and Distribution License ("CDDL"), version 1.0.
|
||||
* You may only use this file in accordance with the terms version
|
||||
* 1.0 of the CDDL.
|
||||
*
|
||||
* A full copy of the text of the CDDL should have accompanied this
|
||||
* source. A copy of the CDDL is also available via the Internet at
|
||||
* http://www.illumos.org/license/CDDL.
|
||||
*/
|
||||
|
||||
/*
|
||||
* Copyright 2018 Domagoj Stolfa <domagoj.stolfa@cl.cam.ac.uk>.
|
||||
*
|
||||
* This software was developed by BAE Systems, the University of Cambridge
|
||||
* Computer Laboratory, and Memorial University under DARPA/AFRL contract
|
||||
* FA8650-15-C-7558 ("CADETS"), as part of the DARPA Transparent Computing
|
||||
* (TC) research program.
|
||||
*
|
||||
*/
|
||||
|
||||
#pragma ident "%Z%%M% %I% %E% SMI"
|
||||
|
||||
/*
|
||||
* ASSERTION:
|
||||
* collect jailname at every fbt probe and at every firing of a
|
||||
* high-frequency profile probe
|
||||
*/
|
||||
|
||||
fbt:::
|
||||
{
|
||||
@a[jailname] = count();
|
||||
}
|
||||
|
||||
profile-4999hz
|
||||
{
|
||||
@a[jailname] = count();
|
||||
}
|
||||
|
||||
tick-1sec
|
||||
/n++ == 10/
|
||||
{
|
||||
exit(0);
|
||||
}
|
@ -0,0 +1,44 @@
|
||||
/*
|
||||
* This file and its contents are supplied under the terms of the
|
||||
* Common Development and Distribution License ("CDDL"), version 1.0.
|
||||
* You may only use this file in accordance with the terms version
|
||||
* 1.0 of the CDDL.
|
||||
*
|
||||
* A full copy of the text of the CDDL should have accompanied this
|
||||
* source. A copy of the CDDL is also available via the Internet at
|
||||
* http://www.illumos.org/license/CDDL.
|
||||
*/
|
||||
|
||||
/*
|
||||
* Copyright 2018 Domagoj Stolfa <domagoj.stolfa@cl.cam.ac.uk>.
|
||||
*
|
||||
* This software was developed by BAE Systems, the University of Cambridge
|
||||
* Computer Laboratory, and Memorial University under DARPA/AFRL contract
|
||||
* FA8650-15-C-7558 ("CADETS"), as part of the DARPA Transparent Computing
|
||||
* (TC) research program.
|
||||
*
|
||||
*/
|
||||
|
||||
#pragma ident "%Z%%M% %I% %E% SMI"
|
||||
|
||||
/*
|
||||
* ASSERTION:
|
||||
* collect jid at every fbt probe and at every firing of a
|
||||
* high-frequency profile probe
|
||||
*/
|
||||
|
||||
fbt:::
|
||||
{
|
||||
@a[jid] = count();
|
||||
}
|
||||
|
||||
profile-4999hz
|
||||
{
|
||||
@a[jid] = count();
|
||||
}
|
||||
|
||||
tick-1sec
|
||||
/n++ == 10/
|
||||
{
|
||||
exit(0);
|
||||
}
|
@ -313,6 +313,12 @@ static const dt_ident_t _dtrace_globals[] = {
|
||||
DT_VERS_1_5, &dt_idops_func, "string(int, void *)" },
|
||||
{ "ipl", DT_IDENT_SCALAR, 0, DIF_VAR_IPL, DT_ATTR_STABCMN, DT_VERS_1_0,
|
||||
&dt_idops_type, "uint_t" },
|
||||
#ifdef __FreeBSD__
|
||||
{ "jailname", DT_IDENT_SCALAR, 0, DIF_VAR_JAILNAME,
|
||||
DT_ATTR_STABCMN, DT_VERS_1_13, &dt_idops_type, "string" },
|
||||
{ "jid", DT_IDENT_SCALAR, 0, DIF_VAR_JID, DT_ATTR_STABCMN, DT_VERS_1_13,
|
||||
&dt_idops_type, "int" },
|
||||
#endif
|
||||
{ "json", DT_IDENT_FUNC, 0, DIF_SUBR_JSON, DT_ATTR_STABCMN, DT_VERS_1_11,
|
||||
&dt_idops_func, "string(const char *, const char *)" },
|
||||
{ "jstack", DT_IDENT_ACTFUNC, 0, DT_ACT_JSTACK, DT_ATTR_STABCMN, DT_VERS_1_0,
|
||||
@ -528,10 +534,8 @@ static const dt_ident_t _dtrace_globals[] = {
|
||||
{ "walltimestamp", DT_IDENT_SCALAR, 0, DIF_VAR_WALLTIMESTAMP,
|
||||
DT_ATTR_STABCMN, DT_VERS_1_0,
|
||||
&dt_idops_type, "int64_t" },
|
||||
#ifdef illumos
|
||||
{ "zonename", DT_IDENT_SCALAR, 0, DIF_VAR_ZONENAME,
|
||||
DT_ATTR_STABCMN, DT_VERS_1_0, &dt_idops_type, "string" },
|
||||
#endif
|
||||
|
||||
#ifndef illumos
|
||||
{ "cpu", DT_IDENT_SCALAR, 0, DIF_VAR_CPU,
|
||||
|
@ -19,6 +19,8 @@ ${PACKAGE}FILES= \
|
||||
tst.gid.d \
|
||||
tst.hton.d \
|
||||
tst.index.d \
|
||||
tst.jailname.d \
|
||||
tst.jid.d \
|
||||
tst.msgdsize.d \
|
||||
tst.msgsize.d \
|
||||
tst.null.d \
|
||||
|
@ -3654,6 +3654,24 @@ dtrace_dif_variable(dtrace_mstate_t *mstate, dtrace_state_t *state, uint64_t v,
|
||||
return (dtrace_dif_varstr(
|
||||
(uintptr_t)curthread->t_procp->p_zone->zone_name,
|
||||
state, mstate));
|
||||
#elif defined(__FreeBSD__)
|
||||
/*
|
||||
* On FreeBSD, we introduce compatibility to zonename by falling through
|
||||
* into jailname.
|
||||
*/
|
||||
case DIF_VAR_JAILNAME:
|
||||
if (!dtrace_priv_kernel(state))
|
||||
return (0);
|
||||
|
||||
return (dtrace_dif_varstr(
|
||||
(uintptr_t)curthread->t_procp->p_ucred->cr_prison->pr_name,
|
||||
state, mstate));
|
||||
|
||||
case DIF_VAR_JID:
|
||||
if (!dtrace_priv_kernel(state))
|
||||
return (0);
|
||||
|
||||
return ((uint64_t)curthread->t_procp->p_ucred->cr_prison->pr_id);
|
||||
#else
|
||||
return (0);
|
||||
#endif
|
||||
|
@ -254,6 +254,8 @@ typedef enum dtrace_probespec {
|
||||
#define DIF_VAR_GID 0x011f /* process group ID */
|
||||
#define DIF_VAR_ERRNO 0x0120 /* thread errno */
|
||||
#define DIF_VAR_EXECARGS 0x0121 /* process arguments */
|
||||
#define DIF_VAR_JID 0x0122 /* process jail id */
|
||||
#define DIF_VAR_JAILNAME 0x0123 /* process jail name */
|
||||
|
||||
#ifndef illumos
|
||||
#define DIF_VAR_CPU 0x0200
|
||||
|
Loading…
Reference in New Issue
Block a user