| From: Yosry Ahmed <yosryahmed@google.com> |
| Subject: mm: zswap: remove same_filled module params |
| Date: Sat, 13 Apr 2024 02:24:07 +0000 |
| |
| These knobs offer more fine-grained control to userspace than needed and |
| directly expose/influence kernel implementation; remove them. |
| |
| For disabling same_filled handling, there is no logical reason to refuse |
| storing same-filled pages more efficiently and opt for compression. |
| Scanning pages for patterns may be an argument, but the page contents will |
| be read into the CPU cache anyway during compression. Also, removing the |
| same_filled handling code does not move the needle significantly in terms |
| of performance anyway [1]. |
| |
| For disabling non_same_filled handling, it was added when the compressed |
| pages in zswap were not being properly charged to memcgs, as workloads |
| could escape the accounting with compression [2]. This is no longer the |
| case after commit f4840ccfca25 ("zswap: memcg accounting"), and using |
| zswap without compression does not make much sense. |
| |
| [1]https://lore.kernel.org/lkml/CAJD7tkaySFP2hBQw4pnZHJJwe3bMdjJ1t9VC2VJd=khn1_TXvA@mail.gmail.com/ |
| [2]https://lore.kernel.org/lkml/19d5cdee-2868-41bd-83d5-6da75d72e940@maciej.szmigiero.name/ |
| |
| [yosryahmed@google.com: remove same_filled_pages from docs] |
| Link: https://lkml.kernel.org/r/ZhxFVggdyvCo79jc@google.com |
| Link: https://lkml.kernel.org/r/20240413022407.785696-5-yosryahmed@google.com |
| Signed-off-by: Yosry Ahmed <yosryahmed@google.com> |
| Acked-by: Johannes Weiner <hannes@cmpxchg.org> |
| Reviewed-by: Nhat Pham <nphamcs@gmail.com> |
| Reviewed-by: Chengming Zhou <chengming.zhou@linux.dev> |
| Cc: "Maciej S. Szmigiero" <mail@maciej.szmigiero.name> |
| Signed-off-by: Andrew Morton <akpm@linux-foundation.org> |
| --- |
| |
| Documentation/admin-guide/mm/zswap.rst | 29 ----------- |
| Documentation/driver-api/crypto/iaa/iaa-crypto.rst | 2 |
| mm/zswap.c | 19 ------- |
| 3 files changed, 50 deletions(-) |
| |
| --- a/Documentation/admin-guide/mm/zswap.rst~mm-zswap-remove-same_filled-module-params |
| +++ a/Documentation/admin-guide/mm/zswap.rst |
| @@ -111,35 +111,6 @@ checked if it is a same-value filled pag |
| compressed length of the page is set to zero and the pattern or same-filled |
| value is stored. |
| |
| -Same-value filled pages identification feature is enabled by default and can be |
| -disabled at boot time by setting the ``same_filled_pages_enabled`` attribute |
| -to 0, e.g. ``zswap.same_filled_pages_enabled=0``. It can also be enabled and |
| -disabled at runtime using the sysfs ``same_filled_pages_enabled`` |
| -attribute, e.g.:: |
| - |
| - echo 1 > /sys/module/zswap/parameters/same_filled_pages_enabled |
| - |
| -When zswap same-filled page identification is disabled at runtime, it will stop |
| -checking for the same-value filled pages during store operation. |
| -In other words, every page will be then considered non-same-value filled. |
| -However, the existing pages which are marked as same-value filled pages remain |
| -stored unchanged in zswap until they are either loaded or invalidated. |
| - |
| -In some circumstances it might be advantageous to make use of just the zswap |
| -ability to efficiently store same-filled pages without enabling the whole |
| -compressed page storage. |
| -In this case the handling of non-same-value pages by zswap (enabled by default) |
| -can be disabled by setting the ``non_same_filled_pages_enabled`` attribute |
| -to 0, e.g. ``zswap.non_same_filled_pages_enabled=0``. |
| -It can also be enabled and disabled at runtime using the sysfs |
| -``non_same_filled_pages_enabled`` attribute, e.g.:: |
| - |
| - echo 1 > /sys/module/zswap/parameters/non_same_filled_pages_enabled |
| - |
| -Disabling both ``zswap.same_filled_pages_enabled`` and |
| -``zswap.non_same_filled_pages_enabled`` effectively disables accepting any new |
| -pages by zswap. |
| - |
| To prevent zswap from shrinking pool when zswap is full and there's a high |
| pressure on swap (this will result in flipping pages in and out zswap pool |
| without any real benefit but with a performance drop for the system), a |
| --- a/Documentation/driver-api/crypto/iaa/iaa-crypto.rst~mm-zswap-remove-same_filled-module-params |
| +++ a/Documentation/driver-api/crypto/iaa/iaa-crypto.rst |
| @@ -457,7 +457,6 @@ Use the following commands to enable zsw |
| # echo deflate-iaa > /sys/module/zswap/parameters/compressor |
| # echo zsmalloc > /sys/module/zswap/parameters/zpool |
| # echo 1 > /sys/module/zswap/parameters/enabled |
| - # echo 0 > /sys/module/zswap/parameters/same_filled_pages_enabled |
| # echo 100 > /proc/sys/vm/swappiness |
| # echo never > /sys/kernel/mm/transparent_hugepage/enabled |
| # echo 1 > /proc/sys/vm/overcommit_memory |
| @@ -599,7 +598,6 @@ the 'fixed' compression mode:: |
| echo deflate-iaa > /sys/module/zswap/parameters/compressor |
| echo zsmalloc > /sys/module/zswap/parameters/zpool |
| echo 1 > /sys/module/zswap/parameters/enabled |
| - echo 0 > /sys/module/zswap/parameters/same_filled_pages_enabled |
| |
| echo 100 > /proc/sys/vm/swappiness |
| echo never > /sys/kernel/mm/transparent_hugepage/enabled |
| --- a/mm/zswap.c~mm-zswap-remove-same_filled-module-params |
| +++ a/mm/zswap.c |
| @@ -123,19 +123,6 @@ static unsigned int zswap_accept_thr_per |
| module_param_named(accept_threshold_percent, zswap_accept_thr_percent, |
| uint, 0644); |
| |
| -/* |
| - * Enable/disable handling same-value filled pages (enabled by default). |
| - * If disabled every page is considered non-same-value filled. |
| - */ |
| -static bool zswap_same_filled_pages_enabled = true; |
| -module_param_named(same_filled_pages_enabled, zswap_same_filled_pages_enabled, |
| - bool, 0644); |
| - |
| -/* Enable/disable handling non-same-value filled pages (enabled by default) */ |
| -static bool zswap_non_same_filled_pages_enabled = true; |
| -module_param_named(non_same_filled_pages_enabled, zswap_non_same_filled_pages_enabled, |
| - bool, 0644); |
| - |
| /* Number of zpools in zswap_pool (empirically determined for scalability) */ |
| #define ZSWAP_NR_ZPOOLS 32 |
| |
| @@ -1393,9 +1380,6 @@ static bool zswap_is_folio_same_filled(s |
| unsigned int pos, last_pos = PAGE_SIZE / sizeof(*page) - 1; |
| bool ret = false; |
| |
| - if (!zswap_same_filled_pages_enabled) |
| - return false; |
| - |
| page = kmap_local_folio(folio, 0); |
| val = page[0]; |
| |
| @@ -1473,9 +1457,6 @@ bool zswap_store(struct folio *folio) |
| goto store_entry; |
| } |
| |
| - if (!zswap_non_same_filled_pages_enabled) |
| - goto freepage; |
| - |
| /* if entry is successfully added, it keeps the reference */ |
| entry->pool = zswap_pool_current_get(); |
| if (!entry->pool) |
| _ |