On 07/29/2018 11:12 PM, bing....@intel.com wrote:
> From: Bing Niu <bing....@intel.com>
> 
> This series is to introduce RDT memory bandwidth allocation support by 
> extending
> current virresctrl implementation.
> 
> The Memory Bandwidth Allocation (MBA) feature provides indirect and 
> approximate
> control over memory bandwidth available per-core. This feature provides a 
> method to
> control applications which may be over-utilizing bandwidth relative to their 
> priority
> in environments such as the data-center. The details can be found in Intel's 
> SDM 17.19.7.
> Kernel supports MBA through resctrl file system same as CAT. Each resctrl 
> group have a
> MB parameter to control how much memory bandwidth it can utilize in unit of 
> percentage.
> 
> In this series, MBA is enabled by enhancing existing virresctrl 
> implementation. The
> policy employed for MBA is similar with CAT: The sum of each MBA group's 
> bandwidth
> dose not exceed 100%.
> 
> The enhancement of virresctrl include two main parts:
> 
> Part 1:  Add two new structures virResctrlInfoMemMB and virResctrlAllocMemBW 
> for collecting
>          host system MBA capability and domain memory bandwidth allocation. 
> Those two
>          structures are the extension of existing virResctrlInfo and 
> virResctrlAlloc. With
>          them, virresctrl framework can support MBA and CAT concurrently. 
> Each virResctrlAlloc
>          represent a resource allocation including CAT, or MBA, or CAT&MBA. 
> The policy of MBA is
>          that: total memory bandwidth of each resctrl group, created by 
> virresctrl, does not
>          exceed to 100%.
> 
> Part 2:  On XML part, add new elements to host capabilities query and domain 
> allocation to support
>          memory bandwidth allocation.
>      
> ---------------------------------------------------------------------------------------------
>          For host capabilities XML, new XML format like below example,
>            <host>
>             .....
>              <memory_bandwidth>
>                <node id='0' cpus='0-19'>
>                  <control granularity='10' min ='10' maxAllocs='8'/>
>                </node>
>              </memory_bandwidth>
>            </host>
> 
>            granularity --- memory bandwidth granularity
>            min         --- minimum memory bandwidth allowed
>            maxAllocs   --- maximum concurrent memory bandwidth allocation 
> allowed.
> 
>      
> ---------------------------------------------------------------------------------------------
>          For domain XML, new format as below example
>            <domain type='kvm' id='2'>
>              ......
>              <cputune>
>                ......
>                <shares>1024</shares>
>                <memorytune vcpus='0-1'>
>                  <node id='0' bandwidth='20'/>
>                </memorytune>
>              </cputune>
>              ......
>            </domain>
> 
>           id         --- node where memory bandwidth allocation will happen
>           bandwidth  --- bandwidth allocated in percentage
> 
>      
> ----------------------------------------------------------------------------------------------
> 
> With this extension of the virresctrl, the overall working follow of CAT and 
> MBA is described by below
> picture. XML parser will aggregate MBA and CAT configuration and represents 
> it in one virresctrl object.
> The methods of virresctrl class will manipulate resctrl interface to allocate 
> corresponding resources.
> 
> 
>      <memorytune cpus='0-3'>
>                     +---------+
>                               |    <cachetune vcpus='0-3'>
>         XML                   |           +
>        parser                 +-----------+
>                               |
>                               |
>                  +------------------------------+
>                               |
>                               |
> internal object        +------v--------------+  
> virResctrlAlloc        |   backing object    |
>                        +------+--------------+
>                               |
>                               |
>                  +------------------------------+
>                               |
>                            +--v-------+
>                            |          |
>                            | schemata |
>  /sys/fs/resctrl           | tasks    |
>                            |   .      |
>                            |   .      |
>                            |          |
>                            +----------+
> ---------------------------------------------------------------------
> 
> previous versions and discussion can be found at
>     v1: https://www.redhat.com/archives/libvir-list/2018-July/msg01144.html
> RFC v2: https://www.redhat.com/archives/libvir-list/2018-June/msg01268.html
> RFC v1: https://www.redhat.com/archives/libvir-list/2018-May/msg02101.html
> 
> Changelog:
>        v1 -> this: John's comment: 1. Split calculation of number of memory 
> bandwidth control
>                                       to one patch.
>                                    2. Split virResctrlAllocMemBW relating 
> methods to 5 patch, each
>                                       provides one kind of function, eg: 
> schemata processing, memory
>                                       bandwidth calculation.....
>                                    3. Use resctrl to replace cachetune in 
> domain conf.
>                                    4. Split refactor 
> virDomainCachetuneDefParse into 3 patches. And
>                                       adjust some logic, eg: use %s format 
> error log, renaming
>                                       functions.....
>                                    5. Complete doc description. eg: update 
> cachetune part about vcpus
>                                       overlapping with memorytune, update 
> libvirt version info for memory
>                                       bandwidth control availability.
>                                    6. Some coding style fix.
> 
>        RFC_v2->v1: John's comment: 1. use name MemBW to replace MB for a more 
> clear description.
>                                    2. split rename patch and put refactor 
> function part separately.
>                                    3. split virResctrlInfoMemMB and 
> virResctrlAllocMemBW to different
>                                       patches.
>                                    4. add docs/schemas/*.rng for XML related 
> patches.
>                                    5. some cleanup for coding conventions.
>        RFC_ v1->RFC_v2:
>             Jano's comment: 1. put renaming parts into separated patches.
>                             2. set the initial return value as -1.
>                             3. using full name in structure definition.
>                             4. do not use VIR_CACHE_TYPE_LAST for memory 
> bandwidth allocation formatting.
> 
>             Pavel's comment: 1. add host capabilities XML for memory 
> bandwidth allocation.
>                              2. do not mix use cachetune section in XML for 
> memory bandwidth allocation in
>                                 domain XML. define a dedicated one for memory 
> bandwidth allocation.
> 
> Bing Niu (17):
>   util: Rename some functions of virresctrl
>   util: Refactor virResctrlGetInfo in virresctrl
>   util: Refactor virResctrlAllocFormat of virresctrl
>   util: Add MBA capability information query to resctrl
>   util: Add MBA check to virResctrlInfoGetCache
>   util: Add MBA allocation to virresctrl
>   util: Add MBA schemata parse and format methods
>   util: Add support to calculate MBA utilization
>   util: Introduce virResctrlAllocForeachMemory
>   util: Introduce virResctrlAllocSetMemoryBandwidth
>   conf: Rename cachetune to resctrl
>   conf: Factor out vcpus parsing part from virDomainCachetuneDefParse
>   conf: Factor out vcpus overlapping from virDomainCachetuneDefParse
>   conf: Factor out virDomainResctrlDef update from
>     virDomainCachetuneDefParse
>   conf: Add support for memorytune XML processing for resctrl MBA
>   conf: Add return value check to virResctrlAllocForeachCache
>   conf: Add memory bandwidth allocation capability of host
> 
>  docs/formatdomain.html.in                          |  39 +-
>  docs/schemas/capability.rng                        |  33 ++
>  docs/schemas/domaincommon.rng                      |  17 +
>  src/conf/capabilities.c                            | 107 ++++
>  src/conf/capabilities.h                            |  11 +
>  src/conf/domain_conf.c                             | 428 ++++++++++++---
>  src/conf/domain_conf.h                             |  10 +-
>  src/libvirt_private.syms                           |   6 +-
>  src/qemu/qemu_domain.c                             |   2 +-
>  src/qemu/qemu_process.c                            |  18 +-
>  src/util/virresctrl.c                              | 611 
> +++++++++++++++++++--
>  src/util/virresctrl.h                              |  55 +-
>  .../memorytune-colliding-allocs.xml                |  30 +
>  .../memorytune-colliding-cachetune.xml             |  32 ++
>  tests/genericxml2xmlindata/memorytune.xml          |  33 ++
>  tests/genericxml2xmltest.c                         |   5 +
>  .../linux-resctrl/resctrl/info/MB/bandwidth_gran   |   1 +
>  .../linux-resctrl/resctrl/info/MB/min_bandwidth    |   1 +
>  .../linux-resctrl/resctrl/info/MB/num_closids      |   1 +
>  tests/vircaps2xmldata/vircaps-x86_64-resctrl.xml   |   8 +
>  tests/virresctrldata/resctrl.schemata              |   1 +
>  21 files changed, 1280 insertions(+), 169 deletions(-)
>  create mode 100644 tests/genericxml2xmlindata/memorytune-colliding-allocs.xml
>  create mode 100644 
> tests/genericxml2xmlindata/memorytune-colliding-cachetune.xml
>  create mode 100644 tests/genericxml2xmlindata/memorytune.xml
>  create mode 100644 
> tests/vircaps2xmldata/linux-resctrl/resctrl/info/MB/bandwidth_gran
>  create mode 100644 
> tests/vircaps2xmldata/linux-resctrl/resctrl/info/MB/min_bandwidth
>  create mode 100644 
> tests/vircaps2xmldata/linux-resctrl/resctrl/info/MB/num_closids
> 

Reviewed-by: John Ferlan <jfer...@redhat.com>
(series)

I'll push once the tree is open for 4.7.0 commits unless someone else
chimes in with other major issues that need to be addressed.

John

--
libvir-list mailing list
libvir-list@redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list

Reply via email to