Changeset View
Changeset View
Standalone View
Standalone View
sys/sys/vmmeter.h
Show First 20 Lines • Show All 135 Lines • ▼ Show 20 Lines | #define VM_METER_NCOUNTERS \ | ||||
u_int v_free_reserved; /* (c) pages reserved for deadlock */ | u_int v_free_reserved; /* (c) pages reserved for deadlock */ | ||||
u_int v_free_target; /* (c) pages desired free */ | u_int v_free_target; /* (c) pages desired free */ | ||||
u_int v_free_min; /* (c) pages desired free */ | u_int v_free_min; /* (c) pages desired free */ | ||||
u_int v_inactive_target; /* (c) pages desired inactive */ | u_int v_inactive_target; /* (c) pages desired inactive */ | ||||
u_int v_pageout_free_min; /* (c) min pages reserved for kernel */ | u_int v_pageout_free_min; /* (c) min pages reserved for kernel */ | ||||
u_int v_interrupt_free_min; /* (c) reserved pages for int code */ | u_int v_interrupt_free_min; /* (c) reserved pages for int code */ | ||||
u_int v_free_severe; /* (c) severe page depletion point */ | u_int v_free_severe; /* (c) severe page depletion point */ | ||||
u_int v_wire_count VMMETER_ALIGNED; /* (a) pages wired down */ | u_int v_wire_count VMMETER_ALIGNED; /* (a) pages wired down */ | ||||
u_int v_active_count VMMETER_ALIGNED; /* (a) pages active */ | |||||
u_int v_inactive_count VMMETER_ALIGNED; /* (a) pages inactive */ | |||||
u_int v_laundry_count VMMETER_ALIGNED; /* (a) pages eligible for | |||||
laundering */ | |||||
u_int v_free_count VMMETER_ALIGNED; /* (f) pages free */ | |||||
}; | }; | ||||
#endif /* _KERNEL || _WANT_VMMETER */ | #endif /* _KERNEL || _WANT_VMMETER */ | ||||
#ifdef _KERNEL | #ifdef _KERNEL | ||||
#include <sys/domainset.h> | |||||
extern struct vmmeter vm_cnt; | extern struct vmmeter vm_cnt; | ||||
extern u_int vm_pageout_wakeup_thresh; | extern domainset_t vm_min_domains; | ||||
extern domainset_t vm_severe_domains; | |||||
#define VM_CNT_ADD(var, x) counter_u64_add(vm_cnt.var, x) | #define VM_CNT_ADD(var, x) counter_u64_add(vm_cnt.var, x) | ||||
#define VM_CNT_INC(var) VM_CNT_ADD(var, 1) | #define VM_CNT_INC(var) VM_CNT_ADD(var, 1) | ||||
#define VM_CNT_FETCH(var) counter_u64_fetch(vm_cnt.var) | #define VM_CNT_FETCH(var) counter_u64_fetch(vm_cnt.var) | ||||
u_int vm_free_count(void); | |||||
/* | /* | ||||
* Return TRUE if we are under our severe low-free-pages threshold | * Return TRUE if we are under our severe low-free-pages threshold | ||||
* | * | ||||
* This routine is typically used at the user<->system interface to determine | * This routine is typically used at the user<->system interface to determine | ||||
* whether we need to block in order to avoid a low memory deadlock. | * whether we need to block in order to avoid a low memory deadlock. | ||||
*/ | */ | ||||
static inline int | static inline int | ||||
vm_page_count_severe(void) | vm_page_count_severe(void) | ||||
{ | { | ||||
return (vm_cnt.v_free_severe > vm_cnt.v_free_count); | return (!DOMAINSET_EMPTY(&vm_severe_domains)); | ||||
} | } | ||||
/* | /* | ||||
* Return TRUE if we are under our minimum low-free-pages threshold. | * Return TRUE if we are under our minimum low-free-pages threshold. | ||||
* | * | ||||
* This routine is typically used within the system to determine whether | * This routine is typically used within the system to determine whether | ||||
* we can execute potentially very expensive code in terms of memory. It | * we can execute potentially very expensive code in terms of memory. It | ||||
* is also used by the pageout daemon to calculate when to sleep, when | * is also used by the pageout daemon to calculate when to sleep, when | ||||
* to wake waiters up, and when (after making a pass) to become more | * to wake waiters up, and when (after making a pass) to become more | ||||
* desperate. | * desperate. | ||||
*/ | */ | ||||
static inline int | static inline int | ||||
vm_page_count_min(void) | vm_page_count_min(void) | ||||
{ | { | ||||
return (vm_cnt.v_free_min > vm_cnt.v_free_count); | return (!DOMAINSET_EMPTY(&vm_min_domains)); | ||||
} | } | ||||
/* | |||||
* Return TRUE if we have not reached our free page target during | |||||
* free page recovery operations. | |||||
*/ | |||||
static inline int | |||||
vm_page_count_target(void) | |||||
{ | |||||
return (vm_cnt.v_free_target > vm_cnt.v_free_count); | |||||
} | |||||
/* | |||||
* Return the number of pages we need to free-up or cache | |||||
* A positive number indicates that we do not have enough free pages. | |||||
*/ | |||||
static inline int | |||||
vm_paging_target(void) | |||||
{ | |||||
return (vm_cnt.v_free_target - vm_cnt.v_free_count); | |||||
} | |||||
/* | |||||
* Returns TRUE if the pagedaemon needs to be woken up. | |||||
*/ | |||||
static inline int | |||||
vm_paging_needed(u_int free_count) | |||||
{ | |||||
return (free_count < vm_pageout_wakeup_thresh); | |||||
} | |||||
/* | |||||
* Return the number of pages we need to launder. | |||||
* A positive number indicates that we have a shortfall of clean pages. | |||||
*/ | |||||
static inline int | |||||
vm_laundry_target(void) | |||||
{ | |||||
return (vm_paging_target()); | |||||
} | |||||
#endif /* _KERNEL */ | #endif /* _KERNEL */ | ||||
#endif /* _SYS_VMMETER_H_ */ | #endif /* _SYS_VMMETER_H_ */ |