All of lore.kernel.org
 help / color / mirror / Atom feed
From: zwu.kernel@gmail.com
To: linux-fsdevel@vger.kernel.org
Cc: linux-kernel@vger.kernel.org, viro@zeniv.linux.org.uk,
	david@fromorbit.com, cmm@us.ibm.com, swhiteho@redhat.com,
	dave@jikos.cz, darrick.wong@oracle.com, andi@firstfloor.org,
	northrup.james@gmail.com, gregkh@linuxfoundation.org,
	linuxram@linux.vnet.ibm.com,
	Zhi Yong Wu <wuzhy@linux.vnet.ibm.com>
Subject: [PATCH v1 hot_track 06/18] vfs: add temp calculation function
Date: Thu,  8 Nov 2012 17:01:13 +0800	[thread overview]
Message-ID: <1352365285-32419-7-git-send-email-zwu.kernel@gmail.com> (raw)
In-Reply-To: <1352365285-32419-1-git-send-email-zwu.kernel@gmail.com>

From: Zhi Yong Wu <wuzhy@linux.vnet.ibm.com>

Signed-off-by: Zhi Yong Wu <wuzhy@linux.vnet.ibm.com>
---
 fs/hot_tracking.c |   74 +++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 74 insertions(+), 0 deletions(-)

diff --git a/fs/hot_tracking.c b/fs/hot_tracking.c
index 7101b73..3fd6255 100644
--- a/fs/hot_tracking.c
+++ b/fs/hot_tracking.c
@@ -25,6 +25,14 @@
 static struct kmem_cache *hot_inode_item_cachep __read_mostly;
 static struct kmem_cache *hot_range_item_cachep __read_mostly;
 
+static u64 hot_raw_shift(u64 counter, u32 bits, bool dir)
+{
+	if (dir)
+		return counter << bits;
+	else
+		return counter >> bits;
+}
+
 /*
  * Initialize the inode tree. Should be called for each new inode
  * access or other user of the hot_inode interface.
@@ -319,6 +327,72 @@ static void hot_freq_data_update(struct hot_freq_data *freq_data, bool write)
 }
 
 /*
+ * hot_temp_calc() is responsible for distilling the six heat
+ * criteria down into a single temperature value for the data,
+ * which is an integer between 0 and HEAT_MAX_VALUE.
+ */
+static u32 hot_temp_calc(struct hot_freq_data *freq_data)
+{
+	u32 result = 0;
+
+	struct timespec ckt = current_kernel_time();
+	u64 cur_time = timespec_to_ns(&ckt);
+
+	u32 nrr_heat = (u32)hot_raw_shift((u64)freq_data->nr_reads,
+					NRR_MULTIPLIER_POWER, true);
+	u32 nrw_heat = (u32)hot_raw_shift((u64)freq_data->nr_writes,
+					NRW_MULTIPLIER_POWER, true);
+
+	u64 ltr_heat =
+	hot_raw_shift((cur_time - timespec_to_ns(&freq_data->last_read_time)),
+			LTR_DIVIDER_POWER, false);
+	u64 ltw_heat =
+	hot_raw_shift((cur_time - timespec_to_ns(&freq_data->last_write_time)),
+			LTW_DIVIDER_POWER, false);
+
+	u64 avr_heat =
+	hot_raw_shift((((u64) -1) - freq_data->avg_delta_reads),
+			AVR_DIVIDER_POWER, false);
+	u64 avw_heat =
+	hot_raw_shift((((u64) -1) - freq_data->avg_delta_writes),
+			AVW_DIVIDER_POWER, false);
+
+	/* ltr_heat is now guaranteed to be u32 safe */
+	if (ltr_heat >= hot_raw_shift((u64) 1, 32, true))
+		ltr_heat = 0;
+	else
+		ltr_heat = hot_raw_shift((u64) 1, 32, true) - ltr_heat;
+
+	/* ltw_heat is now guaranteed to be u32 safe */
+	if (ltw_heat >= hot_raw_shift((u64) 1, 32, true))
+		ltw_heat = 0;
+	else
+		ltw_heat = hot_raw_shift((u64) 1, 32, true) - ltw_heat;
+
+	/* avr_heat is now guaranteed to be u32 safe */
+	if (avr_heat >= hot_raw_shift((u64) 1, 32, true))
+		avr_heat = (u32) -1;
+
+	/* avw_heat is now guaranteed to be u32 safe */
+	if (avw_heat >= hot_raw_shift((u64) 1, 32, true))
+		avw_heat = (u32) -1;
+
+	nrr_heat = (u32)hot_raw_shift((u64)nrr_heat,
+		(3 - NRR_COEFF_POWER), false);
+	nrw_heat = (u32)hot_raw_shift((u64)nrw_heat,
+		(3 - NRW_COEFF_POWER), false);
+	ltr_heat = hot_raw_shift(ltr_heat, (3 - LTR_COEFF_POWER), false);
+	ltw_heat = hot_raw_shift(ltw_heat, (3 - LTW_COEFF_POWER), false);
+	avr_heat = hot_raw_shift(avr_heat, (3 - AVR_COEFF_POWER), false);
+	avw_heat = hot_raw_shift(avw_heat, (3 - AVW_COEFF_POWER), false);
+
+	result = nrr_heat + nrw_heat + (u32) ltr_heat +
+		(u32) ltw_heat + (u32) avr_heat + (u32) avw_heat;
+
+	return result;
+}
+
+/*
  * Initialize inode and range map info.
  */
 static void hot_map_init(struct hot_info *root)
