racct
prison_racct_foreach(void (*callback)(struct racct *racct,
loginclass_racct_foreach(void (*callback)(struct racct *racct,
SDT_PROBE_DEFINE3(racct, , rusage, add,
racct_updatepcpu_racct_locked(struct racct *racct)
SDT_PROBE_DEFINE3(racct, , rusage, add__failure,
timevalsub(&diff, &racct->r_time);
runtime = racct->r_resources[RACCT_CPU] - racct->r_runtime;
oldpcpu = racct->r_resources[RACCT_PCTCPU];
SDT_PROBE_DEFINE3(racct, , rusage, add__buf,
racct->r_resources[RACCT_PCTCPU] = ((FSCALE - RACCT_DECAY_FACTOR) *
if (racct->r_resources[RACCT_PCTCPU] >
racct->r_resources[RACCT_PCTCPU] = 100 * 1000000 *
racct->r_runtime = racct->r_resources[RACCT_CPU];
timevaladd(&racct->r_time, &diff);
SDT_PROBE_DEFINE3(racct, , rusage, add__cred,
SDT_PROBE_DEFINE3(racct, , rusage, add__force,
racct_updatepcpu_racct_callback(struct racct *racct, void *dummy1, void *dummy2)
racct_updatepcpu_racct_locked(racct);
SDT_PROBE_DEFINE3(racct, , rusage, set,
SDT_PROBE_DEFINE3(racct, , rusage, set__failure,
SDT_PROBE_DEFINE3(racct, , rusage, set__force,
SDT_PROBE_DEFINE3(racct, , rusage, sub,
SDT_PROBE_DEFINE3(racct, , rusage, sub__cred,
racct_zone = uma_zcreate("racct", sizeof(struct racct),
SDT_PROBE_DEFINE1(racct, , racct, create,
SYSINIT(racct, SI_SUB_RACCT, SI_ORDER_FIRST, racct_init, NULL);
SDT_PROBE_DEFINE1(racct, , racct, destroy,
SDT_PROBE_DEFINE2(racct, , racct, join,
SDT_PROBE_DEFINE2(racct, , racct, join__failure,
SDT_PROBE_DEFINE2(racct, , racct, leave,
racct_add_racct(struct racct *dest, const struct racct *src)
racct_sub_racct(struct racct *dest, const struct racct *src)
racct_create(struct racct **racctp)
SDT_PROBE1(racct, , racct, create, racctp);
racct_destroy_locked(struct racct **racctp)
struct racct *racct;
SDT_PROBE1(racct, , racct, destroy, racctp);
racct = *racctp;
KASSERT(racct->r_resources[i] == 0,
racct->r_resources[i], i));
uma_zfree(racct_zone, racct);
racct_destroy(struct racct **racct)
racct_destroy_locked(racct);
racct_adjust_resource(struct racct *racct, int resource,
KASSERT(racct != NULL, ("NULL racct"));
racct->r_resources[resource] += amount;
if (racct->r_resources[resource] < 0) {
racct->r_resources[resource] = 0;
SDT_PROBE3(racct, , rusage, add__failure, p, resource, amount);
SDT_PROBE3(racct, , rusage, add, p, resource, amount);
SDT_PROBE3(racct, , rusage, add__force, p, resource, amount);
SDT_PROBE3(racct, , rusage, add__cred, cred, resource, amount);
SDT_PROBE3(racct, , rusage, add__buf, p, bp, is_write);
SDT_PROBE3(racct, , rusage, set__failure, p, resource,
SDT_PROBE3(racct, , rusage, set__force, p, resource, amount);
SDT_PROBE3(racct, , rusage, set, p, resource, amount);
FEATURE(racct, "Resource Accounting");
SDT_PROBE3(racct, , rusage, sub, p, resource, amount);
SDT_PROBE3(racct, , rusage, sub__cred, cred, resource, amount);
SYSCTL_NODE(_kern, OID_AUTO, racct, CTLFLAG_RW | CTLFLAG_MPSAFE, 0,
static void racct_sub_racct(struct racct *dest, const struct racct *src);
racct_move(struct racct *dest, struct racct *src)
static void racct_updatepcpu_racct_locked(struct racct *racct);
racct_decay_callback(struct racct *racct, void *dummy1, void *dummy2)
rctl_throttle_decay(racct, RACCT_READBPS);
rctl_throttle_decay(racct, RACCT_WRITEBPS);
rctl_throttle_decay(racct, RACCT_READIOPS);
rctl_throttle_decay(racct, RACCT_WRITEIOPS);
SDT_PROVIDER_DEFINE(racct);
rctl_rule_remove_callback(struct racct *racct, void *arg2, void *arg3)
found += rctl_racct_remove_rules(racct, filter);
rctl_racct_to_sbuf(struct racct *racct, int sloppy)
amount = racct->r_resources[i];
rctl_get_rules_callback(struct racct *racct, void *arg2, void *arg3)
LIST_FOREACH(link, &racct->r_rule_links, rrl_next) {
rctl_racct_release(struct racct *racct)
while (!LIST_EMPTY(&racct->r_rule_links)) {
link = LIST_FIRST(&racct->r_rule_links);
static struct racct *
const struct racct *racct;
racct = rctl_proc_rule_to_racct(p, rule);
available = rule->rr_amount - racct->r_resources[rule->rr_resource];
rctl_throttle_decay(struct racct *racct, int resource)
LIST_FOREACH(link, &racct->r_rule_links, rrl_next) {
if (racct->r_resources[resource] < minavailable) {
racct->r_resources[resource] = 0;
if (racct->r_resources[resource] > minavailable * 10)
racct->r_resources[resource] = minavailable * 10;
racct->r_resources[resource] -= minavailable;
rctl_racct_add_rule(struct racct *racct, struct rctl_rule *rule)
LIST_INSERT_HEAD(&racct->r_rule_links, link, rrl_next);
rctl_racct_add_rule_locked(struct racct *racct, struct rctl_rule *rule)
LIST_INSERT_HEAD(&racct->r_rule_links, link, rrl_next);
rctl_racct_remove_rules(struct racct *racct,
LIST_FOREACH_SAFE(link, &racct->r_rule_links, rrl_next, linktmp) {
ui_racct_foreach(void (*callback)(struct racct *racct,
struct racct;
struct racct *prr_racct;
void prison_racct_foreach(void (*callback)(struct racct *racct,
struct racct;
struct racct *lc_racct;
void loginclass_racct_foreach(void (*callback)(struct racct *racct,
struct racct;
struct racct *p_racct; /* (b) Resource accounting. */
void racct_create(struct racct **racctp);
void racct_destroy(struct racct **racctp);
void racct_move(struct racct *dest, struct racct *src);
void rctl_throttle_decay(struct racct *racct, int resource);
void rctl_racct_release(struct racct *racct);
struct racct;
struct racct *ui_racct; /* (a) resource accounting */
void ui_racct_foreach(void (*callback)(struct racct *racct,