In this section:
Overview
This section describes the following aspects of creating a GPU ISBC on KVM:
- Host configurations
- Enabling GPU passthrough and CPU pinning on KVM host. - VM configurations
- Launching the KVM instance
- Associating the GPU PCIe device to the instance
- Enabling CPU pinning - Installation procedure
- OS and SBC Application installation - SBC configurations
- Applying custom GPU traffic profile.
Host Configurations
This section describes the changes required on the KVM host to enable:
- GPU passthrough and
- CPU pinning
VM Configurations
This section covers following aspects:
- Creation of KVM instance.
- Associating the GPU PCIe device to the KVM instance.
- Apply CPU pinning configurations to the KVM instance.
Steps in detail:
- Create a KVM instance by referring to Creating a New SBC SWe Instance on KVM Hypervisor - SRIOV.
- Apply CPU pinning configurations by referring to the CPU pinning documentation.
- Before beginning the installation procedure, follow the underlying procedure to add the GPU PCI device, by editing the SBC VM configuration using virt-manager:
Select Add Hardware option as shown below:
Select PCI Host Device option as shown below:
From the list of PCI devices, scroll and select the GPU PCIe device/s to be allocated to the instance as shown below:
- Select Finish to allocate the selected PCIe device.
- Start the instance.
SBC Installation Procedure
- Install the OS on the instance using the following document: Installing Operating System on KVM Hypervisor.
- Install the SBC application with personality set as ISBC on the instance using the following document: Installing Application in Standalone Mode.
SBC Configuration
After installing the OS and the SBC, the application will be up with the default traffic profile being activated.
To apply the custom GPU profile, execute the following CLI command by entering the CLI mode using admin user (enter into the configuration mode):
Create a codecMix profile with the codecs to be configured for GPU transcoding:
% set system sweCodecMixProfile <profile name> <codec> <ptime value: 10ms, 20ms, 30ms, 40ms, 60ms, 80ms, 100ms> percentage <percentage value>
ParameterLength/RangeDescription<codec>
N/A Enter the codec used by this Codec Mix Profile. Select one of the currently supported codecs:
- Codecs supported on both GPU and CPU:
AMR-NB
,AMR-WB
,EVRC
,EVRCB
,G729
,G722
,EVS
,OPUS
- CPU only codecs :
G723
,G726
,G7221
,ILBC
,SILK_8
,SILK_16
,G7112G711
,T38,G711
Note:
- For more information on "GPU + CPU codecs", see the section Dynamic Codec Allocation.
- You can provision CPU codecs in the codec profile and associate it with the GPU traffic profile; however, you must provision at least one GPU codec in the
sweCodecMixProfile
.<ptime value>
N/A Select a packetization time value representing 10 ms, 20 ms, 30 ms, 40 ms, 60 ms:
p10
p20
p30
p40
p60
p80
p100
Note: For SBC SWe Cloud 8.1, ptime values
p80
andp100
are not tested.percentage
0.00-100.00 <% value>
– The percentage distribution allocated for the codec mix. The sum of all percentage entries of all columns in any row of the transcoding profile table must equal 100.sweCodecMixProfile
1-40 characters <profile name>
– Enter a unique SWe Codec Mix Profile name or one of the default profiles:The SWe Codec Mix Profile is attachable to
transcodingCodecProfile
objects of the SWe Traffic Profile.For example, to configure a codec profile for AMRWB-G711u transcoding, run the following command:
% set system sweCodecMixProfile customCodecMix amrwb p20 percentage 50 % set system sweCodecMixProfile customCodecMix g711 p20 percentage 50 % commit
- Codecs supported on both GPU and CPU:
Create a traffic profile. Set the transcodingCodecProfile with the codecMix profile created in step 1.
% set system sweTrafficProfiles <profile name> isAccess <value> callHoldTime <duration> passthroughCodecProfile <profile name> transcodePercent <percentage> transcodingCodecProfile <profile name> useGPUForTranscoding <value>
ParameterLength/RangeDescriptionsweTrafficProfiles
1-40 characters <profile name>
– Enter a unique SWe Traffic Profile name.NOTE: To create additional profiles, delete any inactive custom profiles.
isAccess
N/A Set this flag to "true" to specify whether the deployment uses an access scenario.
false
(default)true
NOTE: When set to '
true
',internalRefreshTimer, registrationRefreshInterval
andbhcaPerSubscriber
parameters are available for configuration.bhcaPerSubscriber
0-5 <# attempts>
(default = 1) – Indicates busy hour call attempts (BHCA) per subscriber.NOTE: This parameter is available when
accessScenario
= "true".callHoldTime
10-10800 <# seconds>
– Enter the average call hold time, in seconds, of the call load for this profile. (default = 90)cryptoPercent
0-100 <% value>
(default = 0) – The percentage of media sessions (including both transcoding and passthrough) requiring cryptographic treatment.The value is 50 when there is SRTP<->RTP interworking on all calls.directMediaPercent
0-100 <% value>
(default 0) – The call load percentage for direct media.NOTE: The combined total percentage of
directMediaPercent
andtranscodePercent
should not exceed 100%.passthroughCodecProfile
N/A The name of the codec mix to associate with the Passthrough Codec Profile.
G711_20ms
processorCapabilityIndexOverride
N/A Use this flag to enable/disable index overriding of the default CPU performance computation by the SBC SWe. When set to 'true', the computed indices (which are calculated during system boot-up) are ignored, and the value provided in
processorCapabilityIndexOverrideValue
attribute is used for all estimations.false
(default)true
NOTE: Since use cases for overriding the default computed indices are rare, it is recommended to not set the value of
processorCapabilityIndexOverride
to "true"
to avoid inaccurate session numbers and vCPU computations.processorCapabilityIndexOverrideValue
0.2-10 Use this parameter to specify the computational value to use to override the default computed indices. (default = 1)
NOTE: This parameter is available when
processorCapabilityIndexOverride
is set to "true". The value given should be in 0.2 to 10.internalRefreshTimer
15-86400 <# seconds>
(default = 1800) – Use this parameter to specify the internal registration timer, in seconds.NOTE: The parameter is available only when
isAccess
is set to "true
".externalRefreshTimer
15–86400 <# seconds>
(default = 1800) – Use this parameter to specify the external registration timer, in seconds.NOTE: The parameter is available only when
isAccess
is set to "true
".transcodePercent
0-100 <% value>
(default = 0) – Use this parameter to specify the percentage of call load to use for transcoded calls.NOTE: The combined total percentage of
directMediaPercent
andtranscodePercent
should not exceed 100%.transcodingCodecProfile
N/A The name of the codec mix to associate with the Transcoding Codec Profile.
tonesPercent
0-100 <% value>
(default = 0) – Use this parameter to specify the percentage of legs to use for tones treatment.useGPUForTranscoding
N/A Set this flag to "true" to specify whether the deployment uses GPU for transcoding.
false
(default)true
For example: To create a custom GPU profile with the name custom_gpu_profile using the
codecMixProfile
created in step 1 for trascoding profile:% set system sweTrafficProfiles custom_gpu_profile callHoldTime 100 transcodePercent 50 passthroughCodecProfile G711_20ms transcodingCodecProfile customCodecMix useGPUForTranscoding true % commit
Activate the traffic profile created in Step 2.
% set system sweActiveProfile name <profile name>
Where the profile name is the custom traffic profile name given in step 2.
For example, to activate the custom GPU traffic profile created in step 2, run the following command:
% set system sweActiveProfile name custom_gpu_profile % commit
The instance will reboot and comes up in the activated traffic profile.
To check which profile is activated, run the following command:
> show table system sweActiveProfile
Example:
admin@vsbc1> show table system sweActiveProfile name custom_gpu_profile; stateChangeTime 2018-12-09T13:25:43-00:00; [ok][2018-12-11 01:29:03] admin@vsbc1>
Dynamic Codec Allocation
The SBC dynamically manages GPU and CPU transcoding resources so they respond to various codec combinations without impacting service. The SBC leverages both GPU and CPU transcoding resources to support an incoming codec request. If GPU resources are available, the SBC utilizes these GPU resources to support GPU-supported codecs. If GPU resources are not available, the SBC utilizes CPU resources (if available) to support GPU-supported codecs. The SBC utilizes CPU resources (if available) to support non-GPU supported codecs. For information about GPU- and CPU-supported codecs, refer to Supported Codecs and Transcoding.
The percentage value for G7112G711
is used for estimating transcode and bandwidth cost.
The percentage value for G711
is not used for estimating transcode cost, but is used for bandwidth calculation of PXPAD scenarios.
The percentage value for G711
cannot be greater than the percentage value of non-G711 codecs.
The sum of all codec percentages is
100
.
DSP-based Tone detection is supported only on GPU-ISBC profile.
With dynamic GPU resource management, the sweTrafficProfiles
does not enforce any hard coded per-codec limit. You must still configure the codec percentage in sweCodecMixProfile
since this configuration acts as an input for the functional partitioning of VCPUs of the instance.
This feature does not affect the codec channel capacities in a non-GPU accelerated SWe (CPU-based SWe).
This feature supports the standard LSWU upgrade operation of the supported SBC releases.
The SBC NRM congestion monitoring mechanism monitors all UXPAD processes for congestion.
A sub-optimal resource utilization exists during the transient transcoding call mix scenarios.
Best Practice
Ribbon recommends monitoring of the status of codec channel capacities for codecs provisioned on GPU (on a per GPU device basis), as well as on CPU.
GPU Transcode Status
Shows codec channel capacities on a per GPU device basis.
The gpuTranscodeStatus
represents only available GPU resources. If the gpuTranscodeStatus
displays higher numbers than the dspStatus
, the system is CPU-limited.
Command Syntax
show table system gpuTranscodeStatus
Command Parameters
CPU Transcode Status
The cpuTranscodeStatus
captures the information on spilled over channels due to the exhaustion of GPU resources. GPU codecs appear on the CPU when the GPU resources are exhausted and cannot accommodate GPU-supported codec channels, so the codec channels spill onto the CPU.
Command Syntax
show table system cpuTranscodeStatus
Command Parameters
To display the status using the EMA, refer to: