From: Eric Dumazet <dada1@cosmosbay.com>
To: Andrew Morton <akpm@linux-foundation.org>
Cc: linux-kernel@vger.kernel.org
Subject: [PATCH] : Optimizes timespec_trunc()
Date: Sat, 03 Mar 2007 00:16:56 +0100 [thread overview]
Message-ID: <45E8B068.70500@cosmosbay.com> (raw)
In-Reply-To: <20070302142256.0127f5ac.akpm@linux-foundation.org>
[-- Attachment #1: Type: text/plain, Size: 872 bytes --]
The first thing done by timespec_trunc() is :
if (gran <= jiffies_to_usecs(1) * 1000)
This should really be a test against a constant known at compile time.
Alas, it isnt. jiffies_to_usec() was unilined so C compiler emits a function
call and a multiply to compute : a CONSTANT.
mov $0x1,%edi
mov %rbx,0xffffffffffffffe8(%rbp)
mov %r12,0xfffffffffffffff0(%rbp)
mov %edx,%ebx
mov %rsi,0xffffffffffffffc8(%rbp)
mov %rsi,%r12
callq ffffffff80232010 <jiffies_to_usecs>
imul $0x3e8,%eax,%eax
cmp %ebx,%eax
This patch reorders kernel/time.c a bit so that jiffies_to_usecs() is defined
before timespec_trunc() so that compiler now generates :
cmp $0x3d0900,%edx (HZ=250 on my machine)
This gives a better code (timespec_trunc() becoming a leaf function), and
shorter kernel size as well.
Signed-off-by: Eric Dumazet <dada1@cosmosbay.com>
[-- Attachment #2: time.patch --]
[-- Type: text/plain, Size: 2100 bytes --]
diff --git a/kernel/time.c b/kernel/time.c
index c6c80ea..a0cf037 100644
--- a/kernel/time.c
+++ b/kernel/time.c
@@ -247,6 +247,36 @@ struct timespec current_fs_time(struct s
}
EXPORT_SYMBOL(current_fs_time);
+/*
+ * Convert jiffies to milliseconds and back.
+ *
+ * Avoid unnecessary multiplications/divisions in the
+ * two most common HZ cases:
+ */
+unsigned int inline jiffies_to_msecs(const unsigned long j)
+{
+#if HZ <= MSEC_PER_SEC && !(MSEC_PER_SEC % HZ)
+ return (MSEC_PER_SEC / HZ) * j;
+#elif HZ > MSEC_PER_SEC && !(HZ % MSEC_PER_SEC)
+ return (j + (HZ / MSEC_PER_SEC) - 1)/(HZ / MSEC_PER_SEC);
+#else
+ return (j * MSEC_PER_SEC) / HZ;
+#endif
+}
+EXPORT_SYMBOL(jiffies_to_msecs);
+
+unsigned int inline jiffies_to_usecs(const unsigned long j)
+{
+#if HZ <= USEC_PER_SEC && !(USEC_PER_SEC % HZ)
+ return (USEC_PER_SEC / HZ) * j;
+#elif HZ > USEC_PER_SEC && !(HZ % USEC_PER_SEC)
+ return (j + (HZ / USEC_PER_SEC) - 1)/(HZ / USEC_PER_SEC);
+#else
+ return (j * USEC_PER_SEC) / HZ;
+#endif
+}
+EXPORT_SYMBOL(jiffies_to_usecs);
+
/**
* timespec_trunc - Truncate timespec to a granularity
* @t: Timespec
@@ -471,36 +501,6 @@ struct timeval ns_to_timeval(const s64 n
}
/*
- * Convert jiffies to milliseconds and back.
- *
- * Avoid unnecessary multiplications/divisions in the
- * two most common HZ cases:
- */
-unsigned int jiffies_to_msecs(const unsigned long j)
-{
-#if HZ <= MSEC_PER_SEC && !(MSEC_PER_SEC % HZ)
- return (MSEC_PER_SEC / HZ) * j;
-#elif HZ > MSEC_PER_SEC && !(HZ % MSEC_PER_SEC)
- return (j + (HZ / MSEC_PER_SEC) - 1)/(HZ / MSEC_PER_SEC);
-#else
- return (j * MSEC_PER_SEC) / HZ;
-#endif
-}
-EXPORT_SYMBOL(jiffies_to_msecs);
-
-unsigned int jiffies_to_usecs(const unsigned long j)
-{
-#if HZ <= USEC_PER_SEC && !(USEC_PER_SEC % HZ)
- return (USEC_PER_SEC / HZ) * j;
-#elif HZ > USEC_PER_SEC && !(HZ % USEC_PER_SEC)
- return (j + (HZ / USEC_PER_SEC) - 1)/(HZ / USEC_PER_SEC);
-#else
- return (j * USEC_PER_SEC) / HZ;
-#endif
-}
-EXPORT_SYMBOL(jiffies_to_usecs);
-
-/*
* When we convert to jiffies then we interpret incoming values
* the following way:
*
next prev parent reply other threads:[~2007-03-02 23:17 UTC|newest]
Thread overview: 104+ messages / expand[flat|nested] mbox.gz Atom feed top
2007-03-01 10:12 The performance and behaviour of the anti-fragmentation related patches Mel Gorman
2007-03-02 1:52 ` Bill Irwin
2007-03-02 10:38 ` Mel Gorman
2007-03-02 16:31 ` Joel Schopp
2007-03-02 21:37 ` Bill Irwin
[not found] ` <20070301160915.6da876c5.akpm@linux-foundation.org>
2007-03-02 1:39 ` Balbir Singh
2007-03-02 2:34 ` KAMEZAWA Hiroyuki
2007-03-02 3:05 ` Christoph Lameter
2007-03-02 3:57 ` Nick Piggin
2007-03-02 4:06 ` Christoph Lameter
2007-03-02 4:21 ` Nick Piggin
2007-03-02 4:31 ` Christoph Lameter
2007-03-02 5:06 ` Nick Piggin
2007-03-02 5:40 ` Christoph Lameter
2007-03-02 5:49 ` Nick Piggin
2007-03-02 5:53 ` Christoph Lameter
2007-03-02 6:08 ` Nick Piggin
2007-03-02 6:19 ` Christoph Lameter
2007-03-02 6:29 ` Nick Piggin
2007-03-02 6:51 ` Christoph Lameter
2007-03-02 7:03 ` Andrew Morton
2007-03-02 7:19 ` Nick Piggin
2007-03-02 7:44 ` Christoph Lameter
2007-03-02 8:12 ` Nick Piggin
2007-03-02 8:21 ` Christoph Lameter
2007-03-02 8:38 ` Nick Piggin
2007-03-02 17:09 ` Christoph Lameter
2007-03-04 1:26 ` Rik van Riel
2007-03-04 1:51 ` Andrew Morton
2007-03-04 1:58 ` Rik van Riel
2007-03-02 5:50 ` Christoph Lameter
2007-03-02 4:29 ` Andrew Morton
2007-03-02 4:33 ` Christoph Lameter
2007-03-02 4:58 ` Andrew Morton
2007-03-02 4:20 ` Paul Mundt
2007-03-02 13:50 ` Arjan van de Ven
2007-03-02 15:29 ` Rik van Riel
2007-03-02 16:58 ` Andrew Morton
2007-03-02 17:09 ` Mel Gorman
2007-03-02 17:23 ` Christoph Lameter
2007-03-02 17:35 ` Andrew Morton
2007-03-02 17:43 ` Rik van Riel
2007-03-02 18:06 ` Andrew Morton
2007-03-02 18:15 ` Christoph Lameter
2007-03-02 18:23 ` Andrew Morton
2007-03-02 18:23 ` Rik van Riel
2007-03-02 19:31 ` Christoph Lameter
2007-03-02 19:40 ` Rik van Riel
2007-03-02 21:12 ` Bill Irwin
2007-03-02 21:19 ` Rik van Riel
2007-03-02 21:52 ` Andrew Morton
2007-03-02 22:03 ` Rik van Riel
2007-03-02 22:22 ` Andrew Morton
2007-03-02 22:34 ` Rik van Riel
2007-03-02 22:51 ` Martin Bligh
2007-03-02 22:54 ` Rik van Riel
2007-03-02 23:28 ` Martin J. Bligh
2007-03-03 0:24 ` Andrew Morton
2007-03-02 22:52 ` Chuck Ebbert
2007-03-02 22:59 ` Andrew Morton
2007-03-02 23:20 ` Rik van Riel
2007-03-03 1:40 ` William Lee Irwin III
2007-03-03 1:58 ` Andrew Morton
2007-03-03 3:55 ` William Lee Irwin III
2007-03-02 23:16 ` Eric Dumazet [this message]
2007-03-03 0:33 ` William Lee Irwin III
2007-03-03 0:54 ` Andrew Morton
2007-03-03 3:15 ` Christoph Lameter
2007-03-03 4:19 ` William Lee Irwin III
2007-03-03 17:16 ` Martin J. Bligh
2007-03-03 17:50 ` Christoph Lameter
2007-03-02 20:59 ` Bill Irwin
2007-03-02 16:32 ` Mel Gorman
2007-03-02 17:19 ` Christoph Lameter
2007-03-02 17:28 ` Mel Gorman
2007-03-02 17:48 ` Christoph Lameter
2007-03-02 17:59 ` Mel Gorman
2007-03-03 4:54 ` KAMEZAWA Hiroyuki
[not found] ` <Pine.LNX.4.64.0703011642190.12485@woody.linux-foundation.org>
2007-03-02 1:52 ` Balbir Singh
2007-03-02 3:44 ` Linus Torvalds
2007-03-02 3:59 ` Andrew Morton
2007-03-02 5:11 ` Linus Torvalds
2007-03-02 5:50 ` KAMEZAWA Hiroyuki
2007-03-02 6:15 ` Paul Mundt
2007-03-02 17:01 ` Mel Gorman
2007-03-02 16:20 ` Mark Gross
2007-03-02 17:07 ` Andrew Morton
2007-03-02 17:35 ` Mark Gross
2007-03-02 18:02 ` Andrew Morton
2007-03-02 19:02 ` Mark Gross
2007-03-02 17:16 ` Linus Torvalds
2007-03-02 18:45 ` Mark Gross
2007-03-02 19:03 ` Linus Torvalds
2007-03-02 23:58 ` Martin J. Bligh
2007-03-02 4:18 ` Balbir Singh
2007-03-02 5:13 ` Jeremy Fitzhardinge
2007-03-06 4:16 ` Paul Mackerras
2007-03-02 16:58 ` Mel Gorman
2007-03-02 17:05 ` Joel Schopp
2007-03-05 3:21 ` Nick Piggin
2007-03-05 15:20 ` Joel Schopp
2007-03-05 16:01 ` Nick Piggin
2007-03-05 16:45 ` Joel Schopp
2007-05-03 8:49 ` Andy Whitcroft
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=45E8B068.70500@cosmosbay.com \
--to=dada1@cosmosbay.com \
--cc=akpm@linux-foundation.org \
--cc=linux-kernel@vger.kernel.org \
/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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox