• Waiman Long's avatar
    intel_idle: Add ibrs_off module parameter to force-disable IBRS · aa1567a7
    Waiman Long authored
    Commit bf5835bc ("intel_idle: Disable IBRS during long idle")
    disables IBRS when the cstate is 6 or lower. However, there are
    some use cases where a customer may want to use max_cstate=1 to
    lower latency. Such use cases will suffer from the performance
    degradation caused by the enabling of IBRS in the sibling idle thread.
    Add a "ibrs_off" module parameter to force disable IBRS and the
    CPUIDLE_FLAG_IRQ_ENABLE flag if set.
    
    In the case of a Skylake server with max_cstate=1, this new ibrs_off
    option will likely increase the IRQ response latency as IRQ will now
    be disabled.
    
    When running SPECjbb2015 with cstates set to C1 on a Skylake system.
    
    First test when the kernel is booted with: "intel_idle.ibrs_off":
    
      max-jOPS = 117828, critical-jOPS = 66047
    
    Then retest when the kernel is booted without the "intel_idle.ibrs_off"
    added:
    
      max-jOPS = 116408, critical-jOPS = 58958
    
    That means booting with "intel_idle.ibrs_off" improves performance by:
    
      max-jOPS:      +1.2%, which could be considered noise range.
      critical-jOPS: +12%,  which is definitely a solid improvement.
    
    The admin-guide/pm/intel_idle.rst file is updated to add a description
    about the new "ibrs_off" module parameter.
    Signed-off-by: default avatarWaiman Long <longman@redhat.com>
    Signed-off-by: default avatarIngo Molnar <mingo@kernel.org>
    Acked-by: default avatarRafael J. Wysocki <rafael.j.wysocki@intel.com>
    Cc: Linus Torvalds <torvalds@linux-foundation.org>
    Link: https://lore.kernel.org/r/20230727184600.26768-5-longman@redhat.com
    aa1567a7
intel_idle.c 56.9 KB