Re: [PATCH] mm: extend zero pages to same element pages for zram

From: Sergey Senozhatsky
Date: Sat Jan 21 2017 - 03:43:48 EST


Hello,

On (01/13/17 16:29), zhouxianrong@xxxxxxxxxx wrote:
[..]
> --- a/Documentation/ABI/testing/sysfs-block-zram
> +++ b/Documentation/ABI/testing/sysfs-block-zram
> @@ -86,21 +86,21 @@ Description:
> ones are sent by filesystem mounted with discard option,
> whenever some data blocks are getting discarded.
>
> -What: /sys/block/zram<id>/zero_pages
> +What: /sys/block/zram<id>/same_pages
[..]
> -zero_pages RO the number of zero filled pages written to this disk
> +same_pages RO the number of same element filled pages written to this disk
[..]
> - zero_pages
> + same_pages
> num_migrated
> +}

we removed deprecated sysfs attrs. zero_pages does not exist anymore.

> static size_t zram_get_obj_size(struct zram_meta *meta, u32 index)
> {
> return meta->table[index].value & (BIT(ZRAM_FLAG_SHIFT) - 1);
> @@ -158,31 +169,76 @@ static inline void update_used_max(struct zram *zram,
> } while (old_max != cur_max);
> }
>
> -static bool page_zero_filled(void *ptr)
> +static inline void zram_fill_page(char *ptr, unsigned long value)
> +{
> + int i;
> + unsigned long *page = (unsigned long *)ptr;
> +
> + if (likely(value == 0)) {
> + clear_page(ptr);
> + } else {
> + for (i = PAGE_SIZE / sizeof(unsigned long) - 1; i >= 0; i--)
> + page[i] = value;
> + }

any particular reason not to use memset() here?
memset() can be faster that that, right?


[..]
> /* Flags for zram pages (table[page_no].value) */
> enum zram_pageflags {
> - /* Page consists entirely of zeros */
> - ZRAM_ZERO = ZRAM_FLAG_SHIFT,
> + /* Page consists entirely of same elements */
> + ZRAM_SAME = ZRAM_FLAG_SHIFT,
> ZRAM_ACCESS, /* page is now accessed */
[..]
> @@ -83,7 +86,7 @@ struct zram_stats {
> atomic64_t failed_writes; /* can happen when memory is too low */
> atomic64_t invalid_io; /* non-page-aligned I/O requests */
> atomic64_t notify_free; /* no. of swap slot free notifications */
> - atomic64_t zero_pages; /* no. of zero filled pages */
> + atomic64_t same_pages; /* no. of same element filled pages */

not like this rename is particularity important, but ok. works for me.

-ss