• Nicholas Piggin's avatar
    powerpc/pseries: Implement CONFIG_PARAVIRT_TIME_ACCOUNTING · 0e8a6313
    Nicholas Piggin authored
    CONFIG_VIRT_CPU_ACCOUNTING_GEN under pseries does not provide stolen
    time accounting unless CONFIG_PARAVIRT_TIME_ACCOUNTING is enabled.
    Implement this using the VPA accumulated wait counters.
    
    Note this will not work on current KVM hosts because KVM does not
    implement the VPA dispatch counters (yet). It could be implemented
    with the dispatch trace log as it is for VIRT_CPU_ACCOUNTING_NATIVE,
    but that is not necessary for the more limited accounting provided
    by PARAVIRT_TIME_ACCOUNTING, and it is more expensive, complex, and
    has downsides like potential log wrap.
    
    From Shrikanth:
    
      [...] it was tested on Power10 [PowerVM] Shared LPAR. system has two
      LPAR. we will call first one LPAR1 and second one as LPAR2. Test was
      carried out in SMT=1. Similar observation was seen in SMT=8 as well.
    
      LPAR config header from each LPAR is below. LPAR1 is twice as big as
      LPAR2. Since Both are sharing the same underlying hardware, work
      stealing will happen when both the LPAR's are contending for the same
      resource.
    
      LPAR1:
      type=Shared mode=Uncapped smt=Off lcpu=40 cpus=40 ent=20.00
      LPAR2:
      type=Shared mode=Uncapped smt=Off lcpu=20 cpus=40 ent=10.00
    
      mpstat was used to check for the utilization. stress-ng has been used
      as the workload. Few cases are tested. when the both LPAR are idle
      there is no steal time. when LPAR1 starts running at 100% which
      consumes all of the physical resource, steal time starts to get
      accounted.  With LPAR1 running at 100% and LPAR2 starts running, steal
      time starts increasing. This is as expected. When the LPAR2 Load is
      increased further, steal time increases further.
    
      Case 1: 0% LPAR1; 0% LPAR2
       %usr  %nice   %sys %iowait  %irq  %soft %steal %guest %gnice  %idle
       0.00   0.00   0.05   0.00   0.00   0.00   0.00   0.00   0.00  99.95
    
      Case 2: 100% LPAR1; 0% LPAR2
       %usr  %nice   %sys %iowait  %irq  %soft %steal %guest %gnice  %idle
      97.68   0.00   0.00   0.00   0.00   0.00   2.32   0.00   0.00   0.00
    
      Case 3: 100% LPAR1; 50% LPAR2
       %usr  %nice   %sys %iowait  %irq  %soft %steal %guest %gnice  %idle
      86.34   0.00   0.10   0.00   0.00   0.03  13.54   0.00   0.00   0.00
    
      Case 4: 100% LPAR1; 100% LPAR2
       %usr  %nice   %sys %iowait  %irq  %soft %steal %guest %gnice  %idle
      78.54   0.00   0.07   0.00   0.00   0.02  21.36   0.00   0.00   0.00
    
      Case 5: 50% LPAR1; 100% LPAR2
       %usr  %nice   %sys %iowait  %irq  %soft %steal %guest %gnice  %idle
      49.37   0.00   0.00   0.00   0.00   0.00   1.17   0.00   0.00  49.47
    
      Patch is accounting for the steal time and basic tests are holding
      good.
    Signed-off-by: default avatarNicholas Piggin <npiggin@gmail.com>
    Tested-by: default avatarShrikanth Hegde <sshegde@linux.ibm.com>
    [mpe: Add SPDX tag to new paravirt_api_clock.h]
    Signed-off-by: default avatarMichael Ellerman <mpe@ellerman.id.au>
    Link: https://lore.kernel.org/r/20220902085316.2071519-3-npiggin@gmail.com
    0e8a6313
paravirt_api_clock.h 65 Bytes