Changeset View
Changeset View
Standalone View
Standalone View
vm/vm_pageout.c
Context not available. | |||||
} | } | ||||
} | } | ||||
static int dt; | |||||
SYSCTL_INT(_debug, OID_AUTO, dt, CTLFLAG_RD, &dt, 0, ""); | |||||
static void | static void | ||||
vm_pageout_worker(void *arg) | vm_pageout_worker(void *arg) | ||||
{ | { | ||||
struct vm_domain *vmd; | struct vm_domain *vmd; | ||||
int addl_shortage, domain, shortage; | int addl_shortage, domain, period, shortage; | ||||
bool target_met; | bool target_met; | ||||
domain = (uintptr_t)arg; | domain = (uintptr_t)arg; | ||||
vmd = VM_DOMAIN(domain); | vmd = VM_DOMAIN(domain); | ||||
period = hz / VM_INACT_SCAN_RATE; | |||||
shortage = 0; | shortage = 0; | ||||
target_met = true; | target_met = true; | ||||
Context not available. | |||||
*/ | */ | ||||
vm_domain_pageout_unlock(vmd); | vm_domain_pageout_unlock(vmd); | ||||
if (!target_met) | if (!target_met) | ||||
pause("pwait", hz / VM_INACT_SCAN_RATE); | pause("pwait", period - ((u_int)ticks % | ||||
period)); | |||||
} else { | } else { | ||||
dt = period - ((u_int)ticks % period); | |||||
/* | /* | ||||
* No, sleep until the next wakeup or until pages | * No, sleep until the next wakeup or until pages | ||||
* need to have their reference stats updated. | * need to have their reference stats updated. | ||||
Context not available. | |||||
*/ | */ | ||||
if (mtx_sleep(&vmd->vmd_pageout_wanted, | if (mtx_sleep(&vmd->vmd_pageout_wanted, | ||||
vm_domain_pageout_lockptr(vmd), PDROP | PVM, | vm_domain_pageout_lockptr(vmd), PDROP | PVM, | ||||
"psleep", hz / VM_INACT_SCAN_RATE) == 0) | "psleep", period - ((u_int)ticks % period)) == 0) | ||||
VM_CNT_INC(v_pdwakeups); | VM_CNT_INC(v_pdwakeups); | ||||
} | } | ||||
Context not available. |