• Babu Moger's avatar
    KVM: x86: Expose Predictive Store Forwarding Disable · b73a5432
    Babu Moger authored
    Predictive Store Forwarding: AMD Zen3 processors feature a new
    technology called Predictive Store Forwarding (PSF).
    
    PSF is a hardware-based micro-architectural optimization designed
    to improve the performance of code execution by predicting address
    dependencies between loads and stores.
    
    How PSF works:
    
    It is very common for a CPU to execute a load instruction to an address
    that was recently written by a store. Modern CPUs implement a technique
    known as Store-To-Load-Forwarding (STLF) to improve performance in such
    cases. With STLF, data from the store is forwarded directly to the load
    without having to wait for it to be written to memory. In a typical CPU,
    STLF occurs after the address of both the load and store are calculated
    and determined to match.
    
    PSF expands on this by speculating on the relationship between loads and
    stores without waiting for the address calculation to complete. With PSF,
    the CPU learns over time the relationship between loads and stores. If
    STLF typically occurs between a particular store and load, the CPU will
    remember this.
    
    In typical code, PSF provides a performance benefit by speculating on
    the load result and allowing later instructions to begin execution
    sooner than they otherwise would be able to.
    
    The details of security analysis of AMD predictive store forwarding is
    documented here.
    https://www.amd.com/system/files/documents/security-analysis-predictive-store-forwarding.pdf
    
    Predictive Store Forwarding controls:
    There are two hardware control bits which influence the PSF feature:
    - MSR 48h bit 2 – Speculative Store Bypass (SSBD)
    - MSR 48h bit 7 – Predictive Store Forwarding Disable (PSFD)
    
    The PSF feature is disabled if either of these bits are set.  These bits
    are controllable on a per-thread basis in an SMT system. By default, both
    SSBD and PSFD are 0 meaning that the speculation features are enabled.
    
    While the SSBD bit disables PSF and speculative store bypass, PSFD only
    disables PSF.
    
    PSFD may be desirable for software which is concerned with the
    speculative behavior of PSF but desires a smaller performance impact than
    setting SSBD.
    
    Support for PSFD is indicated in CPUID Fn8000_0008 EBX[28].
    All processors that support PSF will also support PSFD.
    
    Linux kernel does not have the interface to enable/disable PSFD yet. Plan
    here is to expose the PSFD technology to KVM so that the guest kernel can
    make use of it if they wish to.
    Signed-off-by: default avatarBabu Moger <Babu.Moger@amd.com>
    Message-Id: <163244601049.30292.5855870305350227855.stgit@bmoger-ubuntu>
    [Keep feature private to KVM, as requested by Borislav Petkov. - Paolo]
    Signed-off-by: default avatarPaolo Bonzini <pbonzini@redhat.com>
    b73a5432
cpuid.c 33.5 KB