From: zwu.kernel@gmail.com
To: linux-fsdevel@vger.kernel.org
Cc: linux-kernel@vger.kernel.org, viro@zeniv.linux.org.uk,
Zhi Yong Wu <wuzhy@linux.vnet.ibm.com>
Subject: [PATCH v1 hot_track 05/16] vfs: add hooks to enable hot tracking
Date: Fri, 16 Nov 2012 17:51:07 +0800 [thread overview]
Message-ID: <1353059478-25474-6-git-send-email-zwu.kernel@gmail.com> (raw)
In-Reply-To: <1353059478-25474-1-git-send-email-zwu.kernel@gmail.com>
From: Zhi Yong Wu <wuzhy@linux.vnet.ibm.com>
Miscellaneous features that implement hot data tracking
and generally make the hot data functions a bit more friendly.
Signed-off-by: Zhi Yong Wu <wuzhy@linux.vnet.ibm.com>
---
fs/direct-io.c | 6 ++++++
mm/filemap.c | 6 ++++++
mm/page-writeback.c | 12 ++++++++++++
mm/readahead.c | 7 +++++++
4 files changed, 31 insertions(+), 0 deletions(-)
diff --git a/fs/direct-io.c b/fs/direct-io.c
index f86c720..51f13f4 100644
--- a/fs/direct-io.c
+++ b/fs/direct-io.c
@@ -37,6 +37,7 @@
#include <linux/uio.h>
#include <linux/atomic.h>
#include <linux/prefetch.h>
+#include "hot_tracking.h"
/*
* How many user pages to map in one call to get_user_pages(). This determines
@@ -1297,6 +1298,11 @@ __blockdev_direct_IO(int rw, struct kiocb *iocb, struct inode *inode,
prefetch(bdev->bd_queue);
prefetch((char *)bdev->bd_queue + SMP_CACHE_BYTES);
+ /* Hot data tracking */
+ hot_update_freqs(inode, offset,
+ iov_length(iov, nr_segs),
+ rw & WRITE);
+
return do_blockdev_direct_IO(rw, iocb, inode, bdev, iov, offset,
nr_segs, get_block, end_io,
submit_io, flags);
diff --git a/mm/filemap.c b/mm/filemap.c
index 83efee7..6141374 100644
--- a/mm/filemap.c
+++ b/mm/filemap.c
@@ -33,6 +33,7 @@
#include <linux/hardirq.h> /* for BUG_ON(!in_atomic()) only */
#include <linux/memcontrol.h>
#include <linux/cleancache.h>
+#include <linux/hot_tracking.h>
#include "internal.h"
/*
@@ -1224,6 +1225,11 @@ readpage:
* PG_error will be set again if readpage fails.
*/
ClearPageError(page);
+
+ /* Hot data tracking */
+ hot_update_freqs(inode, (loff_t)page->index << PAGE_CACHE_SHIFT,
+ PAGE_CACHE_SIZE, 0);
+
/* Start the actual read. The read will unlock the page. */
error = mapping->a_ops->readpage(filp, page);
diff --git a/mm/page-writeback.c b/mm/page-writeback.c
index 830893b..dc8f721 100644
--- a/mm/page-writeback.c
+++ b/mm/page-writeback.c
@@ -35,6 +35,7 @@
#include <linux/buffer_head.h> /* __set_page_dirty_buffers */
#include <linux/pagevec.h>
#include <linux/timer.h>
+#include <linux/hot_tracking.h>
#include <trace/events/writeback.h>
/*
@@ -1903,13 +1904,24 @@ EXPORT_SYMBOL(generic_writepages);
int do_writepages(struct address_space *mapping, struct writeback_control *wbc)
{
int ret;
+ loff_t start = 0;
+ size_t count = 0;
if (wbc->nr_to_write <= 0)
return 0;
+
+ start = mapping->writeback_index << PAGE_CACHE_SHIFT;
+ count = wbc->nr_to_write;
+
if (mapping->a_ops->writepages)
ret = mapping->a_ops->writepages(mapping, wbc);
else
ret = generic_writepages(mapping, wbc);
+
+ /* Hot data tracking */
+ hot_update_freqs(mapping->host, start,
+ (count - wbc->nr_to_write) * PAGE_CACHE_SIZE, 1);
+
return ret;
}
diff --git a/mm/readahead.c b/mm/readahead.c
index 7963f23..d1ab688 100644
--- a/mm/readahead.c
+++ b/mm/readahead.c
@@ -19,6 +19,7 @@
#include <linux/pagemap.h>
#include <linux/syscalls.h>
#include <linux/file.h>
+#include <linux/hot_tracking.h>
/*
* Initialise a struct file's readahead state. Assumes that the caller has
@@ -138,6 +139,12 @@ static int read_pages(struct address_space *mapping, struct file *filp,
out:
blk_finish_plug(&plug);
+ /* Hot data tracking */
+ hot_update_freqs(mapping->host,
+ (loff_t)(list_entry(pages->prev, struct page, lru)->index)
+ << PAGE_CACHE_SHIFT,
+ (size_t)nr_pages * PAGE_CACHE_SIZE, 0);
+
return ret;
}
--
1.7.6.5
next prev parent reply other threads:[~2012-11-16 9:51 UTC|newest]
Thread overview: 22+ messages / expand[flat|nested] mbox.gz Atom feed top
2012-11-16 9:51 [PATCH v1 resend hot_track 00/16] vfs: hot data tracking zwu.kernel
2012-11-16 9:51 ` [PATCH v1 hot_track 01/16] vfs: introduce some data structures zwu.kernel
2012-11-16 9:51 ` [PATCH v1 hot_track 02/16] vfs: add init and cleanup functions zwu.kernel
2012-11-16 9:51 ` [PATCH v1 hot_track 03/16] vfs: add I/O frequency update function zwu.kernel
2012-11-16 9:51 ` [PATCH v1 hot_track 04/16] vfs: add two map arrays zwu.kernel
2012-11-16 9:51 ` zwu.kernel [this message]
2012-11-16 9:51 ` [PATCH v1 hot_track 06/16] vfs: add temp calculation function zwu.kernel
2012-11-16 9:51 ` [PATCH v1 hot_track 07/16] vfs: add map info update function zwu.kernel
2012-11-16 9:51 ` [PATCH v1 hot_track 08/16] vfs: add aging function zwu.kernel
2012-11-16 9:51 ` [PATCH v1 hot_track 09/16] vfs: add one work queue zwu.kernel
2012-11-16 9:51 ` [PATCH v1 hot_track 10/16] vfs: add FS hot type support zwu.kernel
2012-11-16 9:51 ` [PATCH v1 hot_track 11/16] vfs: register one shrinker zwu.kernel
2012-11-16 9:51 ` [PATCH v1 hot_track 12/16] vfs: add one ioctl interface zwu.kernel
2012-11-16 9:51 ` [PATCH v1 hot_track 13/16] vfs: add debugfs support zwu.kernel
2012-11-16 9:51 ` [PATCH v1 hot_track 14/16] proc: add two hot_track proc files zwu.kernel
2012-11-16 9:51 ` [PATCH v1 hot_track 15/16] btrfs: add hot tracking support zwu.kernel
2012-11-16 9:51 ` [PATCH v1 hot_track 16/16] vfs: add documentation zwu.kernel
2012-12-06 3:28 ` [PATCH v1 resend hot_track 00/16] vfs: hot data tracking Zhi Yong Wu
2012-12-10 3:30 ` Zhi Yong Wu
2012-12-12 19:50 ` Darrick J. Wong
2012-12-13 12:17 ` Zhi Yong Wu
2012-12-14 2:46 ` Darrick J. Wong
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1353059478-25474-6-git-send-email-zwu.kernel@gmail.com \
--to=zwu.kernel@gmail.com \
--cc=linux-fsdevel@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=viro@zeniv.linux.org.uk \
--cc=wuzhy@linux.vnet.ibm.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.