Skip to main content

Dell PowerScale: Common AntiVirus Agent Solution

Oct 20, 2026
Dell PowerScale: Common AntiVirus Agent Solution This document describes general considerations, configurations, performance, and sizing of the Common AntiVirus Agent (CAVA) solution for Dell PowerScale storage.

Executive summary

Overview

Many enterprises have strict security policies in place to detect, clean (remove), or quarantine viruses. This is often performed at the individual user level with per-system anti-virus (AV) solutions from third-party security vendors. Many of these same enterprises use large, centralized storage platforms to contain user home directories or group-project repositories. Because these are the same file types that reside on end-user workstations, viruses must not reside on the storage systems. Because end-user solutions do not work well for centralized storage depots, a different type of solution is required.

Third-party software is often used to scan the storage array through end-user access or manually scheduled policies from a central anti-virus scan server. Common AntiVirus Agent (CAVA) provides an anti-virus solution for Dell PowerScale storage. CAVA uses third-party anti-virus software to identify and eliminate known viruses before they infect files on the system.

This white paper covers the general considerations, configuration, performance, and sizing of the CAVA solution for PowerScale.

Revisions

Date

Part number/
revision

Description

September 2020

H18514

Initial release

September 2021

H18514.1

Adds DNS delegation when creating the anti-virus pool

December 2022

H18514.2

Adds chapters for troubleshooting and configuration of Microsoft Windows Defender

Updates the table for supported anti-virus software

January 2024

H18514.3

Updates the performance sections

December 2025

H18514.4

Update the terminology

July 2026

H18514.5

Updated supported ISV list

Overview

Architecture

Figure 1 illustrates a high-level architecture of the CAVA anti-virus solution for PowerScale. Dell Common Event Enabler (CEE) sits between the PowerScale cluster and the anti-virus applications. When clients trigger the scanning workflow, Dell PowerScale OneFS generates a request to the CEE or CAVA agent through the HTTP protocol. Then, the anti-virus application fetches the scanning files from PowerScale through the hidden SMB share called CHECK$. These files are scanned by the anti-virus applications.

Diagram illustrating interaction between PowerScale node and external components for malware scanning. PowerScale node communicates with clients via triggers and with Antivirus engine using SMS protocol, while HTTP protocol manages scan requests and responses with CAVA Server and CEE/CAVA Agent.

Figure 1.   The overall architecture of the CAVA solution for PowerScale

The detailed architecture is explained separately by three scanning workflows from the OneFS perspective:

  • On-demand scan (also known as on-access scan): This scan is triggered by the proper SMB operation, such as a read or close operation, and depends on your scan profile. There are two scan profiles in OneFS:
  • Standard profile: Captures a close and rename operation from an SMB perspective, and triggers the scan operation on the corresponding file.
  • Strict profile: Captures a read, close, and rename operation from an SMB perspective, and triggers the scan operation on the corresponding file.
  • Scheduled scan: This scan is triggered by the job engine either manually or by schedule.
  • Manual scan: This scan is triggered by the CLI command or the corresponding PAPI call to scan a single file.

Generally, the CAVA solution provides better performance, lower total cost of ownership (TCO), and much less CPU and memory usage from the PowerScale perspective, compared with an anti-virus solution based on ICAP.

Note: ICAP is still supported, which remains unchanged from the previous versions of OneFS.

On-demand scan

Diagram illustrating data flow and interaction between components in a PowerScale node antivirus scanning system. Key elements include SMB client, I/O manager, Av scan filter, OneFS filesystem, AV layer, CAVA Server, and CEE/CAVA Agent, with numbered arrows indicating processes like manual and scheduled scans, file attribute handling, and antivirus checks.

Figure 2.   The workflow of the on-demand scan

Figure 2 shows the workflow of an on-demand scan. Depending on which scan profile is selected, the SMB requests with a read or close operation code are captured by the I/O manager in OneFS. It extracts the file path and name to provide to the Avscan filter, which can be configured on a multi-tenant access-zone basis. The Avscan filter will then filter according to the following aspects:

  • File extension to include
  • File extension to exclude
  • File path to exclude

If the file matches all the criteria, an internal process lwavscand sends the HTTP scanning request to the CEE/CAVA agent. Simultaneously, OneFS sets the locks on this file. Then, the anti-virus application tries to fetch this file through the hidden SMB share CHECK$ from the file system on OneFS. CAVA supports only downloading a part of a file for scanning, which helps the performance. After the corresponding content is downloaded to the CAVA server, it runs the scan with the anti-virus engine, and CEE sends the scan results and response back to the process lwavscand. At this stage, some scanning attributes are written to this file and the lock is released. The scanning attributes are:

  • Scan time
  • Scan Result
  • Anti-virus signature timestamp
  • Scan current

The previous SMB workflow can then continue if the file is not infected. Otherwise, the file is denied access. If there are errors during the scan and the scan profile is strict, the setting Open on fail determines the next action.

Scheduled scan

Figure 3 shows the workflow of the scheduled scan in OneFS. The scheduled scan is triggered by the job engine. Similar to other jobs in OneFS, the impact and schedule configuration can be set accordingly. It also implements the filter, which is slightly different from the filter in the on-demand scan. The detailed filtering criteria are:

  • File extension to include
  • File extension to exclude
  • File path to exclude
  • File path to include (only in the scheduled scan)

Diagram illustrating workflow of antivirus scanning in a PowerScale node, showing interactions between components like I/O manager, OneFS file system, lwavscand daemon, CEE/CAVA Agent, and Antivirus engine. Arrows numbered 1 to 9 indicate data flow for scheduled scans, SMB share checks, and scan report generation, with clear separation between user space and kernel space.

Figure 3.   The workflow of the scheduled scan

If the file matches all the criteria, an internal process lwavscand sends the HTTP scanning request to the CEE/CAVA agent, and simultaneously, OneFS sets the locks on this file. The anti-virus application then attempts to fetch this file through the hidden SMB share CHECK$ from the file system on OneFS. CAVA supports only downloading a part of a file for scanning, which helps the performance. After the corresponding content is downloaded to the CAVA server, it runs the scan with the anti-virus engine, and CEE sends the scan results and response back to the process lwavscand. All the scanning attributes are recorded under /ifs/.ifsvar/modules/avscan/isi_avscan.db.

Manual scan

Figure 4 shows the workflow of a manual scan. The manual scan is triggered by the CLI, PAPI, or web interface. Unlike an on-demand scan or scheduled scan, it has no filters. The scanning files are directly assigned by the parameters. The daemon process lwavscand sends the HTTP scanning request to the CEE or CAVA agent, and simultaneously, OneFS sets the locks on this file. The anti-virus application then attempts to fetch this file through the hidden SMB share CHECK$ from the file system on OneFS. CAVA supports only downloading a part of the file for scanning, which helps the performance. After the corresponding content has been downloaded to the CAVA server, it runs the scan with the anti-virus engine, and CEE sends the scan results and responds to the process lwavscand. All the scanning attributes are recorded under /ifs/.ifsvar/modules/avscan/isi_avscan.db.

Diagram illustrating interaction flow between components in a file scanning system for malware detection. It shows data exchange paths with numbered arrows among elements like OneFS filesystem, Manual scan (PAPI), Scheduled scan, Iwar/scand daemon, Antivirus engine, CAVA Server, and CEE/CAVA Agent, highlighting processes such as SMB share checks and scan report generation across user and kernel spaces.AI-generated content may be incorrect.

Figure 4.   The workflow of manual scan

Load balancing

There are two types of connections between CAVA servers and PowerScale nodes:

  • SMB connection to fetch files or contents for scanning through a hidden share (CHECK$).
  • CEE connections for scan requests, scan responses, and other functions. These connections are HTTP.

For each type of connection, OneFS has a different implementation for load balancing. The following sections explain these two methodologies in detail.

SMB connection load balancing

OneFS uses a dedicated IP pool and multi-tenant access zone to isolate all CAVA SMB connections from other workloads. Within this IP pool, SmartConnect is enabled to ensure that all SMB connections are evenly spread across all the nodes.

CEE connection load balancing

The rules and conditions of how CEE connections are balanced are:

  • Maximum connections per CAVA servers = 20
  • Number of different CAVA servers to which a cluster node can connect = 4
  • The nth cluster node starts from the nth CAVA server

The following example uses an environment with the following:

  • 7 PowerScale cluster nodes
  • 7 CAVA servers

The calculation is as follows:

This figure shows three equations.Maximum connections = Maximum connections per CAVA server, times the number of CAVA servers = 20 times 7 =140.Maximum connections per cluster node = (Maximum connections) divided by (Cluster node number) = 140 divided by 7 = 20.Maximum connections per node per CAVA server = (Maximum connections per cluster node) divided by 4 = 5.

The layout for the connections is listed in Table 1.

Table 1.      Connection layouts

 

First CAVA Server

Second CAVA Server

Third CAVA Server

Fourth CAVA Server

Fifth CAVA Server

Sixth CAVA Server

Seventh CAVA Server

First node

5

5

5

5

 

 

 

Second node

 

5

5

5

5

 

 

Third node

 

 

5

5

5

5

 

Fourth node

 

 

 

5

5

5

5

Fifth node

5

 

 

 

5

5

5

Sixth node

5

5

 

 

 

5

5

Seventh node

5

5

5

 

 

 

5

Total

20

20

20

20

20

20

20

A more complicated example has an environment with the following:

  • 7 PowerScale cluster nodes
  • 5 CAVA servers

The calculation is as follows:

This figure shows three equations.Maximum connections = Maximum connections per CAVA server, times the number of CAVA servers = 20 times 5 =100.Maximum connections per cluster node = (Maximum connections) divided by (Cluster node number) = 100 divided by 7 = approximately 14.Maximum connections per node per CAVA server = (Maximum connections per cluster node) divided by 4 = 15 divided by 4, equals approximately 4.

The layout for the connections is listed in Table 2.

Table 2.      Connection layouts

 

First CAVA Server

Second CAVA Server

Third CAVA Server

Fourth CAVA Server

Fifth CAVA Server

First node

4

4

4

2

 

Second node

 

4

4

4

2

Third node

2

 

4

4

4

Fourth node

4

2

 

4

4

Fifth node

4

4

2

 

4

Sixth node

4

4

4

2

 

Seventh node

 

2

2

4

4

Total

18

20

20

20

18

Supportability

See Table 3 for the supportability of this feature.

Table 3.      Supportability

Vendor

Version supported

Protocol support

SMB

Legacy ICAP support

Yes

Snapshot scanning support

No

SyncIQ

Transferring anti-virus files attributes using SyncIQ will not be supported.

SmartLock files scanning

The files under SmartLock protection are read-only. OneFS cannot set scanning attributes on them, and in case they are infected, the anti-virus application cannot take proper action against them.

Deployment and configuration

Overview

Figure 5 shows the overall workflow of how CAVA works in OneFS. The anti-virus applications use the SMB protocol to fetch the file or a portion of a file for scanning in a PowerScale cluster. From the anti-virus perspective, the hidden SMB share CHECK$ must be present on the NAS in order to read the data to be scanned. This share allows access to all files on a PowerScale cluster under /ifs. SmartConnect and a dedicated multi-tenant access zone are introduced in this process to ensure that all the connections from the anti-virus application are fully distributed and load-balanced among all the configured nodes in the IP pool. A hidden role, AVVendor, is created by the CAVA anti-virus service to map the EMC CAVA service account into OneFS.

