MCPcopy Create free account
hub / github.com/F-Stack/f-stack / racctd

Function racctd

freebsd/kern/kern_racct.c:1246–1333  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

1244}
1245
1246static void
1247racctd(void)
1248{
1249 struct thread *td;
1250 struct proc *p;
1251 struct timeval wallclock;
1252 uint64_t pct, pct_estimate, runtime;
1253
1254 ASSERT_RACCT_ENABLED();
1255
1256 for (;;) {
1257 racct_decay();
1258
1259 sx_slock(&allproc_lock);
1260
1261 FOREACH_PROC_IN_SYSTEM(p) {
1262 PROC_LOCK(p);
1263 if (p->p_state != PRS_NORMAL) {
1264 if (p->p_state == PRS_ZOMBIE)
1265 racct_set(p, RACCT_PCTCPU, 0);
1266 PROC_UNLOCK(p);
1267 continue;
1268 }
1269
1270 microuptime(&wallclock);
1271 timevalsub(&wallclock, &p->p_stats->p_start);
1272 PROC_STATLOCK(p);
1273 FOREACH_THREAD_IN_PROC(p, td)
1274 ruxagg(p, td);
1275 runtime = cputick2usec(p->p_rux.rux_runtime);
1276 PROC_STATUNLOCK(p);
1277#ifdef notyet
1278 KASSERT(runtime >= p->p_prev_runtime,
1279 ("runtime < p_prev_runtime"));
1280#else
1281 if (runtime < p->p_prev_runtime)
1282 runtime = p->p_prev_runtime;
1283#endif
1284 p->p_prev_runtime = runtime;
1285 if (wallclock.tv_sec > 0 || wallclock.tv_usec > 0) {
1286 pct_estimate = (1000000 * runtime * 100) /
1287 ((uint64_t)wallclock.tv_sec * 1000000 +
1288 wallclock.tv_usec);
1289 } else
1290 pct_estimate = 0;
1291 pct = racct_getpcpu(p, pct_estimate);
1292 RACCT_LOCK();
1293#ifdef RCTL
1294 rctl_throttle_decay(p->p_racct, RACCT_READBPS);
1295 rctl_throttle_decay(p->p_racct, RACCT_WRITEBPS);
1296 rctl_throttle_decay(p->p_racct, RACCT_READIOPS);
1297 rctl_throttle_decay(p->p_racct, RACCT_WRITEIOPS);
1298#endif
1299 racct_set_locked(p, RACCT_PCTCPU, pct, 1);
1300 racct_set_locked(p, RACCT_CPU, runtime, 0);
1301 racct_set_locked(p, RACCT_WALLCLOCK,
1302 (uint64_t)wallclock.tv_sec * 1000000 +
1303 wallclock.tv_usec, 0);

Callers

nothing calls this directly

Calls 12

racct_decayFunction · 0.85
microuptimeFunction · 0.85
ruxaggFunction · 0.85
cputick2usecFunction · 0.85
racct_getpcpuFunction · 0.85
rctl_throttle_decayFunction · 0.85
racct_set_lockedFunction · 0.85
racct_pcpu_availableFunction · 0.85
racct_proc_throttleFunction · 0.85
racct_proc_wakeupFunction · 0.85
racct_setFunction · 0.70
timevalsubFunction · 0.70

Tested by

no test coverage detected