Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

Add_workflow_for_techpubs
AUTH1UserResourceIdentifier{userKey=8a00a0c86820e56901685f374974002d, userName='null'}
JIRAIDAUTHSBX-89160110284
REV5UserResourceIdentifier{userKey=8a00a02355cd1c2f0155cd26cb8305e9, userName='null'}
REV6UserResourceIdentifier{userKey=8a00a02355cd1c2f0155cd26cb8305e9, userName='null'}
REV3UserResourceIdentifier{userKey=8a00a02355cd1c2f0155cd26c82900c5, userName='null'}
REV1UserResourceIdentifier{userKey=8a00a02355cd1c2f0155cd26c82900c5, userName='null'}


Panel

In this section:

Table of Contents


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


Caption
0Table
1OS Configuration for KVM host with GPU Device


Step
Action
Notes
1

Edit /etc/sysconfig/grub to ensure that the following parameters are populated:

intel_iommu=on iommu=pt rdblacklist=nouveau
  • Enables kernel support for PCIe passthrough.
  • Blacklists opensource NVIDIA driver (nouveau) from loading on the host.
2

Update grub using the following command:

grub2-mkconfig -o /etc/grub2.cfg
3

Edit /etc/systemd/system.conf to the CPUAffinity parameter is uncommented

and it is populated with the CPUs that needs to be left to the host processes.

Isolates the remaining CPUs from the host.

4

Create /etc/modprobe.d/nouveau.conf file with the following contents:

blacklist nouveau
Blacklists opensource NVIDIA driver (nouveau) from loading on the host.
5Reboot the KVM host.


 



VM Configurations 

This section covers following aspects:

  1. Creation of KVM instance.
  2. Associating the GPU PCIe device to the KVM instance.
  3. Apply CPU pinning configurations to the KVM instance.

Steps in detail:

    1. Select Add Hardware option as shown below:

      Caption
      0Figure
      1Add Hardware





    2. Select PCI Host Device option as shown below:

      Caption
      0Figure
      1PCI Host Device





    3. From the list of PCI devices, scroll and select the GPU PCIe device/s to be allocated to the instance as shown below:

      Caption
      0Figure
      1Select the GPU PCIe Device/s




    4. Select Finish to allocate the selected PCIe device.
    5. Start the instance.

SBC Installation Procedure

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:

    Code Block
    % set system sweCodecMixProfile <profile name> <codec> <ptime value: 10ms, 20ms, 30ms, 40ms, 60ms, 80ms, 100ms> percentage <percentage value>



    Parameter
    Length/Range
    Description
    <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
    codecs
    • :
     AMR
    •  AMR-NB, AMR-WB, EVRC, EVRCB, G729, G722,
    G711
    •  EVS, OPUS 
    • CPU only codecs :
      G723
    •   G723, G726, G7221, ILBC,
    OPUS,
    •  SILK_8, SILK_16,
    EVS,
    •  G7112G711, T38,G711

    Note:

    - For more information on "GPU + CPU codecs", see the section Support for CPU+GPU Hybrid Transcoding Instances 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 and p100 are not tested.

    percentage0.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.

    sweCodecMixProfile1-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:

    Code Block
    % set system sweCodecMixProfile customCodecMix amrwb p20 percentage 50
    % set system sweCodecMixProfile customCodecMix g711  p20 percentage 50
    % commit



  1. Create a traffic profile. Set the transcodingCodecProfile with the codecMix profile created in step 1.

    Code Block
    % set system sweTrafficProfiles <profile name> isAccess <value> callHoldTime <duration> passthroughCodecProfile <profile name> transcodePercent <percentage> transcodingCodecProfile <profile name> useGPUForTranscoding <value> 


    Parameter
    Length/Range
    Description
    sweTrafficProfiles1-40 characters

    <profile name> – Enter a unique SWe Traffic Profile name.

    NOTE: To create additional profiles, delete any inactive custom profiles.

    isAccessN/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 and bhcaPerSubscriber parameters are available for configuration.

    bhcaPerSubscriber0-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)
    cryptoPercent0-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.

    directMediaPercent0-100

    <% value> (default 0) – The call load percentage for direct media.

    NOTE: The combined total percentage of directMediaPercent and transcodePercent should not exceed 100%.

    passthroughCodecProfileN/A

    The name of the codec mix to associate with the Passthrough Codec Profile.

    • G711_20ms
    processorCapabilityIndexOverrideN/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.

    processorCapabilityIndexOverrideValue0.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.

    internalRefreshTimer15-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".

    externalRefreshTimer15–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".

    transcodePercent0-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 and transcodePercent should not exceed 100%.

    transcodingCodecProfileN/A

    The name of the codec mix to associate with the Transcoding Codec Profile.

    tonesPercent0-100<% value> (default = 0) – Use this parameter to specify the percentage of legs to use for tones treatment.
    useGPUForTranscodingN/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:

    Code Block
    % set system sweTrafficProfiles custom_gpu_profile callHoldTime 100 transcodePercent 50 passthroughCodecProfile G711_20ms transcodingCodecProfile customCodecMix useGPUForTranscoding true
    % commit



  2. Activate the traffic profile created in Step 2.

    Code Block
     % 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:

    Code Block
    % set system sweActiveProfile name custom_gpu_profile
    % commit


    Info

    The instance will reboot and comes up in the activated traffic profile.


  3. To check which profile is activated, run the following command:

    Code Block
    > show table system sweActiveProfile


    Example: 

    Code Block
    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>




Anchor

HybridTranscoding

DynamicCodecAllocation

HybridTranscodingSupport for CPU+GPU Hybrid Transcoding Instances

The term "Hybrid Transcoding" implies leveraging both CPU and GPU resources efficiently to accommodate a given codec combination for transcoding capability. With Hybrid Transcoding, a suitable VM instance (SBC SWe on KVM/Openstack) utilizes all the CPU and GPU resources allocated to it for provisioning a given transcode call mix scenario.

Prior to Hybrid Transcoding, the SBC supported either a pure CPU transcoding solution, or a pure GPU transcoding solution. However, in the pure GPU solution, many CPUs are left unused. For example, when a 32 vCPU, GPU-ISBC instance is used to provision just AMRWB-G711u calls, only 13 vCPUs are used, although such an instance can handle 7680 sessions for AMRWB-G711u transcoding. With Hybrid Transcoding, the remaining 19 vCPUs (32-13 vCPUs) are used for provisioning additional AMRWB-G711 sessions.

Hybrid Transcoding enables a GPU-SBC to support GPU codecs as well as non-GPU-supported codec in the same instance. For example, AMRWB-G711 and G726-G711 codecs are supported in the same instance. 

Hybrid Transcoding is supported in Custom GPU and Standard GPU traffic profiles.

DynamicCodecAllocation

Dynamic Codec Allocation

The

Spacevars
0product
dynamically manages GPU and CPU transcoding resources so they respond to various codec combinations without impacting service. The 
Spacevars
0product
leverages both GPU and CPU transcoding resources to support an incoming codec request. If GPU resources are available, the 
Spacevars
0product
utilizes these GPU resources to support GPU-supported codecs. If GPU resources are not available, the 
Spacevars
0product
utilizes CPU resources (if available) to support GPU-supported codecs. The 
Spacevars
0product
utilizes CPU resources (if available) to support non-GPU supported codecs. For information about GPU- and CPU-supported codecs, refer to Supported CodecsFor Hybrid Transcoding, the percentage value of the codec G7112G711 in sweCodecMixProfile indicates the proportion of total number of sessions designated for pure G711 transcoding (G711-G711). This is applicable for Hybrid Transcoding, as well as pure CPU transcoding solutions.

Info
titleNote

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 is100.

DSP-based Tone detection is supported only on GPU-ISBC profile.


Info
titleNote

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 

Spacevars
0product
releases.

The 

Spacevars
0product
NRM congestion monitoring mechanism monitors all UXPAD processes for congestion.

Info
titleNote

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.

To display the status of

GPU Transcode Status

Shows codec channel capacities

for codecs provisioned

on

GPU, on

a per GPU device basis

, execute the following existing command:

.

Info
titleNote

The gpuTranscodeStatus represents only available GPU resources. If the gpuTranscodeStatus displays higher numbers than the dspStatus, the system is CPU-limited.

Command Syntax

Code Block
>
show table system gpuTranscodeStatus


Command Parameters


Multiexcerpt
MultiExcerptNameGPU Transcode Status


Caption
0Table
1gpuTranscodeStatus

Similarly, to display the status of codec channel capacities for codecs provisioned on CPU, execute the following existing command:

Descriptions


ParameterStatus Names and Descriptions

gpuTranscodeStatus

<system name> – The

Spacevars
0product
system name.

  • amrNbTotal Total AMR–NB resource capacity on this server.

  • amrNbUtilization Percentage utilization of AMR–NB resources on this server.

  • amrWbTotal Total AMR–WB resource capacity on this server.

  • amrWbUtilization Percentage utilization of AMR–WB resources on this server.
  • evrc0Total Total EVRC0 resource capacity on this server.
  • evrc0Utilization Percentage utilization of EVRC0 resources on this server.
  • evrcb0Total Total EVRCB0 resource capacity on this server.
  • evrcb0Utilization Percentage utilization of EVRCB0 resources on this server.
  • gpuAllocation – Displays the overall GPU occupancy in a percentage.
  • gpuNumber - Numeric identifier for the GPU device.
  • g722Total Total G.722 resource capacity on this server.
  • g722Utilization Percentage utilization of G.722 resources on this server.
  • g729AbTotal Total G729A+B resource capacity on this server.
  • g729AbUtilization Percentage utilization of G729A+B resources on this server.
  • opusTotal – Total OPUS resource capacity on this server. The

    Spacevars
    0product
    does not support this parameter.

  • opusUtilization – Percentage utilization of OPUS resources on this server. The

    Spacevars
    0product
    does not support this parameter.




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

Code Block
show table system cpuTranscodeStatus

Command Parameters


Multiexcerpt
MultiExcerptNameCPU Transcode Status


Caption
0Table
1cpuTranscodeStatus Descriptions


ParameterStatus Names and Descriptions

cpuTranscodeStatus

<system name> – The

Spacevars
0product
system name.

  • amrNbUsed - Number of AMR channels spilled over onto CPU.

  • amrWbUsed - Number of AMR-WB channels spilled over onto CPU.

  • evrc0Used - Number of EVRC channels spilled over onto CPU.
  • evrcb0Used - Number of EVRCB channels spilled over onto CPU.

  • evsUsed - Number of EVS channels spilled over onto CPU.
  • opusUsed - Number of OPUS channels spilled over onto CPU. 
  • g722Used - Number of G.722 channels spilled over onto CPU.
  • g729AbUsed - Number of G.729AB channels spilled over onto CPU.
Code Block> show table system cpuTranscodeStatus




To display the status using the EMA, refer to: