Balluff - BVS CA-GX0 / BVS CA-GX2 Technical Documentation
Usage

Everything regarding the RSS technology that is not covered here is beyond the scope of this documentation! More information can be found on the Internet if needed.

Network Interface Card Settings

In order to use the Balluff Multi-Core Acquisition Optimizer first the NIC must be configured accordingly.

Note
  • This section assumes, that all the general settings described in Optimizing Network Performance have already been applied!
  • Screenshots in this section have been made on a Windows 10 system with a Mellanox ConnectX NIC. Different systems or device combinations might use slightly different terms or a slightly different (possibly reduced) feature set.
  • If several NICs are involved of course each NIC needs to be configured accordingly.
  • Windows only: If certain parameters cannot be configured by the NIC drivers property dialog using the Powershell cmdlets Set-NetAdapterRss and Get-NetAdapterRss might be used as an alternative!

Enabling RSS

First of all RSS must be switched on for the NIC to use.

Attention
Without RSS everything described here will either not be available or will not result in any performance improvement.
NIC - RSS Enabled

RSS Queue Count

The next thing that must be configured is the RSS queue count. This parameter determines the number of CPU cores that can be used to process data received by this particular NIC.

NIC - RSS Queue Count
Note
The number of RSS queues should not exceed the number of physical CPU cores in the system! However the operating system will usually not use more queues than processors available. So in case e.g. a system has 6 physical cores but the NIC only supports the selection of either 4 or 8 RSS queues, then 8 has to be selected to be able to access all physical cores in the system.

RSS Profile

In order to have a deterministic system response it is recommended to select the ClosestProcessorStatic RSS profile.

NIC - RSS Profile
Note
  • Once there is no identical setting listed in the Advanced section of the NIC's settings menu, it should be possible to use the Powershell cmdlet Set-NetAdapterRss to configure it to ClosestStatic.
  • More on RSS profiles can be found on various locations in the Internet and is beyond the scope of this documentation. Selecting a dynamic profile here will allow the operating system to change certain settings at runtime thus to bypass the fixed assignment of CPU cores and thus eventually to jeopardize the complete setup!

RSS Base Processor (Optional)

If supported by the NIC driver, the RSS base processor value can be configured to exclude every physical CPU core with an index smaller than this properties value from processing network data at all.

NIC - RSS Base Processor

Usually this does not result in a huge advantage since the same thing can be achieved by later configuring the Impact Acquire driver instance accordingly. But setting the RSS base processor does a little more: Since then ALL network data processing is removed from some of the CPU cores this affects not only GigE Vision™ data but ALL network data. Sometimes this might make a difference.

Attention
When combining this value with the RSS Queue Count, the sum of the number of queues and the base processor cannot exceed the number of physical CPU cores in the system for the same reasons as mentioned previously!
Note
An interesting use case for this parameter are setups with multiple NICs as then e.g. when working with 2 NICs in an 8 core system the following setup will decouple the CPU core usage of the NICs:
  1. Enable RSS for both NICs
  2. Set the RSS Queue count for both NICs to 4
  3. Set the RSS Base Processor for one of the NICs to 4

Now one NIC will operate on CPUs 0-3 while the other one will operate on CPUs 4-7.

Maximum RSS Processor Count (Optional)

NIC - Maximum RSS Processor Count
Note
Changing this value usually requires a reboot of the system!
Attention
This value must not be higher than the number of physical CPU cores that can process network data thus the value of the physical processors minus the RSS base processor. Otherwise the system will perform in a nondeterministic way!

BIOS Settings (Optional)

Since RSS works on physical processors only, it might be beneficial for the overall system performance to turn off Hyper-Threading in the systems BIOS or somewhere in the operating systems settings, if possible. This is an optional setting that should be considered carefully as, while potentially improving the network data reception, it might have negative impact on the systems capability to perform extensive calculations!

Impact Acquire Settings

Once the NIC and the host system have been configured accordingly, the Impact Acquire related features can be found in the DataStream module related feature tree:

ImpactControlCenter - Multi-Core Acquisition Optimizer - Features

More information about the concept of the DataStreamModule can be found in the GenICam™ GenTL specification and the Impact Acquire API manual of the programming language of your choice.

If the mvMultiCoreAcquisitionEnable feature is not available either the device doesn't support the minimal feature set for running the Balluff Multi-Core Acquisition Optimizer or the NIC is not set up correctly.

  • See here for supported products and versions.
  • See here for potential solutions if your device should support all features needed.

When mvMultiCoreAcquisitionEnable is switched off everything will behave as if the feature is not available at all. The incoming data will be processed exclusively on a random CPU potentially changing with every start of the acquisition:

ImpactControlCenter - Multi-Core Acquisition Optimizer - Off

Switching mvMultiCoreAcquisitionEnable On will enable various other properties allowing the configuration of the CPU cores to use:

ImpactControlCenter - Multi-Core Acquisition Optimizer - On

As it can be seen in this example 5 CPU cores are now used for processing the network data. Each of them gets an equal share of the load while the overall system utilization stays the same. The first 3 CPU cores do not get any work due to the RSS base processor being set to 3 in the NICs properties (see RSS Base Processor).

ImpactControlCenter also includes a wizard that allows an easier setup of all the features involved:

ImpactControlCenter - Multi-Core Acquisition Optimizer - Wizard
Note
There is a close relation between the NIC driver and the RSS-implementation. Therefore there is a slight chance that there is a non deterministic response after correctly configuring all related settings. In this case, please get in contact with our support group.

API

In total the Impact Acquire driver stack exposes 5 properties that in combination with the settings described in Network Interface Card Settings can be used to configure the desired behaviour:

  • mvMultiCoreAcquisitionEnable: Switch the Balluff Multi-Core Acquisition Optimizer on and off
  • mvMultiCoreAcquisitionBaseCore: This is a read-only feature basically just reflecting the RSS Base Processor value configured for the NIC in case this is either not exposed by the NIC driver or shall be used by an application. This is purely meant for informational purposes.
  • mvMultiCoreAcquisitionCoreCount: Defines the number of CPU cores to use for processing this data stream. Please note that single or dual Gigabit Ethernet cameras usually just allow to explicitly select the receiving CPU but not to split up the work onto multiple CPUs, thus the maximum value for this feature will be 1 then!
  • mvMultiCoreAcquisitionFirstCoreIndex: Defines which CPU core is the first one to use for processing this data stream relative to mvMultiCoreAcquisitionBaseCore.
  • mvMultiCoreAcquisitionCoreSwitchInterval: Defines the number of network packets to process on one CPU core before switching to the next in a round-robin fashion (only available when multiple CPU cores are used for processing this data stream thus when mvMultiCoreAcquisitionCoreCount is larger than 1)
Attention
Modifying these properties while streaming is active will not affect the current behavior until streaming has been stopped and restarted!

In addition to that Impact Acquire also allows to get information about the CPU cores available in the system via the Info category:

ImpactControlCenter - Available CPU cores

These features are available within an application either by creating an instance of the Info class or (when using the C-API) by obtaining handles to the properties in question.