Changeset View
Changeset View
Standalone View
Standalone View
sys/sys/vmmeter.h
Show First 20 Lines • Show All 122 Lines • ▼ Show 20 Lines | struct vmmeter { | ||||
counter_u64_t v_rforkpages; /* (p) pages affected by rfork() */ | counter_u64_t v_rforkpages; /* (p) pages affected by rfork() */ | ||||
counter_u64_t v_kthreadpages; /* (p) ... and by kernel fork() */ | counter_u64_t v_kthreadpages; /* (p) ... and by kernel fork() */ | ||||
counter_u64_t v_wire_count; /* (p) pages wired down */ | counter_u64_t v_wire_count; /* (p) pages wired down */ | ||||
#define VM_METER_NCOUNTERS \ | #define VM_METER_NCOUNTERS \ | ||||
(offsetof(struct vmmeter, v_page_size) / sizeof(counter_u64_t)) | (offsetof(struct vmmeter, v_page_size) / sizeof(counter_u64_t)) | ||||
/* | /* | ||||
* Distribution of page usages. | * Distribution of page usages. | ||||
*/ | */ | ||||
u_int v_page_size; /* (c) page size in bytes */ | u_int v_page_size; /* (c) page size in bytes */ | ||||
kib: Why not declare it u_long from tne start ? vm_page_array_size is long. | |||||
Done Inline ActionsAny reason to put this in vmmeter? Currently the struct is read-only with everything initialized at boot time (also vm_cnt is annotated with read_mostly which "discourages" writing). Perhaps a user-visible vmmeter struct can be constructed instead and the kernel for its own uses would keep the new atomic counter elsewhere (e.g. a global annotated with exclusive_cache_line). mjg: Any reason to put this in vmmeter? Currently the struct is read-only with everything… | |||||
Done Inline ActionsI don't think there's any problem with moving it out, though I expect that it will be updated fairly rarely in general (so I think using a global atomic counter is fine). I'll try moving it out. markj: I don't think there's any problem with moving it out, though I expect that it will be updated… | |||||
u_int v_page_count; /* (c) total number of pages in system */ | u_int v_page_count; /* (c) total number of pages in system */ | ||||
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 */ | ||||
}; | }; | ||||
#endif /* _KERNEL || _WANT_VMMETER */ | #endif /* _KERNEL || _WANT_VMMETER */ | ||||
#ifdef _KERNEL | #ifdef _KERNEL | ||||
#include <sys/domainset.h> | #include <sys/domainset.h> | ||||
extern struct vmmeter vm_cnt; | extern struct vmmeter vm_cnt; | ||||
extern domainset_t all_domains; | extern domainset_t all_domains; | ||||
extern domainset_t vm_min_domains; | extern domainset_t vm_min_domains; | ||||
extern domainset_t vm_severe_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) | ||||
extern u_long vm_user_wire_count; | |||||
static inline void | static inline void | ||||
vm_wire_add(int cnt) | vm_wire_add(int cnt) | ||||
{ | { | ||||
VM_CNT_ADD(v_wire_count, cnt); | VM_CNT_ADD(v_wire_count, cnt); | ||||
} | } | ||||
static inline void | static inline void | ||||
▲ Show 20 Lines • Show All 73 Lines • Show Last 20 Lines |
Why not declare it u_long from tne start ? vm_page_array_size is long.