Figure 5 also shows the overall steps to configure CAVA in OneFS:

  1. Create CAVA servers in OneFS.
  2. Create an IP pool.
  3. Create a dedicated multi-tenant access zone for CAVA (AvVendor).
  4. Create Active Directory authentication provided in the multi-tenant access zone (AvVendor).
  5. Update role (AVVendor).

The following sections introduce these steps in detail.

Diagram illustrating a network setup process involving SmartConnect, antivirus applications, and Active Directory (AD) authentication. Key steps include creating an IP pool, establishing an access zone labeled AvVendor, creating an AD provider linked to directory /ifs/, and updating the hidden role AVVendor, with numbered arrows indicating workflow sequence.

Figure 5.   Workflow showing how CAVA works in OneFS

The prerequisites to configure CAVA service in OneFS are listed in Table 5.

Table 4.      Prerequisites to configure CAVA service in OneFS

Prerequisites

Description

SMB service

 

The SMB service on OneFS should be enabled to ensure that anti-virus applications can fetch data from the PowerScale cluster for scanning.

SmartConnect Service IP (SSIP)

SSIP should be configured in the OneFS subnet level. SmartConnect is used by the CAVA service to ensure that all the scanning requests are well balanced among all the nodes in the IP pool.

Anti-virus application and Dell Comment Event Enabler (CEE)

See the document from the anti-virus software vendor and Using the Common Event Enabler on Windows Platforms.

Active Directory access

CAVA service in OneFS requires that the anti-virus application and PowerScale cluster be in the same domain.

Dedicated IP addresses

All the connections from anti-virus applications are served by a dedicated IP pool in PowerScale. These IP addresses are used to configure the IP ranges in this IP pool.

We recommend using exclusive IP addresses which are only available to the anti-virus applications.

Create a CAVA server in OneFS

Installing the anti-virus application and CEE is a prerequisite (as shown in Table 5). During the configuration of CEE, a domain user is created. This domain user is the service account for Windows service EMC CAVA and is used to access the hidden SMB share CHECK$ to get the files and content for scanning. In this example, the user is LORG\cavausr.

After the anti-virus servers are installed and configured, create the corresponding entries in the OneFS so that PowerScale is aware of them. To perform this action, use the following command:

# isi antivirus cava servers create --server-name=avsh01 --server-uri=10.7.a.b --enabled=1

Alternately, use the WebUI as shown in Figure 6.

Screenshot of a server configuration form for CAVA antivirus showing fields for Server URL and Server name, with the URL partially redacted and the name set as "avsh01." Checkbox for enabling server is selected, with Cancel and Save changes buttons at the bottom.

Figure 6.   Add CAVA server

You can add multiple CAVA servers into a OneFS configuration for the proper number of the CAVA servers for a given PowerScale cluster. (For details, see the Sizing section.)

Create an IP Pool

Note: Before performing the following steps, ensure that the Service Enabled is set to No in the CAVA settings.

The purpose of creating an IP pool is to facilitate the connections from anti-virus applications. A dedicated IP pool must be used for CAVA antivirus. This pool of IPs needs to be accessible by the antivirus servers. Using high performance front end interfaces is recommended.

Note: Do not mix the IP range in this dedicated IP pool with others for a regular SMB client connection.

The load balancing for the anti-virus workload is achieved by the SmartConnect zone in this IP pool. Because this is a dedicated IP pool for CAVA servers, all the anti-virus scanning workloads should be evenly distributed within the pool. To perform this action, use the following CLI command:

# isi network pools create groupnet0.subnet0.pool1 --ranges=10.7.u.v-10.7.x.y --sc-dns-zone "cavacluster1.west.isilon.com" --ifaces=1:ext-1

In this example:

  • The IP pool is groupnet0.subnet0.pool1
  • The IP range is 10.7.u.v to 10.7.x.y
  • The SmartConnect Zone name is cavacluster1.west.isilon.com. Make sure that the DNS delegation is created for it.
  • The network interface is the ext-1 from node 1

After the IP pool is created, associate it with the CAVA by using the following command. After this command, this IP pool is only available to the CAVA servers, and simultaneously, the corresponding multi-tenant access zone of this IP pool is changed to AvVendor.

# isi antivirus cava settings modify --ip-pool="groupnet0.subnet0.pool1"

This action will make the IP Pool unavailable to all other users except antivirus servers. Do you want to continue? (yes/[no]): yes

"

IP Pool groupnet0.subnet0.pool1 added to CAVA antivirus.

Note: The access zone of IP Pool groupnet0.subnet0.pool1 has been changed to AvVendor.

This function is also available through the WebUI, as shown in Figure 7.

Screenshot of a software settings panel for configuring scan zones and filters, showing two enabled zones with standard scan profiles and filters active. Key details include report expiry set to 60 days, scan and cloudpool timeouts at 60 seconds, maximum file scan size at 0 kilobytes, and a highlighted IP Pool dropdown set to "groupnet0.subnet0.pool1."AI-generated content may be incorrect.

Figure 7.   Associate IP pool with CAVA settings

Note: Be sure to create the DNS delegation for the zone name associated with the IP pool created in this step.

Create a dedicated multi-tenant access zone: AvVendor

When the antivirus service type is changed to CAVA, a multi-tenant access zone is automatically created. This multi-tenant access zone will be automatically configured to use the IP address pool created in the section Create an IP Pool. To enable the CAVA service, use the following command:

