mm/ksm: add pages scanned metric
Subsystems (4)
PATCH 1/1 mm/ksm: add pages scanned metric
ksm currently maintains several statistics, which let you determine how successful KSM is at sharing pages. However it does not contain a metric to determine how much work it does.
This commit adds the pages scanned metric. This allows the administrator to determine how many pages have been scanned over a period of time.
--- Documentation/admin-guide/mm/ksm.rst | 2 ++ mm/ksm.c | 16 +++++++++++++++- 2 files changed, 17 insertions(+), 1 deletion(-)
Documentation/admin-guide/mm/ksm.rst +2 -0
@@ -159,6 +159,8 @@ The effectiveness of KSM and MADV_MERGEABLE is shown in ``/sys/kernel/mm/ksm/``: general_profit how effective is KSM. The calculation is explained below. +pages_scanned + how many pages are being scanned for ksm pages_shared how many shared pages are being used pages_sharing
mm/ksm.c +15 -1
@@ -242,6 +242,9 @@ static struct kmem_cache *rmap_item_cache;static struct kmem_cache *stable_node_cache;static struct kmem_cache *mm_slot_cache; +/* The number of pages scanned */ +static unsigned long ksm_pages_scanned; +/* The number of nodes in the stable tree */ static unsigned long ksm_pages_shared;
@@ -2483,8 +2486,9 @@ static void ksm_do_scan(unsigned int scan_npages) {struct ksm_rmap_item *rmap_item;struct page *page; +unsigned int npages = scan_npages; -while (scan_npages-- &&likely (!freezing (current))) { +while (npages-- &&likely (!freezing (current))) {cond_resched (); rmap_item =scan_get_next_rmap_item (&page);if (!rmap_item)
@@ -2492,6 +2496,8 @@ static void ksm_do_scan(unsigned int scan_npages)cmp_and_merge_page (page, rmap_item);put_page (page); } + + ksm_pages_scanned += scan_npages - npages; }static int ksmd_should_run (void )
@@ -3332,6 +3338,13 @@ static ssize_t max_page_sharing_store(struct kobject *kobj, }KSM_ATTR (max_page_sharing); +static ssize_t pages_scanned_show (struct kobject *kobj, +struct kobj_attribute *attr,char *buf) +{ +return sysfs_emit (buf,"%lu\n" , ksm_pages_scanned); +} +KSM_ATTR_RO (pages_scanned); +static ssize_t pages_shared_show (struct kobject *kobj,struct kobj_attribute *attr,char *buf) {
@@ -3440,6 +3453,7 @@ static struct attribute *ksm_attrs[] = { &sleep_millisecs_attr.attr, &pages_to_scan_attr.attr, &run_attr.attr, + &pages_scanned_attr.attr, &pages_shared_attr.attr, &pages_sharing_attr.attr, &pages_unshared_attr.attr,
base-commit: f4a280e5bb4a764a75d3215b61bc0f02b4c26417
Signature · 1 line
2.39.3
Quoted 31 lines · Stefan Roesch
ksm currently maintains several statistics, which let you determine how successful KSM is at sharing pages. However it does not contain a metric to determine how much work it does.
This commit adds the pages scanned metric. This allows the administrator to determine how many pages have been scanned over a period of time.
Signed-off-by Stefan Roesch <[email protected]>--- Documentation/admin-guide/mm/ksm.rst | 2 ++ mm/ksm.c | 16 +++++++++++++++- 2 files changed, 17 insertions(+), 1 deletion(-)Documentation/admin-guide/mm/ksm.rst +2
-0@@ -159,6 +159,8 @@ The effectiveness of KSM and MADV_MERGEABLE is shown in ``/sys/kernel/mm/ksm/``: general_profit how effective is KSM. The calculation is explained below. +pages_scanned + how many pages are being scanned for ksm pages_shared how many shared pages are being used pages_sharingmm/ksm.c +0
-0
mm/ksm.c static struct kmem_cache *rmap_item_cache; · line 247
Quoted 6 lines
mm/ksm.c +3
-0@@ -242,6 +242,9 @@ static struct kmem_cache *rmap_item_cache;static struct kmem_cache *stable_node_cache;static struct kmem_cache *mm_slot_cache; +/* The number of pages scanned */ +static unsigned long ksm_pages_scanned; +
LGTM
Signature · 3 lines
Cheers, David / dhildenb