Received: by 10.213.65.68 with SMTP id h4csp2225024imn; Sun, 8 Apr 2018 22:59:02 -0700 (PDT) X-Google-Smtp-Source: AIpwx494610ifd5c+Xlyg9FH0vl7TdRqJ43YOW2FTbdQwdRuHDuql6IxrxWsfu/aVRiBF+JCjyck X-Received: by 2002:a17:902:6b03:: with SMTP id o3-v6mr31586301plk.183.1523253542347; Sun, 08 Apr 2018 22:59:02 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1523253542; cv=none; d=google.com; s=arc-20160816; b=EgWeReA7g1doeQ0r1Kmt88x0Z9msIs99aRnEGlxhza/DxSvMLbiCjp6Okv9OehkFCU 9R4wRka4UQ3Pk0FtAZrKlQvIRm/4gSK3Ra7q/GAapZee72rW5Y/ff8txAkFWWkAFMF/C CZjVFo6s57/IM89BA1C+1aVyVoz5wt7iA315P1/u5eFHCpkfoDhM3BtQetkOdp/JbYGE kVJBC97wzCi9F5tP02qM5/qol5mJIJrzKhc9ZACf0KNtgJ0qvvnLQmXcvGC3RLXYdWMx zb0rNuG5xFzao6gE/QOnacbvf0d/KLPub5un+s3+SmP9+WseTKO0NRd9Woq2Il5bM4W+ m40Q== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:references:in-reply-to:message-id:date :subject:cc:to:from:dkim-signature:arc-authentication-results; bh=cgX/55ggAGcA/Cm03YdqW9oMavwKtrb6JJOC3De7YQE=; b=KImwqmRKRdMznwrTeEpyzdQIJzsVvVFoGx/Bx76WGXoOIp7mg8U5WqB66CmslLDtvj uhYF+R2nD3oCOqJpYA5T4rRiSKK0M+CYfZxAsanSLhmG2x+WSlgd4twu3aRp67SqKnRe kStqC9UxRIblBay5Q7S6CvFcs1JaocTFfDCfk6m3q3nur3XSnQ/iIeKKKvFGQbpOtTAy P3r68xWrX+76Qa/iiDMCY7vGzASjCCr4T86kxVKHkZBGp47r4MHBZPljkJObNZzbYwBn x6eAO/trKlYW7FH9Dee3srJOx5c5rKEwGn/h5wmU4KVWazrN5Hl1vI08b14H4RzGTH+b cOCw== ARC-Authentication-Results: i=1; mx.google.com; dkim=fail header.i=@gmail.com header.s=20161025 header.b=cx9foTwj; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id v61-v6si14028363plb.297.2018.04.08.22.58.25; Sun, 08 Apr 2018 22:59:02 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=fail header.i=@gmail.com header.s=20161025 header.b=cx9foTwj; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751856AbeDIFyy (ORCPT + 99 others); Mon, 9 Apr 2018 01:54:54 -0400 Received: from mail-pf0-f195.google.com ([209.85.192.195]:38306 "EHLO mail-pf0-f195.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751630AbeDIFyv (ORCPT ); Mon, 9 Apr 2018 01:54:51 -0400 Received: by mail-pf0-f195.google.com with SMTP id y69so5255243pfb.5 for ; Sun, 08 Apr 2018 22:54:51 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:from:to:cc:subject:date:message-id:in-reply-to:references; bh=cgX/55ggAGcA/Cm03YdqW9oMavwKtrb6JJOC3De7YQE=; b=cx9foTwjcSBEs+8XxR4Wpi0NNoYuGqZB1FFcduPvhfxSUEZ+6ZxyJFN9a2GSNAw8WD X9nfgDdM22TJbJDdKuGLXJACTxD87fVQI9Ct5zulcsR/H8xp5FmwQ0tXzaNj0uBaqjnB IaUVaCXm9Pae8YwTuVKF+7Sa40TfbgZOLcswtNVFREG491BYr2lIIlRsJhfQS0kLS0KM RBwk0oqlV0dGRHouIRk2uAwLfCg2Mo8oJUUAEjfpkEkglgfLylkt9GxZklCuMMe68Qko Phm9yd/6aqZTvxwcj2X/e+Rx5MvNlvLD4aHYTohFNL07Tsh1csgWZUDWBPM0ZgFbEZ72 kl3g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:from:to:cc:subject:date:message-id :in-reply-to:references; bh=cgX/55ggAGcA/Cm03YdqW9oMavwKtrb6JJOC3De7YQE=; b=BWHVzWLXKZftsYKcbV7UzjKx4CtQRvdSIE7yhOoRZICglCjEZV7CTj+hP4RbaS4mgl DGVsfB1kG+GUvtyKtI75TrA9WtFd/A1R1N6IGjEqtK+25Ey5LslNP9tkj7A+lsgy6azt FmOvVyABx+qO2rrCAJd80BBHY43NF8qcb+Q5W2zcHFSvSDA426jYbl+Eh+UyZb0Y1Vwb bpapVRs3REoDn2Wdq+oWRVGqkJoPh8+aMS0PIkgPMlIjx/AHsv9KzcOYIXaM5QCsCdnZ dA7rQ7XcRjRPD0DS9MphNw/22BKjffLBJ6th9pa94mbWhUxk1/mjGdVVXx7AdKJfuwp3 tphA== X-Gm-Message-State: AElRT7H8W6oxR/tkwcfGafl+klEdC93IctC0JlJGvjMnkgEpfPqYZJrn AiuiWKbkXnm/8V2zzlStR/g= X-Received: by 10.99.2.202 with SMTP id 193mr24315601pgc.117.1523253290909; Sun, 08 Apr 2018 22:54:50 -0700 (PDT) Received: from bbox-2.seo.corp.google.com ([2401:fa00:d:0:7630:de9:f6f2:276f]) by smtp.gmail.com with ESMTPSA id z83sm31992927pfd.31.2018.04.08.22.54.48 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Sun, 08 Apr 2018 22:54:49 -0700 (PDT) From: Minchan Kim To: Andrew Morton Cc: LKML , Sergey Senozhatsky , Minchan Kim Subject: [PATCH v3 3/4] zram: record accessed second Date: Mon, 9 Apr 2018 14:54:34 +0900 Message-Id: <20180409055435.135695-4-minchan@kernel.org> X-Mailer: git-send-email 2.17.0.484.g0c8726318c-goog In-Reply-To: <20180409055435.135695-1-minchan@kernel.org> References: <20180409055435.135695-1-minchan@kernel.org> Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org zRam as swap is useful for small memory device. However, swap means those pages on zram are mostly cold pages due to VM's LRU algorithm. Especially, once init data for application are touched for launching, they tend to be not accessed any more and finally swapped out. zRAM can store such cold pages as compressed form but it's pointless to keep in memory. Better idea is app developers free them directly rather than remaining them on heap. This patch records last access time of each block of zram so that With upcoming zram memory tracking, it could help userspace developers to reduce memory footprint. Signed-off-by: Minchan Kim --- drivers/block/zram/zram_drv.c | 16 ++++++++++++++++ drivers/block/zram/zram_drv.h | 1 + 2 files changed, 17 insertions(+) diff --git a/drivers/block/zram/zram_drv.c b/drivers/block/zram/zram_drv.c index 777fb3339f59..7fc10e2ad734 100644 --- a/drivers/block/zram/zram_drv.c +++ b/drivers/block/zram/zram_drv.c @@ -107,6 +107,16 @@ static inline void zram_set_element(struct zram *zram, u32 index, zram->table[index].element = element; } +static void zram_accessed(struct zram *zram, u32 index) +{ + zram->table[index].ac_time = sched_clock(); +} + +static void zram_reset_access(struct zram *zram, u32 index) +{ + zram->table[index].ac_time = 0; +} + static unsigned long zram_get_element(struct zram *zram, u32 index) { return zram->table[index].element; @@ -806,6 +816,8 @@ static void zram_free_page(struct zram *zram, size_t index) { unsigned long handle; + zram_reset_access(zram, index); + if (zram_test_flag(zram, index, ZRAM_HUGE)) { zram_clear_flag(zram, index, ZRAM_HUGE); atomic64_dec(&zram->stats.huge_pages); @@ -1177,6 +1189,10 @@ static int zram_bvec_rw(struct zram *zram, struct bio_vec *bvec, u32 index, generic_end_io_acct(q, rw_acct, &zram->disk->part0, start_time); + zram_slot_lock(zram, index); + zram_accessed(zram, index); + zram_slot_unlock(zram, index); + if (unlikely(ret < 0)) { if (!is_write) atomic64_inc(&zram->stats.failed_reads); diff --git a/drivers/block/zram/zram_drv.h b/drivers/block/zram/zram_drv.h index ff0547bdb586..1075218e88b2 100644 --- a/drivers/block/zram/zram_drv.h +++ b/drivers/block/zram/zram_drv.h @@ -61,6 +61,7 @@ struct zram_table_entry { unsigned long element; }; unsigned long value; + u64 ac_time; }; struct zram_stats { -- 2.17.0.484.g0c8726318c-goog