# isi antivirus cava settings modify --service-enabled=1

View the CAVA settings and ensure that the Server Enable setting is Yes.

# isi antivirus cava settings view

       Service Enabled: Yes

     Scan Access Zones: System

               IP Pool: groupnet0.subnet0.pool1

         Report Expiry: 8 weeks, 4 days

          Scan Timeout: 1 minute

Cloudpool Scan Timeout: 1 minute

     Maximum Scan Size: 0.00kB

At the current stage, AvVendor is created in the multi-tenant access zone list:

# isi zone zones list

Name     Path

--------------

System   /ifs

AvVendor /ifs

--------------

Total: 2

Note: The ID of the multi-tenant access zone AvVendor is -2 but can display in the CLI as 4294967294 (binary 2’s complement).

Create an Active Directory authentication provider for AvVendor

All the anti-virus application servers and the PowerScale cluster should be in the same domain. Use the following CLI command to join the PowerScale cluster into the domain. In this example, the domain name is lorg.west.isilon.com.

# isi auth ads create lorg.west.isilon.com --user administrator

Then, add the authentication provider to the multi-tenant access zone AvVendor:

# isi zone zones modify AvVendor --add-auth-providers=lsa-activedirectory-provider:lorg.west.isilon.com

Update role: AVVendor

The CHECK$ share is a hidden share that allows access to all files on the cluster. It is used exclusively by the anti-virus software running on a Microsoft Windows server. Because the CHECK$ share allows access to all files on the cluster, any user accessing the share must have a unique privilege. The hidden ISI_PRIV_AV_VENDOR privilege in the AVVendor role is added to give the user account that is used by the anti-virus software access to the CHECK$ share.

Use the following CLI command to assign the user LORG\cavausr to the role AVVendor in the multi-tenant access zone AvVendor:

# isi auth roles modify AVVendor --zone=AvVendor --add-user lorg\\cavausr

At the current stage, the configuration for the CAVA service on the PowerScale is finished. Use the following command to ensure that the System Status is RUNNING:

vshen-p21evix-1# isi antivirus cava status

        System Status: RUNNING

        Fault Message: -

          CEE Version: 8.7.7.0

          DTD Version: 2.3.0

            AV Vendor: Symantec

Performance overview

Performance overview

In general, CAVA has better performance than ICAP. The following sections compare the performance between CAVA and ICAP in a PowerScale cluster.

The performance results may vary depending on the PowerScale model, total number of nodes, anti-virus application vendors, size of the CAVA or ICAP servers, workload, file size distribution, and other factors. The following example only gives an overall idea of what the CAVA performance looks like and how it compares with ICAP.

The following sections cover the following:

  •  Test environment
  •  Scenario 1: Performance of scan on close
  •  Scenario 2: Performance of scan on read
  •  Scenario 3: Performance impact to metadata read/write

Test environment

The following table shows the components in the test environment for Scenario 1 and Scenario 2:

Table 5.      Test environment for Scenarios 1 and 2

Components

Number of components

Details

PowerScale cluster

4-node cluster

H500

CAVA servers

3 virtual machines

8 vCPUs, 16 GB memory

Symantec Endpoint Protection 14.2

Clients

3 physical servers

To generate SMB workloads:

For Scenario 1, these servers generate create workloads.

For Scenario 2, these servers generate read workloads.

The following table shows the components in the test environment for Scenario 3:

Table 6.      Test Environment for Scenario 3

Components

Number of components

Details

PowerScale cluster

4-node cluster

H600

CAVA servers

4 hosts

In this scenario, we use a custom script to simulate what anti-virus applications could do to make the test cases more generic.

Clients

4 servers

To generate SMB workload

Scenario 1: Performance of scan on close

Test methodology

In this scenario, the client servers generate different sizes of files which are 10 KB, 100 KB, 1 MB, 10 MB, 100 MB, and 200 MB. From a PowerScale perspective, a standard scan profile is applied to ensure that the scan occurs when the file is closed. Regarding the detailed CAVA configuration on PowerScale, see the following profile:

vshen-p21evix-1# isi antivirus cava filters view System

                 Zone: System

              Enabled: Yes

         Open-on-fail: Yes

      File Extensions: *

File Extension Action: include

 Scan If No Extension: No

        Exclude Paths: -

         Scan-profile: standard

         Scan-on-read: No

        Scan-on-close: Yes

       Scan-on-rename: Yes

 Scan Cloudpool Files: No

Test results

Figure 8 shows how the number of files scanned per second changes along with the increase of the average file size. With the increased size of the files, the overall trend of the files scanned per second is decreased.

Line graph showing relationship between average file size (10KB to 200MB) and file scanned per second, illustrating scanning speed decreases as file size increases. Key data points include peak speed of 1080 files/second at 100KB and sharp drop to 12 files/second at 200MB, with blue line connecting labeled values on white grid background.

Figure 8.   File scanned per second (scan-on-close)

Figure 9 shows the relationship between average file size and the scanning throughput. Theoretically, the results equal the files scanned per second times the average file size in each category. With the increase of file size, the scanning throughput increases. In this case, after it reaches 2 GB/sec, it goes flat.

Line graph showing scan throughput in megabytes per second (MB/s) across average file sizes ranging from 10KB to 200MB. Throughput increases sharply from 8.98 MB/s at 10KB to 2139.4 MB/s at 10MB, then plateaus around 2100-2300 MB/s for larger file sizes, indicating diminishing returns in throughput gains beyond 10MB.

Figure 9.   Scan throughput (scan-on-close)

The average CPU utilization on the PowerScale cluster is stable under 8% no matter the overall scan throughput or various average file sizes. For more details, see Figure 10.

Line graph showing average CPU utilization on PowerScale (%) across varying average file sizes from 10KB to 200MB. CPU usage peaks at 7.50% for 100KB files, then gradually decreases and stabilizes around 6.0% for larger file sizes, with data points marked by blue triangles and values labeled above each point.

Figure 10.    Average CPU utilization on PowerScale (scan-on-close)

Scenario 2: Performance of scan on read

Test methodology

In this scenario, the client servers generate read requests against the files which have been generated in Scenario 1. The CAVA strict profile is applied to ensure that scan-on-read is enabled. Regarding the detailed CAVA configuration on PowerScale, see the following profile:

vshen-p21evix-1# isi antivirus cava filters view System

                 Zone: System

              Enabled: Yes

         Open-on-fail: Yes

      File Extensions: *

File Extension Action: include

 Scan If No Extension: No

        Exclude Paths: -

         Scan-profile: strict

         Scan-on-read: Yes

        Scan-on-close: Yes

       Scan-on-rename: Yes

 Scan Cloudpool Files: No

Test results

Figure 11 illustrates how the number of files scanned per second changes along with the increase of the average file size. With the increased size of the files, the overall trend of the files scanned per second is decreased.

Line graph showing relationship between average file size and files scanned per second, illustrating a sharp decline in scanning speed as file size increases. X-axis labeled with file sizes from 100KB to 200MB, Y-axis showing files scanned per second from 0 to 250, with data points marked at 218 for 100KB, 145 for 1MB, 24 for 10MB, 3 for 100MB, and 2 for 200MB.

Figure 11.    Files scanned per second (scan-on-read)

Figure 12 shows the relationship between the average file size and scanning throughput. Theoretically, the results equal the files scanned per second times the average file size in each category. With the increase of file size, the scanning throughput increases. In this case, after it reaches 300 MB/sec, it goes flat. Compared with the results in Scenario 1, it is obvious that the scan efficiency is much lower with scan on read. Scan-on-read can provide better protection against viruses, however, the scanning efficiency is lower than scan-on-close. We recommend carefully selecting the scan profile to match your business requirements and performance level.

Line graph showing scan throughput in MB/sec increasing with average file size from 100KB to 100MB, peaking at 308.23 MB/sec before slightly dropping at 200MB. X-axis labeled with file sizes, Y-axis with throughput values, data points marked with blue triangles connected by a blue line.

Figure 12.    Scan throughput (scan-on-read)

The average CPU utilization on a PowerScale cluster is stable around 6% no matter the overall scan throughput or various average file size. For more details, see Figure 13.

Line graph displays average CPU utilization on PowerScale across various average file sizes ranging from 10KB to 200MB. Utilization peaks at 7.50% for 100KB files, then gradually decreases and stabilizes around 6% for larger file sizes, with data points marked by blue triangles connected by a dark blue line.

Figure 13.    Average CPU utilization on PowerScale (scan-on-read)

Scenario 3: Performance impact on metadata read/write

Test methodology

In this scenario, we included the following subscenarios to better understand the performance impact from the CAVA workload:

  • Baseline: There is no CAVA workload. The only workload running on the cluster is metadata intensive read and write.
  • Path excluded: The path for the workload has been excluded from the CAVA configuration.
  • Standard profile: Scan-on-close, scan-on-rename.
  • Strict profile: Scan-on-close, scan-on-rename, scan-on-open.

Note: For comparison, all four subscenarios use the same requested operation rate that is configured in the workload benchmark tool.

Test results

Figure 14 shows the results of the achieved operations per second in the four subscenarios defined in the previous sections. The standard scanning profile, or if we exclude the workload path from the CAVA configuration, has almost no performance impact compared with the baseline result. The standard profile implements scan-on-close, which means that any file newly written or modified is submitted for virus scanning in the background after it is closed by the client. Scan-on-close is not synchronous in the host I/O path, and it slows down the incoming workload. In this case, the incoming workload proceeds unabated.

For the strict profile, the performance drops by 34%. This is because the strict profile adds scan-on-read. Any file not previously scanned, when opened for read by a client, is submitted for scanning at that time and it is synchronously in the host I/O path.

Bar chart comparing achieved operations per second across four configurations: Baseline, Path excluded, Standard profile, and Strict profile. Baseline shows highest operations at 81,567, with a gradual decrease to 78,799 for Standard profile and a sharp drop to 53,868 for Strict profile, accompanied by a delta line indicating percentage decreases up to -34%.

Figure 14.    Achieved operations per second

Figure 15 shows the average latency in the four subscenarios defined in the previous sections. The standard scanning profile, or if we exclude the workload path from the CAVA configuration, has almost the same latency compared with the baseline. In the strict profile, the latency increases by 52%.

Bar chart comparing average latency in milliseconds across four conditions: Baseline, Path excluded, Standard profile, and Strict profile. Blue bars show latency values increasing from 10.8 ms at Baseline to 16.4 ms at Strict profile, while an orange line indicates percentage increase from 0% to 52% relative to Baseline.

Figure 15.    Average latency

Sizing

Overview

In this section, two sizing methodologies are introduced for sizing the number of CAVA servers with a given PowerScale cluster. Both methodologies can only result in an estimated number of the CAVA servers. For more granular sizing that is based on various workloads, see the CEE CAVA calculator described in Using the Common Event Enabler on Windows Platforms.

General best practices for sizing

No matter which methodology to use, we recommend using the following general best practices for sizing:

  • Use Windows machines with at least 16 GB memory and two-core processors.
  • Use a minimum of two CEE or CAVA machines for redundancy.

Methodology 1

Methodology 1 only requires having the cluster node number as the known condition. The number of CAVA servers follows the following algorithm.

The number of CAVA servers = (The number of nodes in a PowerScale cluster) divided by 4.

For example, in a 22 node PowerScale cluster, The number of CAVA servers is:

The number of CAVA servers = 22 divided by 4 = 5.5 or approximately 6.

In this case, we need six CAVA servers.

Methodology 1 only provides an estimated calculation that is based on the total number of nodes as the known condition. This methodology suits both the on-demand scan and scheduled scan. For some scenarios where customers do not have details for the I/O pattern of their workflow, this methodology can be used for sizing.

Methodology 2

Methodology 2 is much more granular than Methodology 1 because it accounts for the various workloads. This methodology only applies to the on-demand scan due to the sizing and because expected performance can vary based on different job performance impact levels.

The assumption for this methodology is as follows:

Typical antivirus scan roundtrip time (RTT) for each CAVA connection = 40ms

The known condition for this methodology is as follows:

Define the total number of the requests per second which will trigger the on demand scan as R

Maximum connections per CAVA servers=20

The algorithm is as follows:

Total scans can be done per second for each CAVA connection = 1000 divided by 40 = 25.

The number of CAVA connections required = R divided by 25.

Minimum number of CAVA servers required = (The number of CAVA connections required) divided by the (Maximum connections per CAVA server) = R divided by 25 times 20 =R divided by 500.

In the following example, the scan profile is standard, the SMB close requests are 1,000 operations per second, and the SMB rename requests are 200 operations per second. The number of CAVA servers required is as follows:

Minimum number of CAVA servers required=(1000+200)/500=1200/500=2.4≈3

Minimum number of CAVA servers required = (1000+200) divided by 500 =1200 divided by 500 = 2.4 which is approximately 3.

General considerations

NANON considerations

Not all nodes on network (NANON) is supported in CAVA configurations. More details are provided as follows:

  • Scheduled scan: This works by default. In OneFS 9.1.0.0, an improved job engine has been implemented to detect a list of nodes not having connection to CAVA servers, and then inform the job engine not to distribute scan jobs to these nodes. This means that only the PowerScale nodes with the front-end connection to the CAVA servers will be triggered to run scheduled scan.
  • On-demand scan or manual scan: If the PowerScale node that triggers the on-demand scan or manual scan has the front-end connection to the CAVA servers, it works. Otherwise, a CELOG event - SW_AVSCAN_CAVA_SERVER_OFFLINE is raised for notification.

The following is an example in which two IP pools are isolated.

Table 7.      IP pools configuration

IP pools

Nodes connected

Pool for business workload

Node 1

Node 2

Node 3

Node 4

Pool for CAVA workload

Node 1

Node 2

Node 3

In this example, the following behavior is expected:

  • If the on-demand scan or manual scan is triggered from Node 1 to Node 3, it works.
  • If the on-demand scan or manual scan is triggered from Node 4, it fails with CELOG event SW_AVSCAN_CAVA_SERVER_OFFLINE.
  • The scheduled scan works properly.

CloudPools considerations

The CAVA configuration in OneFS supports scanning files in CloudPools. By default, scanning of CloudPools files is disabled to prevent the unexpected cost of file callback. To enable this setting, go to the scan zones settings in the CAVA configuration tab. Figure 16 shows the details.

Screenshot of a software settings panel showing scan zone details and scan settings for a system. Key elements include scan options with "Scan on close" and "Scan on rename" set to true, "Scan on read" set to false, and scan settings with "Filter enabled," "Open on fail," and "Scan cloudpool files" (highlighted in yellow) all checked, alongside a dropdown for selecting scan profile set to "Standard."

Figure 16.    Enable scanning CloudPools files

OneFS has a separate, configurable scan timeout for CloudPools files, because scanning a CloudPools stub file may take more time than a regular on cluster file. To configure the timeout value for scanning CloudPools files, go to the settings section under the CAVA configuration tab. See Figure 17 for details.

Screenshot of a settings panel for configuring scan zones and filters with options to enable zones, set scan profiles, and enable filters. Key details include scan timeout, report expiry, and a highlighted scan cloudpool timeout set to 60 seconds, along with fields for maximum file scan size and IP pool selection.AI-generated content may be incorrect.

Figure 17.    Configure timeout value for scanning CloudPools files

When the stub file is read in the kernel level, CloudPools fetches the file content and stores the data in the BCM cache. Because the anti-virus application is the first SMB client to read from the file, it triggers the file-block fetches.

For the scheduled scan, OneFS bypasses the BCM cache because it would continuously overflow the BCM cache, making it worthless. For the on-demand scan or manual scan, the BCM cache would not overflow as often, and the subsequent SMB client read would result in a cache hit.

SyncIQ considerations

Transferring anti-virus file attributes using SyncIQ is not supported. Files without those attributes are scanned again. This means that a file that has been scanned on a source cluster and is then replicated to a secondary cluster will have the same file scanned again even with no changes in the anti-virus definition.

Anti-virus vendor considerations

OneFS supports all anti-virus vendors supported by CEE or CAVA, but some anti-virus applications may behave differently than others.

The details of the infected files are maintained at the anti-virus-application level. We recommend checking log files when the infection is detected. For an infected file, OneFS denies all access to it, but the detailed action is taken by the anti-virus application. Consult your anti-virus vendors or documentation to understand how they deal with the infected files.

Troubleshooting

Troubleshooting

The following sections explain several common error scenarios and general troubleshooting methods.

All CAVA Servers Offline

CEE or DTD Version shows as 0.0.0.0

This situation often means that the cluster cannot contact any CEE server at all. This could be due to a firewall blocking the TCP connection on port 12228 or it could be that the CAVA service is not running.

Screenshot of a system error message displaying status as FAULTED with all CAVA servers offline. Details include CEE and DTD versions at 0.0.0.0, AV vendor marked Unknown, and last signature update timestamped Thu Jan 1 08:00:00 1970.

Figure 18.    All CAVA servers offline

CAVA listens on TCP port 12228 for incoming requests from clients. Use the following methods to check the connectivity.

Use Telnet

From a cluster node that has an IP address in the network pool assigned previously, run the following telnet command to try to connect to the CAVA server:

telnet <CAVA_IP> 12228

Screenshot of a command-line interface showing an attempt to connect to IP address 192.168.1.2 on port 12228 using telnet, which fails to establish a connection. The prompt displays "Trying 192.168.1.2..." followed by a timeout indicated by a single dot and a manual interruption with "^C".

Figure 19.    Use telnet to test connectivity

Enter any character such as the ‘.’ (period) and press enter. If there is no response, the port may be blocked by a firewall, or the CAVA service may not be running.

A listening CAVA server should respond in a manner similar to the following:

Screenshot of a terminal window showing a failed HTTP request with a 400 Bad Request error message from a Microsoft HTTPAPI server. The text includes connection details, date and time, and an HTML response indicating an invalid HTTP verb in the request.

Figure 20.    Normal response from CAVA server

Use Python

If telnet is not available and Python is available, the following short script can also test for an open port:

python -c "x='<CAVA_IP>'; from socket import *; import sys; s=socket(AF_INET,SOCK_STREAM); s.settimeout(2); s.connect((x,12228)); sys.stdout.write('CAVA port is open\n')"

An open port will print “CAVA port is open”:

This shows how an open port will print CAVA port is open.

Figure 21.    Output for an open port

A closed port will return a socket.timeout error:

Screenshot of a Python error traceback showing a socket connection attempt to IP 192.168.1.2 on port 12220. The error occurs at line 228 in socket.py during a socket.settimeout call, indicating a failure to open a connection.

Figure 22.    Output for a closed port

If port 12228 is unreachable, check firewall settings in the network between the cluster and the CAVA server. Use the traceroute command to see all the hops in the network path to the CAVA server.

CEE and DTD Version shows a correct value

In this case, the cluster can contact a CEE server and can receive the CEE and DTD versions from the CAVA server.

Screenshot of a command-line interface showing antivirus status for a system labeled PS1-1. It reports a fault with all CAVA servers offline, system status as "FAULTED," CEE version 8.9.7.1, DTD version 2.3.0, unknown AV vendor, and last signature update timestamped Thu Oct 27 23:36:34 2022.

Figure 23.    DTD and CEE versions show the correct versions

This validates that PowerScale can send heartbeat messages to CAVA and get responses back. This means that there are no firewall ports in the path and that the CAVA service is at least installed and responding to port 12228.

There are several issues that could be potential issues in this situation.

  1. CAVA service is using the Local System account.
  1. CAVA service user account does not have local administrator rights to the scan server.
  2. Service user account does not have the proper permissions on the PowerScale cluster.

CAVA service is using the Local System account

Double check that the service is using a user account and that the password is correct.

CAVA service user account does not have local administrator rights to the scan server

On the Windows server, verify that the user is in the local administrator group. On a Domain Controller, the user normally needs to be in the Domain Administrators group.

You can detect this case by looking into the Event viewer and seeing an entry similar to the following:

Screenshot of an application event log displaying 14,687 events with columns for Level, Date and Time, Source, Event ID, and Task Category. The log highlights an error event from EMC CEE on 10/31/2022 at 9:30:58 AM with Event ID 141, accompanied by a detailed message about missing or inactive third-party antivirus software detected by CAVA.

Figure 24.    Missing local administrator rights

CAVA service user account does not have the proper permissions on the PowerScale cluster

Use the following CLI command to verify that the Service user account is in the AvVendor role:

# isi auth roles members list AvVendor –zone=AvVendor

Manual scans and copying files do not trigger an actual scan

If your test to scan a file does not trigger any actual scan, the first area to investigate is whether the anti-virus software is configured properly.

For example, see if the Real-time protection setting for Windows Defender is turned off. There may be some group policies that may disable the on access scan even after enabling the feature. Double check to make sure that Real-time protection is actually enabled.

Debug CAVA

To debug CAVA directly:

  1. Install DebugView from Sysinternals.
  1. CAVA needs to be configured to output debug messages. This requires adding some keys into the registry. Start by opening up the Registry Editor and navigating to: HKEY_LOCAL_MACHINE\SOFTWARE\EMC\CEE\Configuration. Modify the Debug and Verbose keys and set them to 0x3F.

Screenshot of Registry Editor showing hierarchical folder structure on left pane with keys under SOFTWARE > EMC > CEE > CAVA > Configuration. Right pane lists registry values including CacheSize, Debug, HeartBeatIntervalSecs, HttpPort, InstInitIntervalSecs, NumberOfThreads, and Verbose with corresponding data in hexadecimal format.

Figure 25.    Enable debug and verbose log for the CAVA service

  1. Use the services.msc to restart both the CAVA service and the CEE Monitor service.
  2. DebugView will allow you to view debug messages coming from CAVA itself. DebugView does not need to be installed, it runs as a standalone executable. The program should be run with Administrator rights.
  3. Run the executable for DebugView that matches your OS. For most cases, you will want to use dbgview64.exe.
  4. Under the Capture menu item, make sure that the following items are checked:
    1. Capture Win32
    2. Capture Global Win32
    3. Capture Events

Screenshot of a software debugging tool displaying a dropdown menu under "Capture" with options for capturing Win32, Global Win32, Kernel, Pass-Through, and Events, with several options checked. The background shows a log of timestamped events related to server requests and heartbeat checks, indicating real-time monitoring and troubleshooting of system processes.

Figure 26.    DebugView

  1. You should now see the events showing up in the capture window.

Screenshot of a software debugging tool displaying a log of network communication events with timestamps, process IDs, and debug messages. Entries include HTTP requests, heartbeat checks, and responses with details such as IP addresses, byte counts, and status results, highlighted by alternating row colors and a selected blue row.

Figure 27.    Captures in DebugView

A detailed explanation of how to read CEE debug logs is out of scope for this document. However, just retrying an operation that is failing, such as a scan request, and looking through the messages for any obvious errors can be very helpful in pinpointing where the AV scan process is failing.

Here are some tips for looking through the CAVA logs.

  1. Save the log to a text file to be able to look at the full log messages using File -> Save As
  2. You should see CheckHeartBeat return back NORMAL results
  3. Actual scan requests have a tag that starts with <Args action= "7"
  4. You can look at the CheckFileRequest message and decode the name fields. The fields are Base64 encoded. Simply copy the text string and use a Base64 decoder (https://www.base64decode.org/) and interpret the output as UTF-16LE. For example:

XABcAGMAYQB2AGEALgBwAHMAMQAuAGQAZQBtAG8ALgBsAG8AYwBhAGwAXABDAEgARQBDAEsAJABcAFQAaABpAHMASQBzAEEAUwBhAG0AcABsAGUARgBpAGwAZQAuAGUAeABlAA==

Decodes to:

\\cava.ps1.demo.local\CHECK$\ThisIsASampleFile.exe

To turn off debug, change the Debug and Verbose values in the registry back to 0 and restart the services.

Appendix A – Configure OneFS CAVA Service with Microsoft Windows Defender

Install Common Event Enabler (CEE)

To install CEE:

  1. In the Drivers & Downloads page of Common Event Enabler, select the most recent CEE version for Windows and click the download button:

Screenshot of a software download page for Common Event Enabler showing multiple version options and download links. Key details include version 8.9.7.1 selected, with a highlighted download button for the Windows 32 and 64 bit version, and a table listing release dates and categories for each version.

Figure 28.    Download the Windows version of CEE

  1. After downloading, mount the DVD image by double-clicking the file – EMC_CEE_Pack_8_7_1.iso and it will automount as a DVD.
  2. Install the 64 bit or 32 bit version of CEE as required.
  3. Restart the server to complete the installation process.
  4. After restarting the server, open Event Viewer and navigate to Windows Logs -> Application. Verify that CEE is running by looking for the following four events:

Table 8.      Events

Event source

Event ID

Event description

CEE

142

CAVA has detected that the resident Microsoft Antivirus is running.

CEE

134

The EMC CAVA service, version 8.9.7.1, was successfully started.

CEE

139

CAVA has detected that the Driver Agent is running.

CEE Monitor

0

Service started successfully.

Configure a service account for the CAVA service

When CAVA performs a scan, it does so under the credentials of the service account of the CAVA service. By default, the service account is the Local System account. This account does not exist on the PowerScale cluster. Use the following steps to change the service account to either a user in the Domain or a local user on the PowerScale cluster being scanned.

  1. In the Windows machine on which CEE has been installed, run the following command:

services.msc

  1. Find the service - EMC CAVA, open the properties dialog, select the Log On tab at the top, and modify the service to use a specific account. This account that is specified is required to be a member of the Local Administrators group. This is required to allow CAVA to scan the system process list to find the AV engine process.

Screenshot of a software properties window titled "EMC CAVA Properties (Local Computer)" showing the "Log On" tab. It displays options for logging on as either a Local System account or a specified user account, with fields for username, password, and password confirmation filled in, alongside buttons for OK, Cancel, and Apply.

Figure 29.    Change the service account

Note: It is not recommended to use a domain controller as a CAVA scan server. To gain the ability to scan the process list, you need to add a user to the Domain Admins group which gives them much higher privileges than required to perform an AV scan.

Verify that real-time protection is enabled in Windows Defender

In order for CAVA to perform an on demand scan, the Real-time protection option for Windows Defender must be enabled. You can reach this setting by selecting Windows Settings and then the Windows Defender configuration page:

Screenshot of Windows Defender settings panel showing real-time protection enabled. Panel includes navigation menu with options like Windows Update, Windows Defender, and Recovery, and a button to open Windows Defender application.

Figure 30.    Enable real-time protection for Windows Defender

Testing and verification

Testing to see if AV scanning is working can be done very simply by using the industry approved EICAR test file. This file is a simple text string that is a valid Windows executable and that all AV vendors will recognize as a virus for test purposes.

  1. Download the EICAR file and put it under /ifs.
  1. Initiate a manual scan of the file:

Screenshot of a command-line antivirus scan report showing a failed scan of a single file named "filename.txt." Details include scan policy set to manual, scan duration of 0 seconds, zero infections found, and one scan failure, with timestamps from October 31, 2022.

Figure 31.    Manual scan

Open Event Viewer in Windows, then navigate to Applications and Services Logs, Microsoft, Windows, Windows Defender, and Operational. The following warning message indicates that the CAVA anti-virus software has detected this EICAR testing virus.

Screenshot of a Windows Defender alert detailing detection of a severe virus named Virus:DOS/EICAR_Test_File with ID 2147519003. The alert includes file path, detection origin, type, source, user, and signature and engine version information, emphasizing real-time protection against malware.

Figure 32.    Malware is detected

Note: The path in the Event Viewer should always start with file:\\<fqdn_of_cluster>\CHECK$\.

Tags: