PEP for Apache HTTP server

This PEP is a native module for Apache HTTP server, written in C++. For more details, see the PEP for Apache HTTP server page.

Used local Apache server configuration

All architectures have LogLevel set to error and use mod_dxa_pep.so (dirxaccess.conf) with this configuration:

# configuration downloaded from the server will never be refreshed
cluster.update.timeout.secs: 0

RedHat Linux and SUSE Linux Enterprise Server

Module: mpm_prefork

 # Initializes with 250 child processes.
 StartServers: 250
 # Maintains at least 20 idle processes.
 MinSpareServers: 20
 # Allows up to 250 idle processes (so none will be killed)
 MaxSpareServers: 250
 # Limits the maximum number of simultaneous requests to 250.
 MaxRequestWorkers: 250
 # Sets the maximum number of server processes to 250.
 ServerLimit: 250
 # Specifies that child processes will not be recycled based on connection limits (no limit).
 MaxConnectionsPerChild: 0

This setup is specifically for performance testing and is currently only supported by the mpm_prefork module, focusing on process-based management rather than threading.

Windows

Include conf/extra/httpd-mpm.conf

Module: mod_mpm_winnt

# WinNT MPM
# ThreadsPerChild: constant number of worker threads in the server process
# MaxRequestsPerChild: maximum  number of requests a server process serves
<IfModule mpm_winnt_module>
    ThreadsPerChild      128
    MaxRequestsPerChild    0
</IfModule>

Test Results

PEP for Apache HTTP server has been deployed on these architectures: RedHat Linux 8, RedHat Linux 9, SUSE Linux Enterprise Server 15 and Windows. In this chapter can be seen results of both testing scenarios for all of these architectures.

RedHat Linux 8

performance.png
Figure 1. RHEL8 Throughput graph for Maximal Performance State

The dual server configuration consistently handles more transactions per second than the single server configuration. The dual server setup achieves a peak performance of approximately 470 transactions per second, while the single server setup stabilizes around 250 transactions per second.

rhel8 stability annotated
Figure 2. Throughput Graph for CPEP RHEL8 Scenario in an Unstable Environment

RedHat Linux 9

performance.png
Figure 3. RHEL8 Throughput graph for Maximal Performance State

The dual server configuration consistently handles more transactions per second than the single server configuration. The dual server setup achieves a peak performance of approximately 470 transactions per second, while the single server setup stabilizes around 250 transactions per second.

rhel9 stability annotated
Figure 4. Throughput Graph for CPEP RHEL9 Scenario in an Unstable Environment

SUSE Linux Enterprise Server

performance.png
Figure 5. Throughput graph for SUSE 15 Maximal Performance State

In Figure 5 the dual server configuration consistently handles more transactions per second than the single server configuration. The dual server setup achieves a peak performance of approximately 480 transactions per second, while the single server setup stabilizes around 250 transactions per second.

Both setups handle the authentication load efficiently, with the dual server setup significantly outperforming the single server setup.

suse15 stability annotated
Figure 6. Throughput Graph for CPEP SUSE 15 Scenario in an Unstable Environment

Windows

performance.png
Figure 7. Throughput graph for Windows Maximal Performance State

In Figure 7 the dual server configuration consistently handles more transactions per second than the single server configuration. The dual server setup achieves a peak performance of approximately 450 transactions per second, while the single server setup stabilizes around 240 transactions per second.

win stability annotated
Figure 8. Throughput Graph for CPEP Windows Scenario in an Unstable Environment