Hi Andi,
On x86-64 one inefficiency that shows up on profiles is the handling of
struct page conversion to/from idx and addresses. This is mostly due to
the fact that struct page is currently 56 bytes on x86-64, so gcc has to
emit a slow division or multiplication to convert. By switching to using
WANT_PAGE_VIRTUAL in asm/page.h, struct page grows to 64 bytes. Address
calculation becomes cheaper because it is a memory load from the already
hot struct page. For netperf, this shows up as a ~150 Mbit/s improvement.
FYI, I also tested with the 64 byte page but no WANT_PAGE_VIRTUAL, but it
wasn't quite as much of an improvement on the P4.
Before:
87380 16384 16384 10.01 9516.38 92.26 92.26 1.588 1.588
87380 16384 16384 10.01 9459.36 70.43 70.43 1.220 1.220
87380 16384 16384 10.00 9509.38 67.55 67.55 1.164 1.164
87380 16384 16384 10.00 9432.95 68.91 68.91 1.197 1.197
87380 16384 16384 10.01 9479.88 69.32 69.32 1.198 1.198
87380 16384 16384 10.01 9466.74 70.37 70.37 1.218 1.218
87380 16384 16384 10.01 9493.93 69.18 69.18 1.194 1.194
87380 16384 16384 10.00 9486.44 71.06 71.06 1.227 1.227
87380 16384 16384 10.01 9477.95 70.67 70.67 1.222 1.222
87380 16384 16384 10.00 9477.33 70.20 70.20 1.214 1.214
After:
87380 16384 16384 10.01 9629.42 92.01 92.01 1.565 1.565
87380 16384 16384 10.01 9641.69 90.16 90.16 1.532 1.532
87380 16384 16384 10.01 9650.40 90.16 90.16 1.531 1.531
87380 16384 16384 10.00 9638.69 90.60 90.60 1.540 1.540
87380 16384 16384 10.01 9667.15 89.36 89.36 1.514 1.514
87380 16384 16384 10.01 9684.13 89.86 89.86 1.520 1.520
87380 16384 16384 10.01 9642.38 90.31 90.31 1.534 1.534
87380 16384 16384 10.00 9669.24 90.90 90.90 1.540 1.540
87380 16384 16384 10.00 9676.82 90.25 90.25 1.528 1.528
87380 16384 16384 10.00 9711.26 90.80 90.80 1.532 1.532
-ben
--
"Time is of no importance, Mr. President, only life is important."
Don't Email: <[EMAIL PROTECTED]>.
Signed-off-by: Benjamin LaHaise <[EMAIL PROTECTED]>
diff --git a/include/asm-x86_64/page.h b/include/asm-x86_64/page.h
index 615e3e4..2c16c62 100644
--- a/include/asm-x86_64/page.h
+++ b/include/asm-x86_64/page.h
@@ -3,6 +3,8 @@
#include <linux/config.h>
+#define WANT_PAGE_VIRTUAL 1
+
/* PAGE_SHIFT determines the page size */
#define PAGE_SHIFT 12
#ifdef __ASSEMBLY__
-
To unsubscribe from this list: send the line "unsubscribe netdev" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at http://vger.kernel.org/majordomo-info.html