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:
- Enable RSS for both NICs
- Set the RSS Queue count for both NICs to 4
- 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.