Re: understand KSM

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Mon, 25 Oct 2010, caiqian@xxxxxxxxxx wrote:

> Hi everyone, while developing some tests for KSM in LTP

Thank you!

> - http://marc.info/?l=ltp-list&m=128754077917739&w=2 , noticed that pages_shared, pages_sharing and pages_unshared have different values than the expected values in the tests after read the doc. I am not sure if I misunderstood those values or there were bugs somewhere.

You were expecting KSM to share pages between processes, but you were
not expecting it to share pages within a process, which it does also.

To check the exact numbers, it would be easier if you use page-aligned
mmap() rather than byte-aligned malloc() for your MADV_MERGEABLE buffers:
some numbers are a little "off" because of part-pages at start and end.

> 
> There are 3 programs (A, B ,C) to allocate 128M memory each using KSM.
> 
> A has memory content equal 'c'.
> B has memory content equal 'a'.
> C has memory content equal 'a'.
> 
> Then (using the latest mmotm tree),
> pages_shared = 2
> pages_sharing = 98292
> pages_unshared = 0

So, after KSM has done its best, it all reduces to 1 page full of 'a's
and another 1 page full of 'c's.

> 
> Later,
> A has memory content = 'c'
> B has memory content = 'b'
> C has memory content = 'a'.
> 
> Then,
> pages_shared = 4
> pages_sharing = 98282
> pages_unshared = 0

pages_shared 3 would be the obvious: I expect the extra 1 is an artifact
of part-pages at start and end of your buffers, a page shared there too.

> 
> Finally,
> A has memory content = 'd'
> B has memory content = 'd'
> C has memory content = 'd'
> 
> Then,
> pages_shared = 0
> pages_sharing = 0
> pages_unshared = 0

The children appear to exit(1) as soon as they have filled
their buffers with 'd's, so there's nothing left to share.

Hugh

> 
> The following was the failed LTP output,
> 
> # ./ksm01 
> ksm01       0  TINFO  :  KSM merging...
> ksm01       0  TINFO  :  child 0 allocates 128 MB filled with 'c'.
> ksm01       0  TINFO  :  child 1 allocates 128 MB filled with 'a'.
> ksm01       0  TINFO  :  child 2 allocates 128 MB filled with 'a'.
> ksm01       0  TINFO  :  check!
> ksm01       0  TINFO  :  run is 1.
> ksm01       0  TINFO  :  pages_shared is 2.
> ksm01       1  TFAIL  :  pages_shared is not 32768.
> ksm01       0  TINFO  :  pages_sharing is 98292.
> ksm01       2  TFAIL  :  pages_sharing is not 32768.
> ksm01       0  TINFO  :  pages_unshared is 0.
> ksm01       3  TFAIL  :  pages_unshared is not 32768.
> ksm01       0  TINFO  :  child 1 continues...
> ksm01       0  TINFO  :  child 1 changes memory content to 'b'.
> ksm01       0  TINFO  :  check!
> ksm01       0  TINFO  :  run is 1.
> ksm01       0  TINFO  :  pages_shared is 4.
> ksm01       4  TFAIL  :  pages_shared is not 0.
> ksm01       0  TINFO  :  pages_sharing is 98282.
> ksm01       5  TFAIL  :  pages_sharing is not 0.
> ksm01       0  TINFO  :  pages_unshared is 0.
> ksm01       6  TFAIL  :  pages_unshared is not 98304.
> ksm01       0  TINFO  :  child 0 continues...
> ksm01       0  TINFO  :  child 0 changes memory content to 'd'.
> ksm01       0  TINFO  :  child 1 continues...
> ksm01       0  TINFO  :  child 1 changes memory content to 'd'
> ksm01       0  TINFO  :  child 2 continues...
> ksm01       0  TINFO  :  child 2 changes memory content to 'd'
> ksm01       0  TINFO  :  check!
> ksm01       0  TINFO  :  run is 1.
> ksm01       0  TINFO  :  pages_shared is 0.
> ksm01       7  TFAIL  :  pages_shared is not 32768.
> ksm01       0  TINFO  :  pages_sharing is 0.
> ksm01       8  TFAIL  :  pages_sharing is not 65536.
> ksm01       0  TINFO  :  pages_unshared is 0.
> ksm01       0  TINFO  :  KSM unmerging...
> ksm01       0  TINFO  :  check!
> ksm01       0  TINFO  :  run is 2.
> ksm01       0  TINFO  :  pages_shared is 0.
> ksm01       0  TINFO  :  pages_sharing is 0.
> ksm01       0  TINFO  :  pages_unshared is 0.
> ksm01       0  TINFO  :  stop KSM.
> ksm01       0  TINFO  :  check!
> ksm01       0  TINFO  :  run is 0.
> ksm01       0  TINFO  :  pages_shared is 0.
> ksm01       0  TINFO  :  pages_sharing is 0.
> ksm01       0  TINFO  :  pages_unshared is 0.
> ksm01       9  TFAIL  :  ksmtest() failed with 1.
> 
> CAI Qian

--
To unsubscribe, send a message with 'unsubscribe linux-mm' in
the body to majordomo@xxxxxxxxxx  For more info on Linux MM,
see: http://www.linux-mm.org/ .
Don't email: <a href=mailto:"dont@xxxxxxxxx";> email@xxxxxxxxx </a>



[Index of Archives]     [Linux ARM Kernel]     [Linux ARM]     [Linux Omap]     [Fedora ARM]     [IETF Annouce]     [Bugtraq]     [Linux]     [Linux OMAP]     [Linux MIPS]     [ECOS]     [Asterisk Internet PBX]     [Linux API]