-- 
1.7.6.5

  parent reply	other threads:[~2012-11-08  9:01 UTC|newest]

Thread overview: 19+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2012-11-08  9:01 [PATCH v1 hot_track 00/18] vfs: hot data tracking zwu.kernel
2012-11-08  9:01 ` [PATCH v1 hot_track 01/18] vfs: introduce some data structures zwu.kernel
2012-11-08  9:01 ` [PATCH v1 hot_track 02/18] vfs: add init and cleanup functions zwu.kernel
2012-11-08  9:01 ` [PATCH v1 hot_track 03/18] vfs: add I/O frequency update function zwu.kernel
2012-11-08  9:01 ` [PATCH v1 hot_track 04/18] vfs: add two map info arrays zwu.kernel
2012-11-08  9:01 ` [PATCH v1 hot_track 05/18] vfs: add hooks to enable hot tracking zwu.kernel
2012-11-08  9:01 ` zwu.kernel [this message]
2012-11-08  9:01 ` [PATCH v1 hot_track 07/18] vfs: add map info update function zwu.kernel
2012-11-08  9:01 ` [PATCH v1 hot_track 08/18] vfs: add aging function zwu.kernel
2012-11-08  9:01 ` [PATCH v1 hot_track 09/18] vfs: add one work queue zwu.kernel
2012-11-08  9:01 ` [PATCH v1 hot_track 10/18] vfs: add FS hot type support zwu.kernel
2012-11-08  9:01 ` [PATCH v1 hot_track 11/18] vfs: register one shrinker zwu.kernel
2012-11-08  9:01 ` [PATCH v1 hot_track 12/18] vfs: add one ioctl interface zwu.kernel
2012-11-08  9:01 ` [PATCH v1 hot_track 13/18] vfs: add debugfs support zwu.kernel
2012-11-08  9:01 ` [PATCH v1 hot_track 14/18] procfs: add two hot_track proc files zwu.kernel
2012-11-08  9:01 ` [PATCH v1 hot_track 15/18] btrfs: add hot tracking support zwu.kernel
2012-11-08  9:01 ` [PATCH v1 hot_track 16/18] xfs: " zwu.kernel
2012-11-08  9:01 ` [PATCH v1 hot_track 17/18] ext4: " zwu.kernel
2012-11-08  9:01 ` [PATCH v1 hot_track 18/18] vfs: add documentation zwu.kernel

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=1352365285-32419-7-git-send-email-zwu.kernel@gmail.com \
    --to=zwu.kernel@gmail.com \
    --cc=andi@firstfloor.org \
    --cc=cmm@us.ibm.com \
    --cc=darrick.wong@oracle.com \
    --cc=dave@jikos.cz \
    --cc=david@fromorbit.com \
    --cc=gregkh@linuxfoundation.org \
    --cc=linux-fsdevel@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linuxram@linux.vnet.ibm.com \
    --cc=northrup.james@gmail.com \
    --cc=swhiteho@redhat.com \
    --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.