<?xml version="1.0"?>
<!DOCTYPE flagsdescription SYSTEM "http://www.spec.org/dtd/cpuflags2.dtd">

<flagsdescription>

<!--
######################################################################################################
       This platform flags file is supplied as an example. Please document bios/firmware settings in your
       systems that are set to non-default values for performance runs.  

       You MUST change the filename tag just below; at the very least, change "Invalid" to your company name.
######################################################################################################
-->

<filename>Tyrone-Platform-Settings-V1.2-Genoa-revF</filename>

<title>SPEC CPU2017 Platform Settings for Tyrone Systems</title>

<os_tuning>
<![CDATA[
<dl>

<dt><b>kernel.randomize_va_space</b> (ASLR)</dt>
  <dd>
    This setting can be used to select the type of process address space randomization. 
    Defaults differ based on whether the architecture supports ASLR, whether the kernel 
    was built with the CONFIG_COMPAT_BRK option or not, or the kernel boot options used.<br />
    Possible settings:
    <ul>
      <li>0: Turn process address space randomization off.</li>
      <li>1: Randomize addresses of mmap base, stack, and VDSO pages.</li>
      <li>2: Additionally randomize the heap. (This is probably the default.)</li>
    </ul>
    Disabling ASLR can make process execution more deterministic and runtimes more consistent.
    For more information see the <tt>randomize_va_space</tt> entry in the
    <a href="https://www.kernel.org/doc/Documentation/sysctl/kernel.txt">Linux sysctl documentation</a>.
  </dd>

  <dt><b>Transparent Hugepages (THP)</b></dt>
  <dd>
    THP is an abstraction layer that automates most aspects of creating, managing,
    and using huge pages. It is designed to hide much of the complexity in using
    huge pages from system administrators and developers.  Huge pages
    increase the memory page size from 4 kilobytes to 2 megabytes. This provides
    significant performance advantages on systems with highly contended resources
    and large memory workloads. If memory utilization is too high or memory is badly
    fragmented which prevents hugepages being allocated, the kernel will assign
    smaller 4k pages instead. Most recent Linux OS releases have THP enabled by default.<br />
    THP usage is controlled by the sysfs setting <tt>/sys/kernel/mm/transparent_hugepage/enabled</tt>.
    Possible values:
    <ul>
      <li>never: entirely disable THP usage.</li>
      <li>madvise: enable THP usage only inside regions marked MADV_HUGEPAGE using madvise(3).</li>
      <li>always: enable THP usage system-wide. This is the default.</li>
    </ul>
    THP creation is controlled by the sysfs setting <tt>/sys/kernel/mm/transparent_hugepage/defrag</tt>.
    Possible values:
    <ul>
      <li>never: if no THP are available to satisfy a request, do not attempt to make any.</li>
      <li>defer: an allocation requesting THP when none are available get normal pages while requesting THP creation in the background.</li>
      <li>defer+madvise: acts like "always", but only for allocations in regions marked MADV_HUGEPAGE using madvise(3); for all other regions it's like "defer".</li>
      <li>madvise: acts like "always", but only for allocations in regions marked MADV_HUGEPAGE using madvise(3).  This is the default.</li>
      <li>always: an allocation requesting THP when none are available will stall until some are made.</li>
    </ul>
    An application that "always" requests THP often can benefit from waiting for an allocation until those huge pages can be assembled.<br/>
    For more information see the <a href="https://www.kernel.org/doc/Documentation/vm/transhuge.txt">Linux transparent hugepage documentation</a>.
  </dd>

  <dt><b>dirty_ratio</b></dt>
  <dd>
    This is a percentage value of total available memory that can be filled with dirty data before writing the modifications to disk. Set through "sysctl -w vm.dirty_ratio=8".
  </dd>

  <dt><b>swappiness</b></dt>
  <dd>
	This control is used to define how aggressive the kernel will swap memory pages. Increaasing the value causes swapping more frequently. The default value is 60. 
	A value of 1 tells the kernel to only swap processes to disk if absolutely necessary. This can be set through a command like "sysctl -w vm.swappiness=1"
  </dd>
 
  <dt><b>zone_reclaim_mode</b></dt>
  <dd>
	Zone_reclaim_mode allows someone to set more or less aggressive approaches to reclaim memory when a zone runs out of memory. 
	It controls whether memory reclaim is performed on a local NUMA node or other nodes. 
	To tell the kernel to free local node memory rather than grabbing free memory from remote nodes, it can be set through a command like "sysctl -w vm.zone_reclaim_mode=1".
  </dd>

  <dt><b>drop_caches</b></dt>
  <dd>
	Writing this will cause kernel to drop clean caches, as well as reclaimable slab objects like dentries and inodes. Once dropped, their memory becomes free. 
	Set through "sysctl -w vm.drop_caches=3" to free slab objects and pagecache.
  </dd>

<dt><b>CPUFreq scaling governor</b>:</dt>
 <dd>
  <p>Governors are power schemes for the CPU. It is in-kernel pre-configured power schemes for the CPU and allows you to change the clock speed of the CPUs on the fly. On Linux systems can set the govenor for all CPUs through the cpupower utility with the following command:</p>
  <ul>
   <li>"cpupower -c all frequency-set -g governor"</li>
  </ul>
  <p>Below are govenors in the Linux kernel.</p>
  <ul>
   <li><b>performance</b>: Run the CPU at the maximum frequency.</li>
   <li><b>powersave</b>: Run the CPU at the minimum frequency.</li>
   <li><b>userspace</b>: Run the CPU at user specified frequencies.</li>
   <li><b>ondemand</b>: Scales the frequency dynamically according to current load. Jumps to the highest frequency and then possibly back off as the idle time increases.</li>
   <li><b>conservative</b>: Scales the frequency dynamically according to current load. Scales the frequency more gradually than ondemand.</li>
   <li><b>schedutil</b>: Scheduler-driven CPU frequency selection.</li>
  </ul>
 </dd>

<dt><b>tuned-adm</b>:</dt>
 <dd>
  <p>A commandline interface for switching between different tuning profiles available in supported Linux distributions. The distribution provided profiles are located in /usr/lib/tuned and the user defined profiles in /etc/tuned. To set a profile, one can issue the command "tuned-adm profile (profile_name)". Below are details about some relevant profiles. </p>
  <ul>
   <li><b>throughput-performance</b>: For typical throughput performance tuning. Disables power saving mechanisms and enables sysctl settings that improve the throughput performance of disk and network I/O. CPU governor is set to performance and CPU energy performance bias is set to performance. Disk readahead values are increased.</li>
   <li><b>latency-performance</b>: For low latency performance tuning. Disables power saving mechanisms. CPU governor is set to performance and locked to the low C states. CPU energy performance bias to performance.</li>
   <li><b>balanced</b>: Default profile provides balanced power saving and performance. It enables CPU and disk plugins of tuned and makes the conservative governor is active and also sets the CPU energy performance bias to normal. It also enables power saving on audio and graphics card.</li>
   <li><b>powersave</b>: Maximal power saving for whole system. It sets the CPU governor to ondemand governor and energy performance bias to powersave. It also enable power saving on USB, SATA, audio and graphics card.</li>
  </ul>
 </dd>

</dl>
]]>
</os_tuning>

<firmware>
<![CDATA[
<dl>

<dt><b>Determinism Control:</b></dt> 
 <dd>
  This BIOS option allows for choose AGESA determinism control. 
  AGESA is an acronym for "AMD Generic Encapsulated Software Architecture."
  AGESA is a bootstrap protocol by which system devices on AMD64-architecture mainboards are initialized, it responsible for the initialization of the processor cores, memory, and the HyperTransport controller.
  Available settings are:
  <ul>
      <li>Manual: User can customize determinism slider.</li>      

      <li>Auto (Default setting): Use the processor fused determinism control.</li>
  </ul>
 </dd>
 
<dt><b>Determinism Slider:</b></dt>
 <dd>
  This BIOS option allows for AGESA determinism to control performance.
  Available settings are:
  <ul>
      <li>Performance: Provides predictable performance across all processors of the same type.</li>
      
      <li>Power: Maximizes performance within the power limits defined by cTDP and PPT.</li>
      
      <li>Auto (Default setting): Use AGESA default value for deterministic performance control.</li>
  </ul>
 </dd>

<dt><b>Determinism Enable:</b></dt> 
 <dd>
  This BIOS option allows for Enable/Disable AGESA determinism to control performance. 
  AGESA is an acronym for "AMD Generic Encapsulated Software Architecture."
  AGESA is a bootstrap protocol by which system devices on AMD64-architecture mainboards are initialized, it responsible for the initialization of the processor cores, memory, and the HyperTransport controller.
  "Performance determinism" tells the processor to run in a consistent manner which allows consistent repeatability when doing benchmarks or performance testing. 
  The processor will run at the best performance with little deviation allowing repeatable runs. 
  Available settings are:
  <ul>
      <li>Enable Performance Determinism: AGESA will enable 100% deterministic performance control.</li>      

      <li>Disable Performance Determinism: AGESA will not enable deterministic performance control.</li>

      <li>Auto (Default setting): Use processor's default value for deterministic performance control.</li>
  </ul>
 </dd>

<dt><b>cTDP Control:</b></dt> 
 <dd>
  This BIOS option is for "Configurable TDP (cTDP)", it allows user can set customized value for TDP. Available settings are:
  <ul>
	  <li>Auto (Default setting): Use the fused TDP value.</li>
	  
	  <li>Manual: Let user specifies customized TDP value.</li>
  </ul>
 </dd>

<dt><b>cTDP:</b></dt> 
 <dd>
  TDP is an acronym for “Thermal Design Power.” TDP is the recommended target for power used when designing the cooling capacity for a server. 
  EPYC processors are able to control this target power consumption within certain limits. This capability is referred to as “configurable TDP” or "cTDP."
  cTDP can be used to reduce power consumption for greater efficiency, or in some cases, increase power consumption above the default value to provide additional performance.<br/>
 </dd>
 
<dt><b>IOMMU:</b></dt> 
 <dd>
  The I/O Memory Management Unit (IOMMU) extends the AMD64 system architecture by adding support for address translation and system memory access protection on DMA transfers from periph-eral devices.
  IOMMU also helps filter and remap interrupts from peripheral devices.
  Available settings are:
  <ul>
      <li>Disabled: Disable IOMMU support.</li>      

      <li>Enabled: Enable IOMMU support.</li>

      <li>Auto (Default setting): Use default value for IOMMU. The default value is disable.</li>
  </ul>
 </dd> 

<dt><b>Package Power Limit Control:</b></dt> 
 <dd>
 This is a per processor Package Power Limit (PPT) value applicable for all populated processors in the system. 
 This can be set to limit the PPT to a certain value. 
 Available settings are:
  <ul>
	  <li>Auto (Default setting): Use the fused processor PPT value.</li>
	  
	  <li>Manual: Let user specifies customized processor PPT value.</li>
  </ul>
 </dd> 
 
<dt><b>Package Power Limit:</b></dt> 
 <dd>
 Set customize processor Package Power Limit (PPT) value to be used on all populated processors in the system. 
  If set to 240 = Use the 240W PPT ***PPT will be used as the ASIC power limit*** 
 </dd> 

<dt><b>APBDIS:</b></dt> 
 <dd>
  APBDis is an IO Boost disable on uncore.
  For any system user that needs to block these uncore optimizations that are impacting base core clock speed, we are exposing a method to disable this behavior called APBDis. 
  This locks the fabric clock to the non-boosted speeds.
  Available settings are:
  <ul>
      <li>0: Disable APBDIS, locks the fabric clock to the non-boosted speeds.</li>      

      <li>1: Enable APBDIS, unlocks the fabric clock to the boosted speeds.</li>

      <li>Auto (Default setting): Use default value for APBDIS. The default value is 0.</li>
  </ul>
 </dd> 

<dt><b>NUMA Nodes Per Socket:</b></dt> 
 <dd>
  Specifies the number of desired NUMA nodes per socket. 
  This option allows the user to divide the memory that each socket has into a certain number of NUMA memory nodes for optimal memory bandwidth. 
  Available settings are:
  <ul>
      <li>NPS0: It will attempt to interleave the two sockets together.</li>      

      <li>NPS1: Each processor socket will have one NUMA memory node.</li>
	  
	  <li>NPS2: Each processor socket will have two NUMA memory nodes.</li>
	  
      <li>NPS4: Each processor socket will have four NUMA memory nodes.</li>

      <li>Auto (Default setting): Use default value for NUMA nodes per socket. The default value is NPS1.</li>
  </ul>
 </dd> 

<dt><b>SMT Control:</b></dt> 
 <dd>
  This controls enable or disable the logical processor cores on the processor.
  Enable SMT Control can improve overall performance for most workloads.
  For some floating point or HPC workloads may result in highr performance if disable SMT Control.   
  Available settings are:
  <ul>
      <li>Disabled: It will disable all logical cores on the processor.</li>      

      <li>Auto (Default setting): Enable all logical cores on the processor.</li>
  </ul>
 </dd> 

<dt><b>ACPI SRAT L3 cache As NUMA Domain:</b></dt> 
 <dd>
  Controls generation of distance information in the ACPI System Locality Information Table (SLIT) and NUMA 
  proximity domains in the System Resource Affinity Table (SRAT). Enabling this feature can increase performance
  for workloads that are NUMA aware and optimized. 
  Available settings are:
  <ul>
      <li>Disabled: Not seperate each CCX within the processor as a NUMA domain.</li>      
	  <li>Enabled: Each CCX within the processor will be declared as a NUMA domain.</li>
      <li>Auto (Default setting): Use default value. Which is not seperate each CCX as a NUMA domain.</li>
  </ul>
 </dd> 

<dt><b>TSME:</b></dt> 
 <dd>
  This controls enable or disable the Transparent Secure Memory Encryption.
  Enable TSME can improve security by encrypt the data in memory.
  Disable for lower memory latency.   
  Available settings are:
  <ul>
      <li>Disabled: It will disable Transparent Secure Memory Encryption function.</li>
	  <li>Enabled: It will enable Transparent Secure Memory Encryption function.</li>       
      <li>Auto (Default setting): Enable TSME.</li>
  </ul>
 </dd> 

<dt><b>SEV Control:</b></dt> 
 <dd>
  This controls enable or disable the Secure Encrypted Virtualization.
  SEV is an extension of SME that effectively enables a per-virtual machine SME. 
  In other words, SEV enables running encrypted virtual machines in which the code and data of the VM are private to the VM and may only be decrypted within the VM itself.  
  Available settings are:
  <ul>
      <li>Disabled: It will disable Secure Encrypted Virtualization function.</li>
	  <li>Enabled (Default setting): It will enable Secure Encrypted Virtualization function.</li>       
  </ul>
 </dd> 

</dl>

]]>
</firmware>

</flagsdescription>
