LINUX.ORG.RU

История изменений

Исправление 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)