linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Christoph Lameter <clameter@sgi.com>
To: akpm@osdl.org
Cc: Andy Lutomirski <luto@myrealbox.com>,
	ak@suse.de, nickpiggin@yahoo.com.au,
	linux-kernel@vger.kernel.org
Subject: page fault scalability patch V9: [0/7] overview
Date: Mon, 27 Sep 2004 12:06:33 -0700 (PDT)	[thread overview]
Message-ID: <Pine.LNX.4.58.0409271204180.31769@schroedinger.engr.sgi.com> (raw)
In-Reply-To: <20040923090345.GA6146@wotan.suse.de>

Signed-off-by: Christoph Lameter <clameter@sgi.com>

Changes from V8->V9 of this patch:
- Verify that mm->rss is changed to atomic on all arches
- Fixes to the i386 cmpxchg support. Make it as small as possible
  by using a function instead of inlining.
- Patches against 2.6.9-rc2-bk15

This is a series of patches that increases the scalability of
the page fault handler for SMP. Typical performance increases in the page
fault rate are:

2 CPUs -> 10%
4 CPUs -> 50%
8 CPUs -> 70%

With a high number of CPUs (16..512) we are seeing the page fault rate
roughly doubling.

The performance increase is accomplished by avoiding the use of the
page_table_lock spinlock (but not mm->mmap_sem!) through new atomic
operations on pte's (ptep_xchg, ptep_cmpxchg) and on pmd and pgd's
(pgd_test_and_populate, pmd_test_and_populate).

The page table lock can be avoided in the following situations:

1. An empty pte or pmd entry is populated

This is safe since the swapper may only depopulate them and the
swapper code has been changed to never set a pte to be empty until the
page has been evicted. The population of an empty pte is frequent
if a process touches newly allocated memory.

2. Modifications of flags in a pte entry (write/accessed).

These modifications are done by the CPU or by low level handlers
on various platforms also bypassing the page_table_lock. So this
seems to be safe too.

The patchset is composed of 7 patches:

1/7: Make mm->rss atomic

   The page table lock is used to protect mm->rss and the first patch
   makes rss atomic so that it may be changed without holding the
   page_table_lock.
   Generic atomic variables are only 32 bit under Linux. However, 32 bits
   is sufficient for rss even on a 64 bit machine since rss refers to the
   number of pages allowing still up to 2^(31+12)= 8 terabytes of memory
   to be in use by a single process. A 64 bit atomic would of course be better.

2/7: Avoid page_table_lock in handle_mm_fault

   This patch defers the acquisition of the page_table_lock as much as
   possible and uses atomic operations for allocating anonymous memory.
   These atomic operations are simulated by acquiring the page_table_lock
   for very small time frames if an architecture does not define
   __HAVE_ARCH_ATOMIC_TABLE_OPS. It also changes the swapper so that a
   pte will not be set to empty if a page is in transition to swap.

   If only the first two patches are applied then the time that the page_table_lock
   is held is simply reduced. The lock may then be acquired multiple
   times during a page fault.

   The remaining patches introduce the necessary atomic pte operations to avoid
   the page_table_lock.

3/7: Atomic pte operations for ia64

   This patch adds atomic pte operations to the IA64 platform. The page_table_lock
   will then no longer be acquired for page faults that create pte's for anonymous
   memory.

4/7: Make cmpxchg generally available on i386

   The atomic operations on the page table rely heavily on cmpxchg instructions.
   This patch adds emulations for cmpxchg and cmpxchg8b for old 80386 and 80486
   cpus. The emulations are only included if a kernel is build for these old
   cpus. The emulations are skipped for the real cmpxchg instructions if the kernel
   that is build for 386 or 486 is then run on a more recent cpu.

   This patch may be used independently of the other patches.

5/7: Atomic pte operations for i386

   Add atomic PTE operations for i386. A generally available cmpxchg (last patch)
   must be available for this patch.

6/7: Atomic pte operation for x86_64

   Add atomic pte operations for x86_64. This has not been tested yet since I have
   no x86_64.

7/7: Atomic pte operations for s390

   Add atomic PTE operations for S390. This has also not been tested yet since I have
   no S/390 available. Feedback from the S/390 people seems to indicate though that
   the way it is done is fine.


  reply	other threads:[~2004-09-27 19:07 UTC|newest]

Thread overview: 103+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2004-08-15 13:50 page fault fastpath: Increasing SMP scalability by introducing pte locks? Christoph Lameter
2004-08-15 20:09 ` David S. Miller
2004-08-15 22:58   ` Christoph Lameter
2004-08-15 23:58     ` David S. Miller
2004-08-16  0:11       ` Christoph Lameter
2004-08-16  1:56         ` David S. Miller
2004-08-16  3:29           ` Christoph Lameter
2004-08-16  7:00             ` Ray Bryant
2004-08-16 15:18               ` Christoph Lameter
2004-08-16 16:18                 ` William Lee Irwin III
2004-08-16 14:39             ` William Lee Irwin III
2004-08-17 15:28               ` page fault fastpath patch v2: fix race conditions, stats for 8,32 and 512 cpu SMP Christoph Lameter
2004-08-17 15:37                 ` Christoph Hellwig
2004-08-17 15:51                 ` William Lee Irwin III
2004-08-18 17:55                 ` Hugh Dickins
2004-08-18 20:20                   ` William Lee Irwin III
2004-08-19  1:19                   ` Christoph Lameter
     [not found]               ` <B6E8046E1E28D34EB815A11AC8CA3129027B679F@mtv-atc-605e--n.corp.sgi.com>
2004-08-24  4:43                 ` page fault scalability patch v3: use cmpxchg, make rss atomic Christoph Lameter
2004-08-24  5:49                   ` Christoph Lameter
2004-08-24 12:34                     ` Matthew Wilcox
2004-08-24 14:47                       ` Christoph Lameter
     [not found]                 ` <B6E8046E1E28D34EB815A11AC8CA3129027B67A9@mtv-atc-605e--n.corp.sgi.com>
2004-08-26 15:20                   ` page fault scalability patch v4: reduce page_table_lock use, atomic pmd,pgd handlin Christoph Lameter
     [not found]                   ` <B6E8046E1E28D34EB815A11AC8CA3129027B67B4@mtv-atc-605e--n.corp.sgi.com>
2004-08-27 23:20                     ` page fault scalability patch final : i386 tested, x86_64 support added Christoph Lameter
2004-08-27 23:36                       ` Andi Kleen
2004-08-27 23:43                         ` David S. Miller
2004-08-28  0:19                         ` Christoph Lameter
2004-08-28  0:23                           ` David S. Miller
2004-08-28  0:36                             ` Andrew Morton
2004-08-28  0:40                               ` David S. Miller
2004-08-28  1:05                                 ` Andi Kleen
2004-08-28  1:11                                   ` David S. Miller
2004-08-28  1:17                                     ` Andi Kleen
2004-08-28  1:02                               ` Andi Kleen
2004-08-28  1:39                                 ` Andrew Morton
2004-08-28  2:08                                   ` Paul Mackerras
2004-08-28  3:32                                     ` Christoph Lameter
2004-08-28  3:42                                       ` Andrew Morton
2004-08-28  4:24                                         ` Christoph Lameter
2004-08-28  5:39                                           ` Andrew Morton
2004-08-28  5:58                                             ` Christoph Lameter
2004-08-28  6:03                                               ` William Lee Irwin III
2004-08-28  6:06                                               ` Andrew Morton
2004-08-30 17:02                                                 ` Herbert Poetzl
2004-08-30 17:05                                                   ` Andi Kleen
2004-08-28 13:19                                             ` Andi Kleen
2004-08-28 15:48                                             ` Matt Mackall
2004-09-01  4:13                                             ` Benjamin Herrenschmidt
2004-09-02 21:26                                               ` Andi Kleen
2004-09-02 21:55                                                 ` David S. Miller
2004-09-01 18:03                                             ` Matthew Wilcox
2004-09-01 18:19                                               ` Andrew Morton
2004-09-01 19:06                                                 ` William Lee Irwin III
2004-08-28 21:41                                 ` Daniel Phillips
2004-09-01  4:24                       ` Benjamin Herrenschmidt
2004-09-01  5:22                         ` David S. Miller
2004-09-01 16:43                         ` Christoph Lameter
2004-09-01 23:09                           ` Benjamin Herrenschmidt
     [not found]                             ` <Pine.LNX.4.58.0409012140440.23186@schroedinger.engr.sgi.com>
     [not found]                               ` <20040901215741.3538bbf4.davem@davemloft.net>
2004-09-02  5:18                                 ` William Lee Irwin III
2004-09-09 15:38                                   ` page fault scalability patch: V7 (+fallback for atomic page table ops) Christoph Lameter
2004-09-02 16:24                                 ` page fault scalability patch final : i386 tested, x86_64 support added Christoph Lameter
2004-09-02 20:10                                   ` David S. Miller
2004-09-02 21:02                                     ` Christoph Lameter
2004-09-02 21:07                                       ` David S. Miller
2004-09-18 23:23                                         ` page fault scalability patch V8: [0/7] Description Christoph Lameter
     [not found]                                         ` <B6E8046E1E28D34EB815A11AC8CA312902CD3243@mtv-atc-605e--n.corp.sgi.com>
2004-09-18 23:24                                           ` page fault scalability patch V8: [1/7] make mm->rss atomic Christoph Lameter
2004-09-18 23:26                                           ` page fault scalability patch V8: [2/7] avoid page_table_lock in handle_mm_fault Christoph Lameter
2004-09-19  9:04                                             ` Christoph Hellwig
2004-09-18 23:27                                           ` page fault scalability patch V8: [3/7] atomic pte operations for ia64 Christoph Lameter
2004-09-18 23:28                                           ` page fault scalability patch V8: [4/7] universally available cmpxchg on i386 Christoph Lameter
     [not found]                                             ` <200409191430.37444.vda@port.imtp.ilyichevsk.odessa.ua>
2004-09-19 12:11                                               ` Andi Kleen
2004-09-20 15:45                                               ` Christoph Lameter
     [not found]                                                 ` <200409202043.00580.vda@port.imtp.ilyichevsk.odessa.ua>
