On Thu, Jan 17, 2019 at 11:18:09PM +0100, Aurélien Cedeyn wrote: > On Thu, Jan 17, 2019 at 02:14:56PM +0800, wuzhouhui wrote: > > Hi, maybe it is a stupid question, but I just couldn't figure it out, > > since codes of ksm in 2.6.32 and 3.10.0 are similar. > > > > In CentOS 6 (kernel 2.6.32 based), I can see ksm slab from /proc/slabinfo: > > $ grep ksm /proc/slabinfo > > ksm_mm_slot 5 77 48 77 1 : tunables 120 60 8 : slabdata 1 1 0 > > ksm_stable_node 414575 446016 40 92 1 : tunables 120 60 8 : slabdata 4848 4848 0 > > ksm_rmap_item 43617468 43617638 64 59 1 : tunables 120 60 8 : slabdata 739282 739282 0 > > > > But in CentOS 7 (kernel 3.10.0 based), they gone: > > $ sudo grep ksm /proc/slabinfo > > $ > > > > Why? ksm is compiled in kernel for both centos6 and centos7. > > Hi, > > Maybe you should try to add this option to the kernel command line : > > -------------------- > slab_nomerge [MM] > Disable merging of slabs with similar size. May be > necessary if there is some reason to distinguish > allocs to different slabs, especially in hardened > environments where the risk of heap overflows and > layout control by attackers can usually be > frustrated by disabling merging. This will reduce > most of the exposure of a heap attack to a single > cache (risks via metadata attacks are mostly > unchanged). Debug options disable merging on their > own. > For more information see Documentation/vm/slub.rst. > -------------------- > > By default the slab are merged in CentOS 7. > I had this behaviour when switching from CentOS 6 to CentOS 7. > To complete my answer, you can access/view which slab are linked together: # grep ksm /proc/slabinfo # # ls /sys/kernel/slab/ -l | grep ksm lrwxrwxrwx 1 root root 0 janv. 18 00:11 ksm_mm_slot -> :t-0000048 lrwxrwxrwx 1 root root 0 janv. 18 00:11 ksm_rmap_item -> :t-0000064 lrwxrwxrwx 1 root root 0 janv. 18 00:11 ksm_stable_node -> :t-0000064 # ls /sys/kernel/slab/ -l | grep :t-0000048 lrwxrwxrwx 1 root root 0 janv. 18 00:13 fasync_cache -> :t-0000048 lrwxrwxrwx 1 root root 0 janv. 18 00:13 ftrace_event_field -> :t-0000048 lrwxrwxrwx 1 root root 0 janv. 18 00:13 ip_fib_trie -> :t-0000048 lrwxrwxrwx 1 root root 0 janv. 18 00:13 jbd2_inode -> :t-0000048 lrwxrwxrwx 1 root root 0 janv. 18 00:13 ksm_mm_slot -> :t-0000048 lrwxrwxrwx 1 root root 0 janv. 18 00:13 shared_policy_node -> :t-0000048 drwxr-xr-x 3 root root 0 janv. 18 00:13 :t-0000048 lrwxrwxrwx 1 root root 0 janv. 18 00:13 t10_alua_lba_map_cache -> :t-0000048 lrwxrwxrwx 1 root root 0 janv. 18 00:13 t10_alua_lu_gp_mem_cache -> :t-0000048 # ls /sys/kernel/slab/ -l | grep :t-0000064 lrwxrwxrwx 1 root root 0 janv. 18 00:13 anon_vma_chain -> :t-0000064 lrwxrwxrwx 1 root root 0 janv. 18 00:13 dccp_ackvec_record -> :t-0000064 lrwxrwxrwx 1 root root 0 janv. 18 00:13 dccp_bind_bucket -> :t-0000064 lrwxrwxrwx 1 root root 0 janv. 18 00:13 dmaengine-unmap-2 -> :t-0000064 lrwxrwxrwx 1 root root 0 janv. 18 00:13 ecryptfs_global_auth_tok_cache -> :t-0000064 lrwxrwxrwx 1 root root 0 janv. 18 00:13 ecryptfs_key_sig_cache -> :t-0000064 lrwxrwxrwx 1 root root 0 janv. 18 00:13 fanotify_perm_event_info -> :t-0000064 lrwxrwxrwx 1 root root 0 janv. 18 00:13 fs_cache -> :t-0000064 lrwxrwxrwx 1 root root 0 janv. 18 00:13 io -> :t-0000064 lrwxrwxrwx 1 root root 0 janv. 18 00:13 kmalloc-64 -> :t-0000064 lrwxrwxrwx 1 root root 0 janv. 18 00:13 ksm_rmap_item -> :t-0000064 lrwxrwxrwx 1 root root 0 janv. 18 00:13 ksm_stable_node -> :t-0000064 lrwxrwxrwx 1 root root 0 janv. 18 00:13 lio_dr_cache -> :t-0000064 lrwxrwxrwx 1 root root 0 janv. 18 00:13 lio_ooo_cache -> :t-0000064 lrwxrwxrwx 1 root root 0 janv. 18 00:13 lio_r2t_cache -> :t-0000064 lrwxrwxrwx 1 root root 0 janv. 18 00:13 secpath_cache -> :t-0000064 drwxr-xr-x 3 root root 0 janv. 18 00:13 :t-0000064 lrwxrwxrwx 1 root root 0 janv. 18 00:13 task_delay_info -> :t-0000064 lrwxrwxrwx 1 root root 0 janv. 18 00:13 tcp_bind_bucket -> :t-0000064 -- Aurélien