@@ -15,12 +15,14 @@ pub struct SmapEntry {
1515 pub mmu_page_size_in_kb : u64 ,
1616 pub rss_in_kb : u64 ,
1717 pub pss_in_kb : u64 ,
18+ pub pss_dirty_in_kb : u64 ,
1819 pub shared_clean_in_kb : u64 ,
1920 pub shared_dirty_in_kb : u64 ,
2021 pub private_clean_in_kb : u64 ,
2122 pub private_dirty_in_kb : u64 ,
2223 pub referenced_in_kb : u64 ,
2324 pub anonymous_in_kb : u64 ,
25+ pub ksm_in_kb : u64 ,
2426 pub lazy_free_in_kb : u64 ,
2527 pub anon_huge_pages_in_kb : u64 ,
2628 pub shmem_pmd_mapped_in_kb : u64 ,
@@ -44,13 +46,13 @@ pub struct SmapEntry {
4446pub fn parse_smap_entries ( contents : & str ) -> Result < Vec < SmapEntry > , Error > {
4547 let mut smap_entries = Vec :: new ( ) ;
4648 let mut smap_entry = SmapEntry :: default ( ) ;
47- let mut is_entry_moified = false ;
49+ let mut is_entry_modified = false ;
4850
4951 for line in contents. lines ( ) {
5052 let map_line = parse_map_line ( line) ;
5153 if let Ok ( map_line) = map_line {
5254 smap_entry. map_line = map_line;
53- is_entry_moified = true ;
55+ is_entry_modified = true ;
5456 } else {
5557 let ( key, val) = line
5658 . split_once ( ':' )
@@ -62,7 +64,7 @@ pub fn parse_smap_entries(contents: &str) -> Result<Vec<SmapEntry>, Error> {
6264 smap_entry. vmflags = val. into ( ) ;
6365 smap_entries. push ( smap_entry. clone ( ) ) ;
6466 smap_entry = SmapEntry :: default ( ) ;
65- is_entry_moified = false ;
67+ is_entry_modified = false ;
6668 }
6769 "THPeligible" => smap_entry. thp_eligible = get_smap_item_value ( val) ?,
6870 _ => {
@@ -76,12 +78,14 @@ pub fn parse_smap_entries(contents: &str) -> Result<Vec<SmapEntry>, Error> {
7678 "MMUPageSize" => smap_entry. mmu_page_size_in_kb = val,
7779 "Rss" => smap_entry. rss_in_kb = val,
7880 "Pss" => smap_entry. pss_in_kb = val,
81+ "Pss_Dirty" => smap_entry. pss_dirty_in_kb = val,
7982 "Shared_Clean" => smap_entry. shared_clean_in_kb = val,
8083 "Shared_Dirty" => smap_entry. shared_dirty_in_kb = val,
8184 "Private_Clean" => smap_entry. private_clean_in_kb = val,
8285 "Private_Dirty" => smap_entry. private_dirty_in_kb = val,
8386 "Referenced" => smap_entry. referenced_in_kb = val,
8487 "Anonymous" => smap_entry. anonymous_in_kb = val,
88+ "KSM" => smap_entry. ksm_in_kb = val,
8589 "LazyFree" => smap_entry. lazy_free_in_kb = val,
8690 "AnonHugePages" => smap_entry. anon_huge_pages_in_kb = val,
8791 "ShmemPmdMapped" => smap_entry. shmem_pmd_mapped_in_kb = val,
@@ -98,7 +102,7 @@ pub fn parse_smap_entries(contents: &str) -> Result<Vec<SmapEntry>, Error> {
98102 }
99103 }
100104
101- if is_entry_moified {
105+ if is_entry_modified {
102106 smap_entries. push ( smap_entry) ;
103107 }
104108
@@ -127,12 +131,14 @@ mod test {
127131 mmu_page_size_in_kb : u64 ,
128132 rss_in_kb : u64 ,
129133 pss_in_kb : u64 ,
134+ pss_dirty_in_kb : u64 ,
130135 shared_clean_in_kb : u64 ,
131136 shared_dirty_in_kb : u64 ,
132137 private_clean_in_kb : u64 ,
133138 private_dirty_in_kb : u64 ,
134139 referenced_in_kb : u64 ,
135140 anonymous_in_kb : u64 ,
141+ ksm_in_kb : u64 ,
136142 lazy_free_in_kb : u64 ,
137143 anon_huge_pages_in_kb : u64 ,
138144 shmem_pmd_mapped_in_kb : u64 ,
@@ -160,12 +166,14 @@ mod test {
160166 mmu_page_size_in_kb,
161167 rss_in_kb,
162168 pss_in_kb,
169+ pss_dirty_in_kb,
163170 shared_clean_in_kb,
164171 shared_dirty_in_kb,
165172 private_clean_in_kb,
166173 private_dirty_in_kb,
167174 referenced_in_kb,
168175 anonymous_in_kb,
176+ ksm_in_kb,
169177 lazy_free_in_kb,
170178 anon_huge_pages_in_kb,
171179 shmem_pmd_mapped_in_kb,
@@ -186,37 +194,39 @@ mod test {
186194 (
187195 vec ! [ create_smap_entry(
188196 "0000560880413000" , Perms :: from( "r--p" ) , "0000000000000000" , "008:00008" , 10813151 , "konsole" ,
189- 180 , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 10 , 11 , 12 , 13 , 14 , 15 , 16 , 17 , 18 , 19 ,
190- 20 , "rd mr mw me dw sd" ) ] ,
197+ 180 , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 10 , 11 , 12 , 13 , 14 , 15 , 16 , 17 , 18 , 19 , 20 , 21 ,
198+ 22 , "rd mr mw me dw sd" ) ] ,
191199 concat ! (
192200 "560880413000-560880440000 r--p 00000000 08:08 10813151 /usr/bin/konsole\n " ,
193201 "Size: 180 kB\n " ,
194202 "KernelPageSize: 1 kB\n " ,
195203 "MMUPageSize: 2 kB\n " ,
196204 "Rss: 3 kB\n " ,
197205 "Pss: 4 kB\n " ,
198- "Shared_Clean: 5 kB\n " ,
199- "Shared_Dirty: 6 kB\n " ,
200- "Private_Clean: 7 kB\n " ,
201- "Private_Dirty: 8 kB\n " ,
202- "Referenced: 9 kB\n " ,
203- "Anonymous: 10 kB\n " ,
204- "LazyFree: 11 kB\n " ,
205- "AnonHugePages: 12 kB\n " ,
206- "ShmemPmdMapped: 13 kB\n " ,
207- "FilePmdMapped: 14 kB\n " ,
208- "Shared_Hugetlb: 15 kB\n " ,
209- "Private_Hugetlb: 16 kB\n " ,
210- "Swap: 17 kB\n " ,
211- "SwapPss: 18 kB\n " ,
212- "Locked: 19 kB\n " ,
213- "THPeligible: 20\n " ,
206+ "Pss_Dirty: 5 kB\n " ,
207+ "Shared_Clean: 6 kB\n " ,
208+ "Shared_Dirty: 7 kB\n " ,
209+ "Private_Clean: 8 kB\n " ,
210+ "Private_Dirty: 9 kB\n " ,
211+ "Referenced: 10 kB\n " ,
212+ "Anonymous: 11 kB\n " ,
213+ "KSM: 12 kB\n " ,
214+ "LazyFree: 13 kB\n " ,
215+ "AnonHugePages: 14 kB\n " ,
216+ "ShmemPmdMapped: 15 kB\n " ,
217+ "FilePmdMapped: 16 kB\n " ,
218+ "Shared_Hugetlb: 17 kB\n " ,
219+ "Private_Hugetlb: 18 kB\n " ,
220+ "Swap: 19 kB\n " ,
221+ "SwapPss: 20 kB\n " ,
222+ "Locked: 21 kB\n " ,
223+ "THPeligible: 22\n " ,
214224 "VmFlags: rd mr mw me dw sd \n " )
215225 ) ,
216226 (
217227 vec ! [ create_smap_entry(
218228 "000071af50000000" , Perms :: from( "rw-p" ) , "0000000000000000" , "000:00000" , 0 , " [ anon ]" ,
219- 132 , 4 , 4 , 128 , 9 , 128 , 0 , 0 , 0 , 128 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
229+ 132 , 4 , 4 , 128 , 9 , 9 , 128 , 0 , 0 , 0 , 128 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
220230 0 , "rd mr mw me sd" ) ] ,
221231 concat ! (
222232 "71af50000000-71af50021000 rw-p 00000000 00:00 0 \n " ,
@@ -225,16 +235,18 @@ mod test {
225235 "MMUPageSize: 4 kB\n " ,
226236 "Rss: 128 kB\n " ,
227237 "Pss: 9 kB\n " ,
238+ "Pss_Dirty: 9 kB\n " ,
228239 "Shared_Clean: 128 kB\n " ,
229240 "Shared_Dirty: 0 kB\n " ,
230241 "Private_Clean: 0 kB\n " ,
231242 "Private_Dirty: 0 kB\n " ,
232243 "Referenced: 128 kB\n " ,
233244 "Anonymous: 0 kB\n " ,
245+ "KSM: 0 kB\n " ,
234246 "LazyFree: 0 kB\n " ,
235247 "AnonHugePages: 0 kB\n " ,
236248 "ShmemPmdMapped: 0 kB\n " ,
237- "FilePmdMapped: 0 kB\n " ,
249+ "FilePmdMapped: 0 kB\n " ,
238250 "Shared_Hugetlb: 0 kB\n " ,
239251 "Private_Hugetlb: 0 kB\n " ,
240252 "Swap: 0 kB\n " ,
@@ -246,7 +258,7 @@ mod test {
246258 (
247259 vec ! [ create_smap_entry(
248260 "00007ffc3f8df000" , Perms :: from( "rw-p" ) , "0000000000000000" , "000:00000" , 0 , " [ stack ]" ,
249- 132 , 4 , 4 , 108 , 108 , 0 , 0 , 0 , 108 , 108 , 108 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
261+ 132 , 4 , 4 , 108 , 108 , 108 , 0 , 0 , 0 , 108 , 108 , 108 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
250262 0 , "rd wr mr mw me gd ac" ) ] ,
251263 concat ! (
252264 "7ffc3f8df000-7ffc3f900000 rw-p 00000000 00:00 0 [stack]\n " ,
@@ -255,16 +267,18 @@ mod test {
255267 "MMUPageSize: 4 kB\n " ,
256268 "Rss: 108 kB\n " ,
257269 "Pss: 108 kB\n " ,
270+ "Pss_Dirty: 108 kB\n " ,
258271 "Shared_Clean: 0 kB\n " ,
259272 "Shared_Dirty: 0 kB\n " ,
260273 "Private_Clean: 0 kB\n " ,
261274 "Private_Dirty: 108 kB\n " ,
262275 "Referenced: 108 kB\n " ,
263276 "Anonymous: 108 kB\n " ,
277+ "KSM: 0 kB\n " ,
264278 "LazyFree: 0 kB\n " ,
265279 "AnonHugePages: 0 kB\n " ,
266280 "ShmemPmdMapped: 0 kB\n " ,
267- "FilePmdMapped: 0 kB\n " ,
281+ "FilePmdMapped: 0 kB\n " ,
268282 "Shared_Hugetlb: 0 kB\n " ,
269283 "Private_Hugetlb: 0 kB\n " ,
270284 "Swap: 0 kB\n " ,
@@ -276,7 +290,7 @@ mod test {
276290 (
277291 vec ! [ create_smap_entry(
278292 "000071af8c9e6000" , Perms :: from( "rw-s" ) , "0000000105830000" , "000:00010" , 1075 , " [ anon ]" ,
279- 16 , 4 , 4 , 16 , 16 , 0 , 0 , 0 , 16 , 16 , 16 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
293+ 16 , 4 , 4 , 16 , 16 , 16 , 0 , 0 , 0 , 16 , 16 , 16 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
280294 0 , "rd wr mr mw me ac sd" ) ] ,
281295 concat ! (
282296 "71af8c9e6000-71af8c9ea000 rw-s 105830000 00:10 1075 anon_inode:i915.gem\n " ,
@@ -285,16 +299,18 @@ mod test {
285299 "MMUPageSize: 4 kB\n " ,
286300 "Rss: 16 kB\n " ,
287301 "Pss: 16 kB\n " ,
302+ "Pss_Dirty: 16 kB\n " ,
288303 "Shared_Clean: 0 kB\n " ,
289304 "Shared_Dirty: 0 kB\n " ,
290305 "Private_Clean: 0 kB\n " ,
291306 "Private_Dirty: 16 kB\n " ,
292307 "Referenced: 16 kB\n " ,
293308 "Anonymous: 16 kB\n " ,
309+ "KSM: 0 kB\n " ,
294310 "LazyFree: 0 kB\n " ,
295311 "AnonHugePages: 0 kB\n " ,
296312 "ShmemPmdMapped: 0 kB\n " ,
297- "FilePmdMapped: 0 kB\n " ,
313+ "FilePmdMapped: 0 kB\n " ,
298314 "Shared_Hugetlb: 0 kB\n " ,
299315 "Private_Hugetlb: 0 kB\n " ,
300316 "Swap: 0 kB\n " ,
@@ -306,7 +322,7 @@ mod test {
306322 (
307323 vec ! [ create_smap_entry(
308324 "000071af6cf0c000" , Perms :: from( "rw-s" ) , "0000000000000000" , "000:00001" , 256481 , "memfd:wayland-shm (deleted)" ,
309- 3560 , 4 , 4 , 532 , 108 , 524 , 0 , 8 , 0 , 532 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
325+ 3560 , 4 , 4 , 532 , 108 , 0 , 524 , 0 , 8 , 0 , 532 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
310326 0 , "rd mr mw me sd" ) ] ,
311327 concat ! (
312328 "71af6cf0c000-71af6d286000 rw-s 00000000 00:01 256481 /memfd:wayland-shm (deleted)\n " ,
@@ -315,16 +331,18 @@ mod test {
315331 "MMUPageSize: 4 kB\n " ,
316332 "Rss: 532 kB\n " ,
317333 "Pss: 108 kB\n " ,
334+ "Pss_Dirty: 0 kB\n " ,
318335 "Shared_Clean: 524 kB\n " ,
319336 "Shared_Dirty: 0 kB\n " ,
320337 "Private_Clean: 8 kB\n " ,
321338 "Private_Dirty: 0 kB\n " ,
322339 "Referenced: 532 kB\n " ,
323340 "Anonymous: 0 kB\n " ,
341+ "KSM: 0 kB\n " ,
324342 "LazyFree: 0 kB\n " ,
325343 "AnonHugePages: 0 kB\n " ,
326344 "ShmemPmdMapped: 0 kB\n " ,
327- "FilePmdMapped: 0 kB\n " ,
345+ "FilePmdMapped: 0 kB\n " ,
328346 "Shared_Hugetlb: 0 kB\n " ,
329347 "Private_Hugetlb: 0 kB\n " ,
330348 "Swap: 0 kB\n " ,
@@ -336,7 +354,7 @@ mod test {
336354 (
337355 vec ! [ create_smap_entry(
338356 "ffffffffff600000" , Perms :: from( "--xp" ) , "0000000000000000" , "000:00000" , 0 , " [ anon ]" ,
339- 4 , 4 , 4 , 4 , 4 , 0 , 0 , 0 , 4 , 4 , 4 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
357+ 4 , 4 , 4 , 4 , 4 , 4 , 0 , 0 , 0 , 4 , 4 , 4 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
340358 0 , "rd wr mr mw me ac sd" ) ] ,
341359 concat ! (
342360 "ffffffffff600000-ffffffffff601000 --xp 00000000 00:00 0 [vsyscall]\n " ,
@@ -345,16 +363,18 @@ mod test {
345363 "MMUPageSize: 4 kB\n " ,
346364 "Rss: 4 kB\n " ,
347365 "Pss: 4 kB\n " ,
366+ "Pss_Dirty: 4 kB\n " ,
348367 "Shared_Clean: 0 kB\n " ,
349368 "Shared_Dirty: 0 kB\n " ,
350369 "Private_Clean: 0 kB\n " ,
351370 "Private_Dirty: 4 kB\n " ,
352371 "Referenced: 4 kB\n " ,
353372 "Anonymous: 4 kB\n " ,
373+ "KSM: 0 kB\n " ,
354374 "LazyFree: 0 kB\n " ,
355375 "AnonHugePages: 0 kB\n " ,
356376 "ShmemPmdMapped: 0 kB\n " ,
357- "FilePmdMapped: 0 kB\n " ,
377+ "FilePmdMapped: 0 kB\n " ,
358378 "Shared_Hugetlb: 0 kB\n " ,
359379 "Private_Hugetlb: 0 kB\n " ,
360380 "Swap: 0 kB\n " ,
@@ -366,7 +386,7 @@ mod test {
366386 (
367387 vec ! [ create_smap_entry(
368388 "00005e8187da8000" , Perms :: from( "r--p" ) , "0000000000000000" , "008:00008" , 9524160 , "hello world" ,
369- 24 , 4 , 4 , 24 , 0 , 24 , 0 , 0 , 0 , 24 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
389+ 24 , 4 , 4 , 24 , 0 , 0 , 24 , 0 , 0 , 0 , 24 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
370390 0 , "rd ex mr mw me sd" ) ] ,
371391 concat ! (
372392 "5e8187da8000-5e8187dae000 r--p 00000000 08:08 9524160 /usr/bin/hello world\n " ,
@@ -375,16 +395,18 @@ mod test {
375395 "MMUPageSize: 4 kB\n " ,
376396 "Rss: 24 kB\n " ,
377397 "Pss: 0 kB\n " ,
398+ "Pss_Dirty: 0 kB\n " ,
378399 "Shared_Clean: 24 kB\n " ,
379400 "Shared_Dirty: 0 kB\n " ,
380401 "Private_Clean: 0 kB\n " ,
381402 "Private_Dirty: 0 kB\n " ,
382403 "Referenced: 24 kB\n " ,
383404 "Anonymous: 0 kB\n " ,
405+ "KSM: 0 kB\n " ,
384406 "LazyFree: 0 kB\n " ,
385407 "AnonHugePages: 0 kB\n " ,
386408 "ShmemPmdMapped: 0 kB\n " ,
387- "FilePmdMapped: 0 kB\n " ,
409+ "FilePmdMapped: 0 kB\n " ,
388410 "Shared_Hugetlb: 0 kB\n " ,
389411 "Private_Hugetlb: 0 kB\n " ,
390412 "Swap: 0 kB\n " ,
@@ -397,11 +419,11 @@ mod test {
397419 vec ! [
398420 create_smap_entry(
399421 "000071af8c9e6000" , Perms :: from( "rw-s" ) , "0000000105830000" , "000:00010" , 1075 , " [ anon ]" ,
400- 16 , 4 , 4 , 16 , 16 , 0 , 0 , 0 , 16 , 16 , 16 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
422+ 16 , 4 , 4 , 16 , 16 , 16 , 0 , 0 , 0 , 16 , 16 , 16 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
401423 0 , "rd wr mr mw me ac sd" ) ,
402424 create_smap_entry(
403425 "000071af6cf0c000" , Perms :: from( "rw-s" ) , "0000000000000000" , "000:00001" , 256481 , "memfd:wayland-shm (deleted)" ,
404- 3560 , 4 , 4 , 532 , 108 , 524 , 0 , 8 , 0 , 532 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
426+ 3560 , 4 , 4 , 532 , 108 , 0 , 524 , 0 , 8 , 0 , 532 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
405427 0 , "rd mr mw me sd" ) ,
406428 ] ,
407429 concat ! (
@@ -411,16 +433,18 @@ mod test {
411433 "MMUPageSize: 4 kB\n " ,
412434 "Rss: 16 kB\n " ,
413435 "Pss: 16 kB\n " ,
436+ "Pss_Dirty: 16 kB\n " ,
414437 "Shared_Clean: 0 kB\n " ,
415438 "Shared_Dirty: 0 kB\n " ,
416439 "Private_Clean: 0 kB\n " ,
417440 "Private_Dirty: 16 kB\n " ,
418441 "Referenced: 16 kB\n " ,
419442 "Anonymous: 16 kB\n " ,
443+ "KSM: 0 kB\n " ,
420444 "LazyFree: 0 kB\n " ,
421445 "AnonHugePages: 0 kB\n " ,
422446 "ShmemPmdMapped: 0 kB\n " ,
423- "FilePmdMapped: 0 kB\n " ,
447+ "FilePmdMapped: 0 kB\n " ,
424448 "Shared_Hugetlb: 0 kB\n " ,
425449 "Private_Hugetlb: 0 kB\n " ,
426450 "Swap: 0 kB\n " ,
@@ -434,16 +458,18 @@ mod test {
434458 "MMUPageSize: 4 kB\n " ,
435459 "Rss: 532 kB\n " ,
436460 "Pss: 108 kB\n " ,
461+ "Pss_Dirty: 0 kB\n " ,
437462 "Shared_Clean: 524 kB\n " ,
438463 "Shared_Dirty: 0 kB\n " ,
439464 "Private_Clean: 8 kB\n " ,
440465 "Private_Dirty: 0 kB\n " ,
441466 "Referenced: 532 kB\n " ,
442467 "Anonymous: 0 kB\n " ,
468+ "KSM: 0 kB\n " ,
443469 "LazyFree: 0 kB\n " ,
444470 "AnonHugePages: 0 kB\n " ,
445471 "ShmemPmdMapped: 0 kB\n " ,
446- "FilePmdMapped: 0 kB\n " ,
472+ "FilePmdMapped: 0 kB\n " ,
447473 "Shared_Hugetlb: 0 kB\n " ,
448474 "Private_Hugetlb: 0 kB\n " ,
449475 "Swap: 0 kB\n " ,
0 commit comments