2004-09-20 20:49                                                   ` Christoph Lameter
2004-09-20 20:57                                                     ` Andi Kleen
     [not found]                                                       ` <200409211841.25507.vda@port.imtp.ilyichevsk.odessa.ua>
2004-09-21 15:45                                                         ` Andi Kleen
     [not found]                                                           ` <200409212306.38800.vda@port.imtp.ilyichevsk.odessa.ua>
2004-09-21 20:14                                                             ` Andi Kleen
2004-09-23  7:17                                                           ` Andy Lutomirski
2004-09-23  9:03                                                             ` Andi Kleen
2004-09-27 19:06                                                               ` Christoph Lameter [this message]
2004-10-15 19:02                                                                 ` page fault scalability patch V10: [0/7] overview Christoph Lameter
2004-10-15 19:03                                                                   ` page fault scalability patch V10: [1/7] make rss atomic Christoph Lameter
2004-10-15 19:04                                                                   ` page fault scalability patch V10: [2/7] defer/omit taking page_table_lock Christoph Lameter
2004-10-15 20:00                                                                     ` Marcelo Tosatti
2004-10-18 15:59                                                                       ` Christoph Lameter
2004-10-19  5:25                                                                       ` [revised] " Christoph Lameter
2004-10-15 19:05                                                                   ` page fault scalability patch V10: [3/7] IA64 atomic pte operations Christoph Lameter
2004-10-15 19:06                                                                   ` page fault scalability patch V10: [4/7] cmpxchg for 386 and 486 Christoph Lameter
2004-10-15 19:06                                                                   ` page fault scalability patch V10: [5/7] i386 atomic pte operations Christoph Lameter
2004-10-15 19:07                                                                   ` page fault scalability patch V10: [6/7] x86_64 " Christoph Lameter
2004-10-15 19:08                                                                   ` page fault scalability patch V10: [7/7] s/390 " Christoph Lameter
     [not found]                                                               ` <B6E8046E1E28D34EB815A11AC8CA312902CD3282@mtv-atc-605e--n.corp.sgi.com>
2004-09-27 19:07                                                                 ` page fault scalability patch V9: [1/7] make mm->rss atomic Christoph Lameter
2004-09-27 19:08                                                                 ` page fault scalability patch V9: [2/7] defer/remove page_table_lock Christoph Lameter
2004-09-27 19:10                                                                 ` page fault scalability patch V9: [3/7] atomic pte operatios for ia64 Christoph Lameter
2004-09-27 19:10                                                                 ` page fault scalability patch V9: [4/7] generally available cmpxchg on i386 Christoph Lameter
2004-09-27 19:11                                                                 ` page fault scalability patch V9: [5/7] atomic pte operations for i386 Christoph Lameter
2004-09-27 19:12                                                                 ` page fault scalability patch V9: [6/7] atomic pte operations for x86_64 Christoph Lameter
2004-09-27 19:13                                                                 ` page fault scalability patch V9: [7/7] atomic pte operatiosn for s390 Christoph Lameter
2004-09-18 23:29                                           ` page fault scalability patch V8: [5/7] atomic pte operations for i386 Christoph Lameter
2004-09-18 23:30                                           ` page fault scalability patch V8: [6/7] atomic pte operations for x86_64 Christoph Lameter
2004-09-18 23:31                                           ` page fault scalability patch V8: [7/7] atomic pte operations for s390 Christoph Lameter
     [not found]                                             ` <200409191435.09445.vda@port.imtp.ilyichevsk.odessa.ua>
2004-09-20 15:44                                               ` Christoph Lameter
2004-08-15 22:38 ` page fault fastpath: Increasing SMP scalability by introducing pte locks? Benjamin Herrenschmidt
2004-08-16 17:28   ` Christoph Lameter
2004-08-17  8:01     ` Benjamin Herrenschmidt

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=Pine.LNX.4.58.0409271204180.31769@schroedinger.engr.sgi.com \
    --to=clameter@sgi.com \
    --cc=ak@suse.de \
    --cc=akpm@osdl.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=luto@myrealbox.com \
    --cc=nickpiggin@yahoo.com.au \
    /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;
as well as URLs for NNTP newsgroup(s).