All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH 00/16] Remove hash page table slot tracking from linux PTE
@ 2017-10-27  4:08 Aneesh Kumar K.V
  2017-10-27  4:08 ` [PATCH 01/16] powerpc/mm/hash: Remove the superfluous bitwise operation when find hpte group Aneesh Kumar K.V
                   ` (16 more replies)
  0 siblings, 17 replies; 31+ messages in thread
From: Aneesh Kumar K.V @ 2017-10-27  4:08 UTC (permalink / raw)
  To: benh, paulus, mpe; +Cc: linuxppc-dev, Aneesh Kumar K.V

Hi,

With hash translation mode we always tracked the hash pte slot details in linux page table.
This occupied space in the linux page table and also limitted our ability to support
linux features that require additional PTE bits. This series attempt to lift this
limitation by not tracking slot number in linux page table. We still track slot details
w.r.t Transparent Hugepage entries because an invalidate there requires us to go through
all the 256 hash pte slots. So tracking whether hash page table entry is valid helps us in
avoiding a lot of hcalls there. With THP entries we don't keep slot details in the primary
linux page table entry but in the second half of page table. Hence tracking slot details
for THP doesn't take up space in PTE.

Even though we don't track slot, for removing/updating hash page table entry, PAPR hcalls expect
hash page table slot details. On pseries we find slot using H_READ hcall using H_READ_4 flags.
This implies an additional 2 hcalls in the updatepp and remove paths. The patch series also
attempt to limit the impact of this by adding new hcalls that does remove/update of hash page table
entry using hash value instead of hash page table slot.

Below is the performance numbers observed when running a workload that does the below sequence

for(5000) {
mmap(128M)
touch every page of 2048 page
munmap()
}

The test is run with address randomization off, swap disabled in both host and guest.


|------------+----------+---------------+--------------------------+-----------------------|
| iterations | platform | without patch | With series and no hcall | With series and hcall |
|------------+----------+---------------+--------------------------+-----------------------|
|          1 | powernv  |               |                50.818343 |                       |
|          2 | powernv  |               |                50.744123 |                       |
|          3 | powernv  |               |                50.721603 |                       |
|          4 | powernv  |               |                50.739922 |                       |
|          5 | powernv  |               |                50.638555 |                       |
|          1 | powernv  |     51.388249 |                          |                       |
|          2 | powernv  |     51.789701 |                          |                       |
|          3 | powernv  |     52.240394 |                          |                       |
|          4 | powernv  |     51.432255 |                          |                       |
|          5 | powernv  |     51.392947 |                          |                       |
|------------+----------+---------------+--------------------------+-----------------------|
|          1 | pseries  |               |                          |            123.154394 |
|          2 | pseries  |               |                          |            122.253956 |
|          3 | pseries  |               |                          |            117.666344 |
|          4 | pseries  |               |                          |            117.681479 |
|          5 | pseries  |               |                          |            117.735808 |
|          1 | pseries  |               |               119.424940 |                       |
|          2 | pseries  |               |               117.663078 |                       |
|          3 | pseries  |               |               118.345584 |                       |
|          4 | pseries  |               |               119.620934 |                       |
|          5 | pseries  |               |               119.463185 |                       |
|          1 | pseries  |    122.810867 |                          |                       |
|          2 | pseries  |    115.760801 |                          |                       |
|          3 | pseries  |    115.257030 |                          |                       |
|          4 | pseries  |    116.617884 |                          |                       |
|          5 | pseries  |    117.247036 |                          |                       |
|------------+----------+---------------+--------------------------+-----------------------|

-aneesh

Aneesh Kumar K.V (16):
  powerpc/mm/hash: Remove the superfluous bitwise operation when find
    hpte group
  powerpc/mm: Update native_hpte_find to return hash pte
  powerpc/pseries: Update hpte find helper to take hash value
  powerpc/mm: Add hash invalidate callback
  powerpc/mm: use hash_invalidate for __kernel_map_pages()
  powerpc/mm: Switch flush_hash_range to not use slot
  powerpc/mm: Add hash updatepp callback
  powerpc/mm/hash: Don't track hash pte slot number in linux page table.
  powerpc/mm: Add new firmware feature HASH API
  powerpc/kvm/hash: Implement HASH_REMOVE hcall
  powerpc/kvm/hash: Implement HASH_PROTECT hcall
  powerpc/kvm/hash: Implement HASH_BULK_REMOVE hcall
  powerpc/mm/pseries: Use HASH_PROTECT hcall in guest
  powerpc/mm/pseries: Use HASH_REMOVE hcall in guest
  powerpc/mm/pseries: Move slot based bulk remove to helper
  powerpc/mm/pseries: Use HASH_BULK_REMOVE hcall in guest

 arch/powerpc/include/asm/book3s/64/hash-4k.h       |  16 +-
 arch/powerpc/include/asm/book3s/64/hash-64k.h      |  44 +--
 arch/powerpc/include/asm/book3s/64/hash.h          |   5 +-
 arch/powerpc/include/asm/book3s/64/mmu-hash.h      |  12 +
 arch/powerpc/include/asm/book3s/64/pgtable.h       |  26 --
 arch/powerpc/include/asm/book3s/64/tlbflush-hash.h |   3 +-
 arch/powerpc/include/asm/firmware.h                |   3 +-
 arch/powerpc/include/asm/hvcall.h                  |   5 +-
 arch/powerpc/include/asm/pgtable-be-types.h        |  10 -
 arch/powerpc/include/asm/pgtable-types.h           |   9 -
 arch/powerpc/include/asm/plpar_wrappers.h          |  23 ++
 arch/powerpc/kvm/book3s_hv.c                       |   3 +
 arch/powerpc/kvm/book3s_hv_rm_mmu.c                | 297 ++++++++++++++++++---
 arch/powerpc/kvm/book3s_hv_rmhandlers.S            |   4 +
 arch/powerpc/kvm/powerpc.c                         |   4 +
 arch/powerpc/mm/dump_hashpagetable.c               |   2 +-
 arch/powerpc/mm/dump_linuxpagetables.c             |  10 -
 arch/powerpc/mm/hash64_4k.c                        |  17 +-
 arch/powerpc/mm/hash64_64k.c                       | 124 +++------
 arch/powerpc/mm/hash_native_64.c                   | 175 ++++++++----
 arch/powerpc/mm/hash_utils_64.c                    |  75 ++----
 arch/powerpc/mm/hugepage-hash64.c                  |   9 +-
 arch/powerpc/mm/hugetlbpage-hash64.c               |  13 +-
 arch/powerpc/mm/tlb_hash64.c                       |   9 +-
 arch/powerpc/platforms/ps3/htab.c                  |  88 ++++++
 arch/powerpc/platforms/pseries/firmware.c          |   1 +
 arch/powerpc/platforms/pseries/lpar.c              | 196 +++++++++++---
 include/uapi/linux/kvm.h                           |   1 +
 28 files changed, 760 insertions(+), 424 deletions(-)

-- 
2.13.6

^ permalink raw reply	[flat|nested] 31+ messages in thread

end of thread, other threads:[~2017-11-21  8:41 UTC | newest]

Thread overview: 31+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2017-10-27  4:08 [PATCH 00/16] Remove hash page table slot tracking from linux PTE Aneesh Kumar K.V
2017-10-27  4:08 ` [PATCH 01/16] powerpc/mm/hash: Remove the superfluous bitwise operation when find hpte group Aneesh Kumar K.V
2017-10-27  4:08 ` [PATCH 02/16] powerpc/mm: Update native_hpte_find to return hash pte Aneesh Kumar K.V
2017-10-27  4:08 ` [PATCH 03/16] powerpc/pseries: Update hpte find helper to take hash value Aneesh Kumar K.V
2017-10-27  4:08 ` [PATCH 04/16] powerpc/mm: Add hash invalidate callback Aneesh Kumar K.V
2017-10-27  4:08 ` [PATCH 05/16] powerpc/mm: use hash_invalidate for __kernel_map_pages() Aneesh Kumar K.V
2017-10-27  4:08 ` [PATCH 06/16] powerpc/mm: Switch flush_hash_range to not use slot Aneesh Kumar K.V
2017-10-27  4:08 ` [PATCH 07/16] powerpc/mm: Add hash updatepp callback Aneesh Kumar K.V
2017-10-27  4:08 ` [PATCH 08/16] powerpc/mm/hash: Don't track hash pte slot number in linux page table Aneesh Kumar K.V
2017-10-27  4:08 ` [PATCH 09/16] powerpc/mm: Add new firmware feature HASH API Aneesh Kumar K.V
2017-10-27  4:08 ` [PATCH 10/16] powerpc/kvm/hash: Implement HASH_REMOVE hcall Aneesh Kumar K.V
2017-10-27  4:08 ` [PATCH 11/16] powerpc/kvm/hash: Implement HASH_PROTECT hcall Aneesh Kumar K.V
2017-10-27  4:08 ` [PATCH 12/16] powerpc/kvm/hash: Implement HASH_BULK_REMOVE hcall Aneesh Kumar K.V
2017-10-27  4:08 ` [PATCH 13/16] powerpc/mm/pseries: Use HASH_PROTECT hcall in guest Aneesh Kumar K.V
2017-10-27  4:08 ` [PATCH 14/16] powerpc/mm/pseries: Use HASH_REMOVE " Aneesh Kumar K.V
2017-10-27  4:08 ` [PATCH 15/16] powerpc/mm/pseries: Move slot based bulk remove to helper Aneesh Kumar K.V
2017-10-27  4:08 ` [PATCH 16/16] powerpc/mm/pseries: Use HASH_BULK_REMOVE hcall in guest Aneesh Kumar K.V
2017-10-27  4:34 ` [PATCH 00/16] Remove hash page table slot tracking from linux PTE Paul Mackerras
2017-10-27  5:27   ` Aneesh Kumar K.V
2017-10-27  5:41     ` Paul Mackerras
2017-10-30  7:57       ` Aneesh Kumar K.V
2017-10-30 11:49       ` Aneesh Kumar K.V
2017-10-30 13:14         ` Aneesh Kumar K.V
2017-10-30 13:49           ` Aneesh Kumar K.V
2017-11-21  8:41       ` Aneesh Kumar K.V
2017-10-28 22:35     ` Ram Pai
2017-10-29 14:05       ` Aneesh Kumar K.V
2017-10-29 22:04       ` Paul Mackerras
2017-10-30  0:51         ` Ram Pai
2017-11-01  4:46           ` Michael Ellerman
2017-11-01 11:02           ` Paul Mackerras

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.