Validate-DCB/Examples
Dan Cuomo 90dad99788
Update Readme.md
2020-03-25 16:08:08 -07:00
..
Additional Samples 2.2 release - sync with Dev Branch 2019-07-13 14:03:26 -07:00
NDKm1-examples.DCB.config.ps1 Commit of v2.1 to Master 2019-05-23 14:22:36 -07:00
NDKm2-examples.DCB.config.ps1 Commit of v2.1 to Master 2019-05-23 14:22:36 -07:00
Readme.md Update Readme.md 2020-03-25 16:08:08 -07:00

Readme.md

Configuration File

This section will help you use or create a configuration file. We recommend that you create a separate configuration file:

  • Per stamp, or cluster
  • If the configuration changes between nodes

Example Configurations

The Converged NIC Guide guides you through the implementation of NDK Mode 1 (Native RDMA) and NDK Mode 2 (Host Virtual NIC RDMA). If your configuration matches those examples exactly, you can use the pre-defined configurations in the examples folder to validate your system.

While your actual environment may not match this configuration exactly, this provides a DIY learning opportunity when coupled with the configuration guide.

To leverage these example configurations, specify the ExampleConfig parameter during initiate.

To specify the NDKm1-examples.DCB.config example file

.\initiate.ps1 -ExampleConfig NDKm1

To specify the NDKm2-examples.DCB.config example file

.\initiate.ps1 -ExampleConfig NDKm2

Additional Samples

The Example Configurations may not meet your exact configuration so we provide some additional samples of commonly seen customer scenarios. The samples in the \examples\additional samples folder show you have to create a configuration file for more complex scenarios. This folder contains the following examples:

FileName Description
Cluster-Single.ps1 Configuration with a single cluster
Cluster-Multi.ps1 Configuration with multiple clusters
Deploy.ps1 Configuration with deployment parameters
UniqueConfigs.ps1 Configuration with nodes containing unique configurations
MultipleVMSwitch.ps1 Configuration containing multiple VMSwitches
ComboModes.ps1 Configuration with Native RDMA and Host Virtual NIC RDMA

Custom Configuration

It is likely that you will need to create a custom configuration. We recommend starting with the example/sample that most closely represents your configuration. Next, use the following guidance to update the configuration.

This section outlines the requirements and possibilities in the configuration file.

$ConfigData

During runtime, a global variable named $ConfigData carries the data from the config file. This variable has two possible sub-keys:

  • AllNodes contains details specific to one or more nodes e.g. NodeNames, RDMA Adapters, VMSwitch configuration, etc.
  • NonNodeData contains data that applies to all nodes

Note: Even if your configuration doesnt change node to node, they should stay in the same structure. Currently only the NetQos settings belong in the NonNodeData.

NonNodeData

NonNodeData.NetQos

NetQos policies and traffic classes are defined under the NonNodeData section. Each NetQos policy defined requires the following entries:

  • Name This is the name of the NetQosPolicy and Traffic class expected on systems
  • NetDirectPortMatchCondition or Template
    • RDMA requires the use of the NetDirectPortMatchCondition entry.
    • Template can only be used to specify non-RDMA traffic.
  • PriorityValue8021Action The expected Priority of the NetQos and Traffic Class
  • BandwidthPercentage A reservation for that traffic class
  • Algorithm The expected Algorithm to be used – Currently, the only Algorithm is ETS

Here is an example NetQos configuration. As you can see each policy has its own hashtable of keys and values specified above. This specific example expects the nodes to have three NetQos policies and traffic classes.

The first defined policy is named Cluster which uses the Cluster template, is assigned Priority 5, a Bandwidth Reservation of 1% of the adapter's bandwidth, and uses the ETS Algorithm.

The second policy is named SMB, defines the NetDirectPortMatchCondition (instead of the template) for port 445, a priority of 3, a bandwidth reservation of 60% of the adapter's bandwidth, and uses the ETS Algorithm.

This configuration will check for a configuration on the node like this:

NonNodeData.AzureAutomation

Azure Automation Account information is defined under the NonNodeData section. This subkey is required if specifying the -deploy parameter at runtime. If the AzureAutomation key is specified, the following subkeys are required:

  • ResourceGroupName Specifies the name of the Azure Resource Group that contains the Automation Account for deployment
  • AutomationAccountName Specifies the name of the Automation Account found in the specified resource group for deployment.

In addition, the Role is required under the AllNodes key. For information please see: AllNodes.Role

AllNodes

AllNodes.NodeName

Each node to be tested (SUT) must be defined in the configuration file. Since nodes in a cluster will have the same configuration, you can use PowerShell to simplify the work you need to perform. Each node with the same configuration can be defined using the $Nodes Variable as shown here:

To get a list of nodes from a cluster:

However you generate your list of nodes, they must be comma separated so they can be passed across a pipeline as shown here.

AllNodes.Role

If intending to deploy the configuration file to the SUTs prior to validation, you must provide a the 'Role' parameter (the AzureAutomation key must also be specified). This is an arbitrary string value that is used for associating nodes with a configuration. The configuration in Azure Automation will be named 'NetworkConfig.RoleValue' and therefore this must meet the requirements of an Azure Automation State configuration name. There are no additional requirements for this value.

Any node that will have the same configuration, may contain the same role. For example, all nodes in the same cluster should share the same Role. Or, if multiple clusters will be configured the same (including all settings in the configuration file) you can use the same role.

AllNodes.RDMAEnabledAdapters

Adapters entered in this section are in Native RDMA mode (not attached to a vSwitch) – This section is optional, however there must be at least one adapter defined between this section and AllNodes.VMSwitch.RDMAEnabledAdapters defined later.

⚠️ Do not put RDMAEnabledAdapters in mode 2 (attached to a vSwitch) in this section.

The following options are currently supported:

  • Name - (Required) The name of the adapter. Use Get-NetAdapter to determine the adapter name

  • VLANID - (Required) The VLAN assigned to the adapter. Use Get-NetAdapterAdvancedProperty -RegistryKeyword VLANID to determine the assigned VLAN

  • JumboPacket - (Optional) The jumbo frame size expected on the adapter. Use the following command to determine the assigned jumbo frame size Get-NetAdapterAdvancedProperty -RegistryKeyword *JumboPacket

  • EncapOverhead - (Optional) The encap overhead specified on the physical adapter. Use the following command to determine the EncapOverhead size Get-NetAdapterAdvancedProperty -RegistryKeyword *EncapOverhead

This configuration will check for a configuration on the node like this:

AllNodes.RDMADisabledAdapters

This section is optional. The tool will verify that any adapter specified here has RDMA disabled. For example, using Get-NetAdapterRDMA to identify that RDMA is disabled.

The following options are currently supported:

  • Name - The name of the adapter. Use Get-NetAdapter to determine the adapter name

⚠️ Do not put host virtual NICs that should be RDMA Disabled in this section. These virtual NICs should be defined in AllNodes.VMSwitch.RDMADisabledAdapters defined later.

AllNodes.VMSwitch

This section defines one or more VMSwitch(es) configured on the systems. Each VMSwitch defined requires the following entries:

The following options are currently supported:

  • Name (Required)
    • Type: [System.String]
    • Description: The Name of the VMSwitch
    • Note: Use Get-VMSwitch to determine the Name

  • EmbeddedTeamingEnabled (Required)
    • Type [System.Boolean]
    • Description Defines whether this is an embedded team (SET)
    • Note: Use Get-VMSwitch | Select *Embedded* to determine if this is an embedded team

⚠️ If this is NOT a SET team, there can only be one adapter listed in the corresponding VMSwitch.RDMAEnabledAdapters section

  • IovEnabled (Optional)
    • Type: [System.Boolean]
    • Description: Defines whether the VMSwitch should support SR-IOV
    • Note: Use Get-VMSwitch | Select IovEnabled to determine the Name

  • LoadBalancingAlgorithm (Optional)
    • Type: [System.String]
    • Possible Entries: 'HyperVPort' or 'Dynamic'
    • Description: Defines the load balancing algorithm for the VMSwitch
    • Note: Use Get-VMSwitch | Select *LoadBalancing* to determine the algorithm

Note: The Load Balancing Algorithm of Hyper-V is now the recommended for Windows Server 2016 and Windows Server 2019.

AllNodes.VMSwitch.RDMAEnabledAdapters

Adapters entered in this section are in Host Virtual NIC RDMA mode (attached to a vSwitch). This section is optional, however there must be at least one adapter defined between this section and AllNodes.RDMAEnabledAdapters defined previously.

⚠️ Do not put RDMAEnabledAdapters in mode 1 (native RDMA adapters) in this section.

The following options are currently supported:

  • Name - (Required) The name of the adapter. Use Get-NetAdapter to determine the adapter name

  • VMNetworkAdapter - The name of the virtual adapter. Use Get-VMNetworkAdapter -ManagementOS to determine the adapter name

  • VLANID - (Required) The VLAN assigned to the adapter. Use Get-NetAdapterAdvancedProperty -RegistryKeyword VLANID to determine the assigned VLAN

  • JumboPacket - (Optional) The jumbo frame size expected on the adapter. Use the following command to determine the assigned jumbo frame size Get-NetAdapterAdvancedProperty -RegistryKeyword *JumboPacket

  • EncapOverhead - (Optional) The encap overhead specified on the physical adapter. Use the following command to determine the EncapOverhead size Get-NetAdapterAdvancedProperty -RegistryKeyword *EncapOverhead

RDMA Adapters in this mode require a host vNIC. To avoid ambiguity for the virtual NICs names, we chose to use the VMNetworkAdapter parameter.

AllNodes.VMSwitch.RDMADisabledAdapters

This section is optional. The tool will verify that any adapter or VMNetworkAdapter specified here has RDMA disabled. As an example, you might want SMB01 and SMB02 to have RDMA enabled, but Mgmt VMNetworkAdapter (which is likely connected to a different vlan) to have RDMA disabled.

The following options are currently supported:

  • Name - The name of the adapter. Use Get-NetAdapter to determine the adapter name

  • VMNetworkAdapter - The name of the virtual adapter. Use Get-VMNetworkAdapter -ManagementOS to determine the adapter name

For example, using Get-NetAdapterRDMA to identify that RDMA is disabled.