Results presented here show the maximum throughput of Kea using:
Tests here are using simplest configuration possible with default configuration.
ISC's perfdhcp generates simple DORA/SARR exchanges without any additional options or option requests. Normally we configure perfdhcp to simulate up to 500 million different clients (to avoid repeating any client IDs in the course of a single test) unless it's stated differently in the test description.
Kea can run in a special mode, using the memfile lease backend without writing leases to disk. Everything is kept in
memory (similar to keeping memfile on ramdisk).
Kea configuration, traffic specification and testing methodology is otherwise the same as with the basic test.
The reason this data is presented separately is because it can't be compared with the results using the other backends. We strongly discourage people from using this mode in production because Kea will not retain information on existing leases after restarting.
Running Kea with memfile lease backend with persist option set to False is NOT RECOMMENDED!
This test measures how the different Kea backends respond to variation in the number of threads used.
Each test has an additional description. Set of bar charts display results comparison of single runs presented in second part of this page.
How 3000 (30% of all clients) global reservations kept in mysql will decrease performance (leases in memfile)
Reservation optimization: None, default settings
MT settings: 14 threads, queue size 160 per thread
How 3000 (30% of all clients) global reservations kept in mysql will decrease performance (leases in memfile)
Reservation optimization: None, default settings
MT settings: 14 threads, queue size 160 per thread
How 3000 (30% of all clients) global reservations kept in postgresql will decrease performance (leases in memfile)
Reservation optimization: None, default settings
MT settings: 8 threads, queue size 70 per thread
How 3000 (30% of all clients) global reservations kept in postgresql will decrease performance (leases in memfile)
Reservation optimization: None, default settings
MT settings: 6 threads, queue size 70 per thread
How 3000 (30% of all clients) global reservations kept in memfile will decrease performance (leases in memfile)
Reservation optimization: None, default settings
MT settings: 4 threads, queue size 4 per thread
How 3000 (30% of all clients) global reservations kept in memfile will decrease performance (leases in memfile)
Reservation optimization: None, default settings
MT settings: 4 threads, queue size 4 per thread
How 10000 (100% of all clients) global reservations kept in mysql will decrease performance (leases in memfile)
Reservation optimization: None, default settings
MT settings: 14 threads, queue size 160 per thread
How 10000 (100% of all clients) global reservations kept in mysql will decrease performance (leases in memfile)
Reservation optimization: None, default settings
MT settings: 14 threads, queue size 160 per thread
How 10000 (100% of all clients) global reservations kept in postgresql will decrease performance (leases in memfile)
Reservation optimization: None, default settings
MT settings: 8 threads, queue size 70 per thread
How 10000 (100% of all clients) global reservations kept in postgresql will decrease performance (leases in memfile)
Reservation optimization: None, default settings
MT settings: 6 threads, queue size 70 per thread
How 10000 (100% of all clients) global reservations kept in memfile will decrease performance (leases in memfile)
Reservation optimization: None, default settings
MT settings: 4 threads, queue size 4 per thread
How 10000 (100% of all clients) global reservations kept in memfile will decrease performance (leases in memfile)
Reservation optimization: None, default settings
MT settings: 4 threads, queue size 4 per thread
How 3000 (30% of all clients) subnet reservations kept in mysql will decrease performance (leases in memfile)
Reservation optimization: None, default settings
MT settings: 14 threads, queue size 160 per thread
How 3000 (30% of all clients) subnet reservations kept in mysql will decrease performance (leases in memfile)
Reservation optimization: None, default settings
MT settings: 14 threads, queue size 160 per thread
How 3000 (30% of all clients) subnet reservations kept in postgresql will decrease performance (leases in memfile)
Reservation optimization: None, default settings
MT settings: 8 threads, queue size 70 per thread
How 3000 (30% of all clients) subnet reservations kept in postgresql will decrease performance (leases in memfile)
Reservation optimization: None, default settings
MT settings: 6 threads, queue size 70 per thread
How 3000 (30% of all clients) subnet reservations kept in memfile will decrease performance (leases in memfile)
Reservation optimization: None, default settings
MT settings: 4 threads, queue size 4 per thread
How 3000 (30% of all clients) subnet reservations kept in memfile will decrease performance (leases in memfile)
Reservation optimization: None, default settings
MT settings: 4 threads, queue size 4 per thread
How 10000 (100% of all clients) subnet reservations kept in mysql will decrease performance (leases in memfile)
Reservation optimization: None, default settings
MT settings: 14 threads, queue size 160 per thread
How 10000 (100% of all clients) subnet reservations kept in mysql will decrease performance (leases in memfile)
Reservation optimization: None, default settings
MT settings: 14 threads, queue size 160 per thread
How 10000 (100% of all clients) subnet reservations kept in postgresql will decrease performance (leases in memfile)
Reservation optimization: None, default settings
MT settings: 8 threads, queue size 70 per thread
How 10000 (100% of all clients) subnet reservations kept in postgresql will decrease performance (leases in memfile)
Reservation optimization: None, default settings
MT settings: 6 threads, queue size 70 per thread
How 10000 (100% of all clients) subnet reservations kept in memfile will decrease performance (leases in memfile)
Reservation optimization: None, default settings
MT settings: 4 threads, queue size 4 per thread
How 10000 (100% of all clients) subnet reservations kept in memfile will decrease performance (leases in memfile)
Reservation optimization: None, default settings
MT settings: 4 threads, queue size 4 per thread
How 3000 (30% of all clients) global reservations kept in mysql will decrease performance (leases in memfile)
Reservation optimization: host-reservation-identifiers set to hw-address, and reservation out-of-pool
MT settings: 14 threads, queue size 160 per thread
How 3000 (30% of all clients) global reservations kept in mysql will decrease performance (leases in memfile)
Reservation optimization: host-reservation-identifiers set to hw-address, and reservation out-of-pool
MT settings: 14 threads, queue size 160 per thread
How 3000 (30% of all clients) global reservations kept in postgresql will decrease performance (leases in memfile)
Reservation optimization: host-reservation-identifiers set to hw-address, and reservation out-of-pool
MT settings: 8 threads, queue size 70 per thread
How 3000 (30% of all clients) global reservations kept in postgresql will decrease performance (leases in memfile)
Reservation optimization: host-reservation-identifiers set to hw-address, and reservation out-of-pool
MT settings: 6 threads, queue size 70 per thread
How 3000 (30% of all clients) global reservations kept in memfile will decrease performance (leases in memfile)
Reservation optimization: host-reservation-identifiers set to hw-address, and reservation out-of-pool
MT settings: 4 threads, queue size 4 per thread
How 3000 (30% of all clients) global reservations kept in memfile will decrease performance (leases in memfile)
Reservation optimization: host-reservation-identifiers set to hw-address, and reservation out-of-pool
MT settings: 4 threads, queue size 4 per thread
How 10000 (100% of all clients) global reservations kept in mysql will decrease performance (leases in memfile)
Reservation optimization: host-reservation-identifiers set to hw-address, and reservation out-of-pool
MT settings: 14 threads, queue size 160 per thread
How 10000 (100% of all clients) global reservations kept in mysql will decrease performance (leases in memfile)
Reservation optimization: host-reservation-identifiers set to hw-address, and reservation out-of-pool
MT settings: 14 threads, queue size 160 per thread
How 10000 (100% of all clients) global reservations kept in postgresql will decrease performance (leases in memfile)
Reservation optimization: host-reservation-identifiers set to hw-address, and reservation out-of-pool
MT settings: 8 threads, queue size 70 per thread
How 10000 (100% of all clients) global reservations kept in postgresql will decrease performance (leases in memfile)
Reservation optimization: host-reservation-identifiers set to hw-address, and reservation out-of-pool
MT settings: 6 threads, queue size 70 per thread
How 10000 (100% of all clients) global reservations kept in memfile will decrease performance (leases in memfile)
Reservation optimization: host-reservation-identifiers set to hw-address, and reservation out-of-pool
MT settings: 4 threads, queue size 4 per thread
How 10000 (100% of all clients) global reservations kept in memfile will decrease performance (leases in memfile)
Reservation optimization: host-reservation-identifiers set to hw-address, and reservation out-of-pool
MT settings: 4 threads, queue size 4 per thread
How 3000 (30% of all clients) subnet reservations kept in mysql will decrease performance (leases in memfile)
Reservation optimization: host-reservation-identifiers set to hw-address, and reservation out-of-pool
MT settings: 14 threads, queue size 160 per thread
How 3000 (30% of all clients) subnet reservations kept in mysql will decrease performance (leases in memfile)
Reservation optimization: host-reservation-identifiers set to hw-address, and reservation out-of-pool
MT settings: 14 threads, queue size 160 per thread
How 3000 (30% of all clients) subnet reservations kept in postgresql will decrease performance (leases in memfile)
Reservation optimization: host-reservation-identifiers set to hw-address, and reservation out-of-pool
MT settings: 8 threads, queue size 70 per thread
How 3000 (30% of all clients) subnet reservations kept in postgresql will decrease performance (leases in memfile)
Reservation optimization: host-reservation-identifiers set to hw-address, and reservation out-of-pool
MT settings: 6 threads, queue size 70 per thread
How 3000 (30% of all clients) subnet reservations kept in memfile will decrease performance (leases in memfile)
Reservation optimization: host-reservation-identifiers set to hw-address, and reservation out-of-pool
MT settings: 4 threads, queue size 4 per thread
How 3000 (30% of all clients) subnet reservations kept in memfile will decrease performance (leases in memfile)
Reservation optimization: host-reservation-identifiers set to hw-address, and reservation out-of-pool
MT settings: 4 threads, queue size 4 per thread
How 10000 (100% of all clients) subnet reservations kept in mysql will decrease performance (leases in memfile)
Reservation optimization: host-reservation-identifiers set to hw-address, and reservation out-of-pool
MT settings: 14 threads, queue size 160 per thread
How 10000 (100% of all clients) subnet reservations kept in mysql will decrease performance (leases in memfile)
Reservation optimization: host-reservation-identifiers set to hw-address, and reservation out-of-pool
MT settings: 14 threads, queue size 160 per thread
How 10000 (100% of all clients) subnet reservations kept in postgresql will decrease performance (leases in memfile)
Reservation optimization: host-reservation-identifiers set to hw-address, and reservation out-of-pool
MT settings: 8 threads, queue size 70 per thread
How 10000 (100% of all clients) subnet reservations kept in postgresql will decrease performance (leases in memfile)
Reservation optimization: host-reservation-identifiers set to hw-address, and reservation out-of-pool
MT settings: 6 threads, queue size 70 per thread
How 10000 (100% of all clients) subnet reservations kept in memfile will decrease performance (leases in memfile)
Reservation optimization: host-reservation-identifiers set to hw-address, and reservation out-of-pool
MT settings: 4 threads, queue size 4 per thread
How 10000 (100% of all clients) subnet reservations kept in memfile will decrease performance (leases in memfile)
Reservation optimization: host-reservation-identifiers set to hw-address, and reservation out-of-pool
MT settings: 4 threads, queue size 4 per thread
How 15000 (150% of all clients) global reservations kept in mysql will decrease performance (leases in memfile)
Reservation optimization: None, default settings
MT settings: 14 threads, queue size 160 per thread
How 15000 (150% of all clients) global reservations kept in mysql will decrease performance (leases in memfile)
Reservation optimization: None, default settings
MT settings: 14 threads, queue size 160 per thread
How 15000 (150% of all clients) global reservations kept in postgresql will decrease performance (leases in memfile)
Reservation optimization: None, default settings
MT settings: 8 threads, queue size 70 per thread
How 15000 (150% of all clients) global reservations kept in postgresql will decrease performance (leases in memfile)
Reservation optimization: None, default settings
MT settings: 6 threads, queue size 70 per thread
How 15000 (150% of all clients) global reservations kept in memfile will decrease performance (leases in memfile)
Reservation optimization: None, default settings
MT settings: 4 threads, queue size 4 per thread
How 15000 (150% of all clients) global reservations kept in memfile will decrease performance (leases in memfile)
Reservation optimization: None, default settings
MT settings: 4 threads, queue size 4 per thread
How 15000 (150% of all clients) subnet reservations kept in mysql will decrease performance (leases in memfile)
Reservation optimization: None, default settings
MT settings: 14 threads, queue size 160 per thread
How 15000 (150% of all clients) subnet reservations kept in mysql will decrease performance (leases in memfile)
Reservation optimization: None, default settings
MT settings: 14 threads, queue size 160 per thread
How 15000 (150% of all clients) subnet reservations kept in postgresql will decrease performance (leases in memfile)
Reservation optimization: None, default settings
MT settings: 8 threads, queue size 70 per thread
How 15000 (150% of all clients) subnet reservations kept in postgresql will decrease performance (leases in memfile)
Reservation optimization: None, default settings
MT settings: 6 threads, queue size 70 per thread
How 15000 (150% of all clients) subnet reservations kept in memfile will decrease performance (leases in memfile)
Reservation optimization: None, default settings
MT settings: 4 threads, queue size 4 per thread
How 15000 (150% of all clients) subnet reservations kept in memfile will decrease performance (leases in memfile)
Reservation optimization: None, default settings
MT settings: 4 threads, queue size 4 per thread
How 15000 (150% of all clients) global reservations kept in mysql will decrease performance (leases in memfile)
Reservation optimization: host-reservation-identifiers set to hw-address, and reservation out-of-pool
MT settings: 14 threads, queue size 160 per thread
How 15000 (150% of all clients) global reservations kept in mysql will decrease performance (leases in memfile)
Reservation optimization: host-reservation-identifiers set to hw-address, and reservation out-of-pool
MT settings: 14 threads, queue size 160 per thread
How 15000 (150% of all clients) global reservations kept in postgresql will decrease performance (leases in memfile)
Reservation optimization: host-reservation-identifiers set to hw-address, and reservation out-of-pool
MT settings: 8 threads, queue size 70 per thread
How 15000 (150% of all clients) global reservations kept in postgresql will decrease performance (leases in memfile)
Reservation optimization: host-reservation-identifiers set to hw-address, and reservation out-of-pool
MT settings: 6 threads, queue size 70 per thread
How 15000 (150% of all clients) global reservations kept in memfile will decrease performance (leases in memfile)
Reservation optimization: host-reservation-identifiers set to hw-address, and reservation out-of-pool
MT settings: 4 threads, queue size 4 per thread
How 15000 (150% of all clients) global reservations kept in memfile will decrease performance (leases in memfile)
Reservation optimization: host-reservation-identifiers set to hw-address, and reservation out-of-pool
MT settings: 4 threads, queue size 4 per thread
How 15000 (150% of all clients) subnet reservations kept in mysql will decrease performance (leases in memfile)
Reservation optimization: host-reservation-identifiers set to hw-address, and reservation out-of-pool
MT settings: 14 threads, queue size 160 per thread
How 15000 (150% of all clients) subnet reservations kept in mysql will decrease performance (leases in memfile)
Reservation optimization: host-reservation-identifiers set to hw-address, and reservation out-of-pool
MT settings: 14 threads, queue size 160 per thread
How 15000 (150% of all clients) subnet reservations kept in postgresql will decrease performance (leases in memfile)
Reservation optimization: host-reservation-identifiers set to hw-address, and reservation out-of-pool
MT settings: 8 threads, queue size 70 per thread
How 15000 (150% of all clients) subnet reservations kept in postgresql will decrease performance (leases in memfile)
Reservation optimization: host-reservation-identifiers set to hw-address, and reservation out-of-pool
MT settings: 6 threads, queue size 70 per thread
How 15000 (150% of all clients) subnet reservations kept in memfile will decrease performance (leases in memfile)
Reservation optimization: host-reservation-identifiers set to hw-address, and reservation out-of-pool
MT settings: 4 threads, queue size 4 per thread
How 15000 (150% of all clients) subnet reservations kept in memfile will decrease performance (leases in memfile)
Reservation optimization: host-reservation-identifiers set to hw-address, and reservation out-of-pool
MT settings: 4 threads, queue size 4 per thread
Each test has an additional description.
Checking if memory usage still grows when there are no new clients, just returning. 10mln unique clients. 4 threads, queue size 4 per thread Memory usage should stop growing after ~1000.
Checking if memory usage still grows when there are no new clients, just returning. 10mln unique clients. 4 threads, queue size 4 per thread Memory usage should stop growing after ~1400.
Checking if memory usage still grows when there are no new clients, just returning. 10mln unique clients. 14 threads, queue size 160 per thread Memory usage should stop growing after ~1000.
Checking if memory usage still grows when there are no new clients, just returning. 10mln unique clients. 14 threads, queue size 160 per thread Memory usage should stop growing after ~1400.
Checking if memory usage still grows when there are no new clients, just returning. 10mln unique clients. 6 threads, queue size 70 per thread Memory usage should stop growing after ~1000.
Checking if memory usage still grows when there are no new clients, just returning. 10mln unique clients. 8 threads, queue size 70 per thread Memory usage should stop growing after ~1400.
Each test has an additional description
How adding 200 subnets will decrease performance.
4 threads, queue size 4 per thread
How adding 200 subnets will decrease performance.
4 threads, queue size 4 per thread
How adding 200 subnets will decrease performance.
14 threads, queue size 160 per thread
How adding 200 subnets will decrease performance.
14 threads, queue size 160 per thread
How adding 200 subnets will decrease performance.
8 threads, queue size 70 per thread
How adding 200 subnets will decrease performance.
8 threads, queue size 70 per thread
Please view the mouseover text for additional test scenario information.
How enabling default legal logging will impact performance
4 threads, queue size 4 per thread
How enabling default legal logging will impact performance
4 threads, queue size 4 per thread
In this tests clients are renewing assigned address immediately after it was assigned. Such behaviour is against protocol but it happens. Lease cache feature help mitigate misbehaving clients effects on Kea. Please comapre traffic details with test below.Multi threading settings:
4 threads, queue size 4 per thread
How enabling lease cache ("cache-threshold": 0.5 on global level) will impact performance, traffic details should be directly compared with charts above with feature disabled.Multi threading settings:
4 threads, queue size 4 per thread
In this tests clients are renewing assigned address immediately after it was assigned. Such behaviour is against protocol but it happens. Lease cache feature help mitigate misbehaving clients effects on Kea. Please comapre traffic details with test below.Multi threading settings:
4 threads, queue size 4 per thread
How enabling lease cache ("cache-threshold": 0.5 on global level) will impact performance, traffic details should be directly compared with charts above with feature disabled.Multi threading settings:
4 threads, queue size 4 per thread
This section provides insight into how Kea performs second by second during longer running tests.
Thanks to this data visualization we can:
Check how Kea response rates changes over longer time of maximum load.
Multi threading settings:
4 threads, queue size 4 per thread
Check how Kea response rates changes over longer time of maximum load.
Multi threading settings:
4 threads, queue size 4 per thread
Check how Kea response rates changes over longer time of maximum load.
Multi threading settings:
14 threads, queue size 160 per thread
Check how Kea response rates changes over longer time of maximum load.
Multi threading settings:
14 threads, queue size 160 per thread
Check how Kea response rates changes over longer time of maximum load.
Multi threading settings:
8 threads, queue size 70 per thread
Check how Kea response rates changes over longer time of maximum load.
Multi threading settings:
6 threads, queue size 70 per thread
Check how Kea response rates changes over longer time sending renew messages.
Multi threading settings:
4 threads, queue size 4 per thread
Check how Kea response rates changes over longer time sending renew messages.
Multi threading settings:
4 threads, queue size 4 per thread
This page contains a history of the baseline performance testing results to help in detecting changes in performance.
All charts have their own scale. Although comparison would be easier if we used the same scale across all charts, it would be harder to see the changes in performance for the slower backends. For comparison between backends please go to baseline results.
Welcome to the Kea performance testing report, this document is generated automatically after each test run.
In section "Testing setup" we describe the common factors that apply to all tests. Specific test details and explanations can be found with the results.
All tests in this report can be divided into two groups. First type (A) is where we are calculating top performance and second (B) is where we are running Kea with different features, settings, longer periods of time while generating traffic calculated in previous tests (A) to observe stability and performance penalties of various configurations and features.
Calculating top performance is multistage process, with couple assumptions:
Testing is performed in ISC's internal network and uses 3 systems. Two are running Kea and database backends (specs below) and one is running perfdhcp. All three are connected to one VLAN using 1 gigabit ethernet network.
Tests were executed using:
Configurations vary between tests and test types, details are described with the test results.
If not stated explicitly in the test description Kea has default configuration values.
Unless stated differently in the test, only the basic 4 message exchange (SARR and DORA) is generated. No release/renew or rebind packets are generated.
Each client performs an exchange just once. Perfdhcp will simulate up to 500 million unique clientIDs so Kea will not recognize any client as returning.
Messages do not include any additional options, except those necessary to get an address from the DHCP server.
We use the traffic generator "perfdhcp" for all tests. "perfdhcp" is developed by ISC and is available in Kea source/packages.
We encourage the user to refer to the KEA ARM for more details.
Performance testing results are volatile, multiple factors have to be taken into account e.g.: hardware, OS type, network, database location (local, remote), compilation CXX flags etc.
The results shown in this report are what we were able to observe within our testing network - they are not necessarily representative of what will be observed in another network.
The Kea development team takes performance and stability very seriously - please report any irregularities you observe on your network to the kea-users mailing list.
ISC strongly recommends making yourself familiar with the Kea performance optimization article.