| /* |
| Copyright 2020 Whitestack LLC |
| |
| Licensed under the Apache License, Version 2.0 (the "License"); |
| you may not use this file except in compliance with the License. |
| You may obtain a copy of the License at |
| |
| http://www.apache.org/licenses/LICENSE-2.0 |
| |
| Unless required by applicable law or agreed to in writing, software |
| distributed under the License is distributed on an "AS IS" BASIS, |
| WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or |
| implied. |
| See the License for the specific language governing permissions and |
| limitations under the License. |
| */ |
| |
| module epa { |
| yang-version 1.1; |
| namespace "urn:etsi:osm:yang:augments:epa"; |
| prefix "epa"; |
| |
| import etsi-nfv-vnfd { |
| prefix vnfd; |
| } |
| |
| grouping allocation-properties { |
| leaf limit { |
| description |
| "Defines the maximum allocation. The value 0 indicates that usage is not limited. |
| This parameter ensures that the instance never uses more than the defined amount of resource."; |
| type uint64; |
| } |
| |
| leaf reserve { |
| description |
| "Defines the guaranteed minimum reservation. |
| If needed, the machine will definitely get allocated the reserved amount of resources."; |
| type uint64; |
| } |
| |
| leaf shares { |
| description |
| "Number of shares allocated. |
| Specifies the proportional weighted share for the domain. |
| If this element is omitted, the service defaults to the OS provided defaults"; |
| type uint64; |
| } |
| } |
| |
| grouping extended-mem-quota { |
| container mem-quota { |
| description |
| "Memory quota describes the memory resource allocation policy. |
| Limit and Reserve values are defined in MB"; |
| uses allocation-properties; |
| } |
| } |
| |
| grouping extended-vif-quota { |
| container vif-quota { |
| description |
| "Virtual interfaces quota describes the virtual interface bandwidth resource allocation policy. |
| Limit and Reserve values are defined in Mbps"; |
| uses allocation-properties; |
| } |
| } |
| |
| grouping extended-disk-io-quota { |
| container disk-io-quota { |
| description |
| "Disk IO quota describes the disk IO operations resource allocation policy. |
| Limit and Reserve values are defined in IOPS"; |
| uses allocation-properties; |
| } |
| } |
| |
| grouping extended-cpu-quota { |
| container cpu-quota { |
| description |
| "CPU quota describes the CPU resource allocation policy. |
| Limit and Reserve values are defined in MHz"; |
| uses allocation-properties; |
| } |
| } |
| |
| grouping extended-cpu-policy { |
| leaf thread-policy { |
| description |
| "CPU thread pinning policy describes how to |
| place the guest CPUs when the host supports |
| hyper threads: |
| REQUIRE : Each vCPU is allocated on thread siblings |
| of the same core. |
| ISOLATE : Places each vCPU on a different core, |
| and places no vCPUs from a different |
| guest on the same core. |
| PREFER : Attempts to place vCPUs on threads |
| of the same core."; |
| type enumeration { |
| enum REQUIRE; |
| enum ISOLATE; |
| enum PREFER; |
| } |
| } |
| } |
| |
| grouping extended-mempage-size { |
| leaf mempage-size { |
| description |
| "Memory page allocation size. If a VM requires |
| hugepages, it should choose LARGE or SIZE_2MB |
| or SIZE_1GB. If the VM prefers hugepages it |
| should choose PREFER_LARGE. |
| LARGE : Require hugepages (either 2MB or 1GB) |
| SMALL : Doesn't require hugepages |
| SIZE_2MB : Requires 2MB hugepages |
| SIZE_1GB : Requires 1GB hugepages |
| PREFER_LARGE : Application prefers hugepages"; |
| type enumeration { |
| enum LARGE; |
| enum SMALL; |
| enum SIZE_2MB; |
| enum SIZE_1GB; |
| enum PREFER_LARGE; |
| } |
| } |
| } |
| grouping extended-numa { |
| container numa-node-policy { |
| description |
| "This policy defines NUMA topology of the |
| guest. Specifically identifies if the guest |
| should be run on a host with one NUMA |
| node or multiple NUMA nodes. As an example |
| a guest might need 8 VCPUs and 4 GB of |
| memory. However, it might need the VCPUs |
| and memory distributed across multiple |
| NUMA nodes. In this scenario, NUMA node |
| 1 could run with 6 VCPUs and 3GB, and |
| NUMA node 2 could run with 2 VCPUs and |
| 1GB."; |
| |
| leaf node-cnt { |
| description |
| "The number of NUMA nodes to expose to the VM."; |
| type uint16; |
| } |
| |
| leaf mem-policy { |
| description |
| "This policy specifies how the memory should |
| be allocated in a multi-node scenario. |
| STRICT : The memory must be allocated |
| strictly from the memory attached |
| to the NUMA node. |
| PREFERRED : The memory should be allocated |
| preferentially from the memory |
| attached to the NUMA node"; |
| type enumeration { |
| enum STRICT; |
| enum PREFERRED; |
| } |
| } |
| |
| list node { |
| key id; |
| leaf id { |
| description |
| "NUMA node identification. Typically |
| it's 0 or 1"; |
| type uint64; |
| } |
| |
| list vcpu { |
| key "id"; |
| description |
| "List of VCPUs to allocate on |
| this NUMA node."; |
| leaf id { |
| type uint64; |
| description |
| "List of VCPUs ids to allocate on |
| this NUMA node"; |
| } |
| } |
| |
| leaf memory-mb { |
| description |
| "Memory size expressed in MB |
| for this NUMA node."; |
| type uint64; |
| } |
| |
| choice om-numa-type { |
| description |
| "OpenMANO Numa type selection"; |
| |
| case cores { |
| leaf num-cores { |
| type uint8; |
| } |
| } |
| |
| case paired-threads { |
| container paired-threads { |
| leaf num-paired-threads { |
| type uint8; |
| } |
| |
| list paired-thread-ids { |
| description |
| "List of thread pairs to use in case of paired-thread NUMA"; |
| max-elements 16; |
| key thread-a; |
| |
| leaf thread-a { |
| type uint8; |
| } |
| |
| leaf thread-b { |
| type uint8; |
| } |
| } |
| } |
| } |
| case threads { |
| leaf num-threads { |
| type uint8; |
| } |
| } |
| } |
| } |
| } |
| } |
| |
| augment "/vnfd:vnfd/vnfd:virtual-compute-desc/vnfd:virtual-memory" { |
| uses extended-numa; |
| uses extended-mempage-size; |
| uses extended-mem-quota; |
| } |
| |
| augment "/vnfd:vnfd/vnfd:virtual-compute-desc/vnfd:virtual-cpu/vnfd:pinning" { |
| uses extended-cpu-policy; |
| } |
| |
| augment "/vnfd:vnfd/vnfd:virtual-compute-desc/vnfd:virtual-cpu" { |
| uses extended-cpu-quota; |
| } |
| |
| augment "/vnfd:vnfd/vnfd:virtual-storage-desc" { |
| uses extended-disk-io-quota; |
| } |
| |
| augment "/vnfd:vnfd/vnfd:vdu/vnfd:int-cpd/vnfd:virtual-network-interface-requirement" { |
| uses extended-vif-quota; |
| } |
| } |