Skip to content
Snippets Groups Projects
  1. May 29, 2016
  2. May 19, 2016
  3. May 13, 2016
  4. Mar 22, 2016
    • Alex Bennée's avatar
      cputlb: modernise the debug support · 8526e1f4
      Alex Bennée authored
      
      To avoid cluttering the code with #ifdef legs we wrap up the print
      statements into a tlb_debug() macro. As access to the virtual TLB can
      get quite heavy defining DEBUG_TLB_LOG will ensure all the logs go to
      the qemu_log target of CPU_LOG_MMU instead of stderr. This remains
      compile time optional as these debug statements haven't been considered
      for usefulness for user visible logging.
      
      I've also removed DEBUG_TLB_CHECK which wasn't used.
      
      Signed-off-by: default avatarAlex Bennée <alex.bennee@linaro.org>
      Reviewed-by: default avatarRichard Henderson <rth@twiddle.net>
      Message-Id: <1458052224-9316-11-git-send-email-alex.bennee@linaro.org>
      Signed-off-by: default avatarPaolo Bonzini <pbonzini@redhat.com>
      8526e1f4
  5. Mar 07, 2016
  6. Jan 29, 2016
  7. Jan 21, 2016
  8. Sep 16, 2015
  9. Sep 11, 2015
  10. Aug 25, 2015
  11. Jun 05, 2015
  12. Apr 26, 2015
  13. Feb 16, 2015
  14. Dec 16, 2014
    • Antony Pavlov's avatar
      qemu-log: add log category for MMU info · 339aaf5b
      Antony Pavlov authored
      
      Running barebox on qemu-system-mips* with '-d unimp' overloads
      stderr by very very many mips_cpu_handle_mmu_fault() messages:
      
        mips_cpu_handle_mmu_fault address=b80003fd ret 0 physical 00000000180003fd prot 3
        mips_cpu_handle_mmu_fault address=a0800884 ret 0 physical 0000000000800884 prot 3
        mips_cpu_handle_mmu_fault pc a080cd80 ad b80003fd rw 0 mmu_idx 0
      
      So it's very difficult to find LOG_UNIMP message.
      
      The mips_cpu_handle_mmu_fault() messages appear on enabling ANY
      logging! It's not very handy.
      
      Adding separate log category for *_cpu_handle_mmu_fault()
      logging fixes the problem.
      
      Signed-off-by: default avatarAntony Pavlov <antonynpavlov@gmail.com>
      Acked-by: default avatarAlexander Graf <agraf@suse.de>
      Reviewed-by: default avatarRichard Henderson <rth@twiddle.net>
      Message-id: 1418489298-1184-1-git-send-email-antonynpavlov@gmail.com
      Signed-off-by: default avatarPeter Maydell <peter.maydell@linaro.org>
      339aaf5b
  15. Sep 01, 2014
    • Xin Tong's avatar
      implementing victim TLB for QEMU system emulated TLB · 88e89a57
      Xin Tong authored
      QEMU system mode page table walks are expensive. Taken by running QEMU
      qemu-system-x86_64 system mode on Intel PIN , a TLB miss and walking a
      4-level page tables in guest Linux OS takes ~450 X86 instructions on
      average.
      
      QEMU system mode TLB is implemented using a directly-mapped hashtable.
      This structure suffers from conflict misses. Increasing the
      associativity of the TLB may not be the solution to conflict misses as
      all the ways may have to be walked in serial.
      
      A victim TLB is a TLB used to hold translations evicted from the
      primary TLB upon replacement. The victim TLB lies between the main TLB
      and its refill path. Victim TLB is of greater associativity (fully
      associative in this patch). It takes longer to lookup the victim TLB,
      but its likely better than a full page table walk. The memory
      translation path is changed as follows :
      
      Before Victim TLB:
      1. Inline TLB lookup
      2. Exit code cache on TLB miss.
      3. Check for unaligned, IO accesses
      4. TLB refill.
      5. Do the memory access.
      6. Return to code cache.
      
      After Victim TLB:
      1. Inline TLB lookup
      2. Exit code cache on TLB miss.
      3. Check for unaligned, IO accesses
      4. Victim TLB lookup.
      5. If victim TLB misses, TLB refill
      6. Do the memory access.
      7. Return to code cache
      
      The advantage is that victim TLB can offer more associativity to a
      directly mapped TLB and thus potentially fewer page table walks while
      still keeping the time taken to flush within reasonable limits.
      However, placing a victim TLB before the refill path increase TLB
      refill path as the victim TLB is consulted before the TLB refill. The
      performance results demonstrate that the pros outweigh the cons.
      
      some performance results taken on SPECINT2006 train
      datasets and kernel boot and qemu configure script on an
      Intel(R) Xeon(R) CPU  E5620  @ 2.40GHz Linux machine are shown in the
      Google Doc link below.
      
      https://docs.google.com/spreadsheets/d/1eiItzekZwNQOal_h-5iJmC4tMDi051m9qidi5_nwvH4/edit?usp=sharing
      
      
      
      In summary, victim TLB improves the performance of qemu-system-x86_64 by
      11% on average on SPECINT2006, kernelboot and qemu configscript and with
      highest improvement of in 26% in 456.hmmer. And victim TLB does not result
      in any performance degradation in any of the measured benchmarks. Furthermore,
      the implemented victim TLB is architecture independent and is expected to
      benefit other architectures in QEMU as well.
      
      Although there are measurement fluctuations, the performance
      improvement is very significant and by no means in the range of
      noises.
      
      Signed-off-by: default avatarXin Tong <trent.tong@gmail.com>
      Message-id: 1407202523-23553-1-git-send-email-trent.tong@gmail.com
      Reviewed-by: default avatarPeter Maydell <peter.maydell@linaro.org>
      Signed-off-by: default avatarPeter Maydell <peter.maydell@linaro.org>
      88e89a57
  16. Jun 05, 2014
  17. Mar 13, 2014
  18. Feb 11, 2014
  19. Jan 13, 2014
  20. Dec 23, 2013
Loading