История изменений
Исправление
crypt,
(текущая версия)
:
там вообще отсутствует /proc и данные берутся сисколом у ядра.
The procstat_getvmmap() function gets a pointer to the procstat structure initialized with one of the procstat_open_*() functions, a pointer to kinfo_proc structure, and returns VM layout of the process as a dynamically allocated array of kinfo_vmentry structures.
struct kinfo_vmentry {
int kve_structsize; /* Variable size of record. */
int kve_type; /* Type of map entry. */
uint64_t kve_start; /* Starting address. */
uint64_t kve_end; /* Finishing address. */
uint64_t kve_offset; /* Mapping offset in object */
uint64_t kve_vn_fileid; /* inode number if vnode */
uint32_t kve_vn_fsid; /* dev_t of vnode location */
int kve_flags; /* Flags on map entry. */
int kve_resident; /* Number of resident pages. */
int kve_private_resident; /* Number of private pages. */
int kve_protection; /* Protection bitmask. */
int kve_ref_count; /* VM obj ref count. */
int kve_shadow_count; /* VM obj shadow count. */
int kve_vn_type; /* Vnode type. */
uint64_t kve_vn_size; /* File size. */
uint32_t kve_vn_rdev; /* Device id if device. */
uint16_t kve_vn_mode; /* File mode. */
uint16_t kve_status; /* Status flags. */
int _kve_ispare[12]; /* Space for more stuff. */
/* Truncated before copyout in sysctl */
char kve_path[PATH_MAX]; /* Path to VM obj, if any. */
};
соответственно procstat выводит эти объекты и я хватаю те, что помечены sw (swap), но цифры не сходятся. может, дело в том, что в списке есть какие-то shadow копии объектов. эти объекты помечены разными флагами:( не оч. понятно, какие брать.
The following mapping flags may be displayed:
C copy-on-write
N needs copy
S one or more superpage mappings are used
D grows down (top-down stack)
U grows up (bottom-up stack)
W pages in this range are locked by mlock(2) or mlockall(2)
типа пример:
15313 0x852681000 0x852aa5000 rw- 1031 2705 24 0 ----- sw
15313 0x85306e000 0x853080000 rw- 17 2705 24 0 ----- sw
15313 0xfa7547bb000 0xfa7547cb000 r-x 13 13 1 0 C---- sw
15313 0x7fffd7f7d000 0x7fffd7f9d000 rw- 0 0 1 0 ---D- sw
15313 0x7fffd817e000 0x7fffd819e000 rw- 1 1 1 0 ---D- sw
15313 0x7fffd837f000 0x7fffd839f000 rw- 0 0 1 0 ---D- sw
15313 0x7fffd8580000 0x7fffd85a0000 rw- 0 0 1 0 C--D- sw
15313 0x7fffd8781000 0x7fffd87a1000 rw- 2 2 1 0 C--D- sw
Исправление
crypt,
:
там вообще отсутствует /proc и данные берутся сисколом у ядра.
The procstat_getvmmap() function gets a pointer to the procstat structure initialized with one of the procstat_open_*() functions, a pointer to kinfo_proc structure, and returns VM layout of the process as a dynamically allocated array of kinfo_vmentry structures.
struct kinfo_vmentry {
int kve_structsize; /* Variable size of record. */
int kve_type; /* Type of map entry. */
uint64_t kve_start; /* Starting address. */
uint64_t kve_end; /* Finishing address. */
uint64_t kve_offset; /* Mapping offset in object */
uint64_t kve_vn_fileid; /* inode number if vnode */
uint32_t kve_vn_fsid; /* dev_t of vnode location */
int kve_flags; /* Flags on map entry. */
int kve_resident; /* Number of resident pages. */
int kve_private_resident; /* Number of private pages. */
int kve_protection; /* Protection bitmask. */
int kve_ref_count; /* VM obj ref count. */
int kve_shadow_count; /* VM obj shadow count. */
int kve_vn_type; /* Vnode type. */
uint64_t kve_vn_size; /* File size. */
uint32_t kve_vn_rdev; /* Device id if device. */
uint16_t kve_vn_mode; /* File mode. */
uint16_t kve_status; /* Status flags. */
int _kve_ispare[12]; /* Space for more stuff. */
/* Truncated before copyout in sysctl */
char kve_path[PATH_MAX]; /* Path to VM obj, if any. */
};
соответственно procstat выводит эти объекты и я хватаю те, что помечены sw (swap), но цифры не сходятся. может, дело в том, что в списке есть какие-то shadow копии объектов. эти объекты помечены разными флагами:( не оч. понятно, какие брать.
The following mapping flags may be displayed:
C copy-on-write
N needs copy
S one or more superpage mappings are used
D grows down (top-down stack)
U grows up (bottom-up stack)
W pages in this range are locked by mlock(2) or mlockall(2)
Исходная версия
crypt,
:
The procstat_getvmmap() function gets a pointer to the procstat structure initialized with one of the procstat_open_*() functions, a pointer to kinfo_proc structure, and returns VM layout of the process as a dynamically allocated array of kinfo_vmentry structures.
struct kinfo_vmentry {
int kve_structsize; /* Variable size of record. */
int kve_type; /* Type of map entry. */
uint64_t kve_start; /* Starting address. */
uint64_t kve_end; /* Finishing address. */
uint64_t kve_offset; /* Mapping offset in object */
uint64_t kve_vn_fileid; /* inode number if vnode */
uint32_t kve_vn_fsid; /* dev_t of vnode location */
int kve_flags; /* Flags on map entry. */
int kve_resident; /* Number of resident pages. */
int kve_private_resident; /* Number of private pages. */
int kve_protection; /* Protection bitmask. */
int kve_ref_count; /* VM obj ref count. */
int kve_shadow_count; /* VM obj shadow count. */
int kve_vn_type; /* Vnode type. */
uint64_t kve_vn_size; /* File size. */
uint32_t kve_vn_rdev; /* Device id if device. */
uint16_t kve_vn_mode; /* File mode. */
uint16_t kve_status; /* Status flags. */
int _kve_ispare[12]; /* Space for more stuff. */
/* Truncated before copyout in sysctl */
char kve_path[PATH_MAX]; /* Path to VM obj, if any. */
};
соответственно procstat выводит эти объекты и я хватаю те, что помечены sw (swap), но цифры не сходятся. может, дело в том, что в списке есть какие-то shadow копии объектов. эти объекты помечены разными флагами:( не оч. понятно, какие брать.
The following mapping flags may be displayed:
C copy-on-write
N needs copy
S one or more superpage mappings are used
D grows down (top-down stack)
U grows up (bottom-up stack)
W pages in this range are locked by mlock(2) or mlockall(2)