Results presented here showing top performance of Kea and:
Kea is using the simplest configuration possible.
perfdhcp generates simples DORA/SARR exchanges without any additional options or option requests. Normally we use 500mln of clients (to not repeat any of them) unless it's stated differently in test description.
Each test is being executed 9 times, highest and lowest results are ignored, final result of the test is calculated as average out of 7 remaining results.
History of those results is in History of basic results
Kea can run in special mode, when it's using memfile but writing to the file is disabled. Everything is kept in
memory (similar to keeping memfile on ramdisk).
Kea configuration, traffic specification and testing methodology is the same as for basic results.
Reason why it's in separated set it's because it can't be compared with other backends and we strongly discourage people to use this mode. Kea will loose every saved lease on restart.
Running Kea with memfile with non-persist option set to False is NOT RECOMMENDED!
This section provides insight into how kea works second by second during longer running tests.
Thanks to this data visualization we can:
How all Kea backends operate with higher number of threads. For now testing setup is limited to 12 threads.
Each test has additional description
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 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 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
This page contain history of basic performance tests result. It's kept so we could detect changes in performance.
All charts have their's own scale, if this would be unified for comparision between backends changes in performance of slower backends would be harder to notice. For comparision between backends please go to basic results.
Welcome to Kea performance testing report, this document is generated automatically after each test run.
In section "Testing setup" we describe anything that imply to entire testing. Specific test details and explanation are placed with results.
Testing is done in ISC internal network and it's using 3 systems. Two are running Kea and database backends (specs below) and one is running perfdhcp, all three are connected in one VLAN using 1 gigabit ethernet network.
Tests were executed using:
Configuration vary between tests and test types, details will be described with tests results.
If not stated explicitly in test description Kea is using default configuration values.
If not stated differently in the test there are no releases/renews/rebinds only basic 4 message exchange (SARR and DORA).
Each client perform exchange just once. Number of clients is 500mln.
Messages do not include any additional options except those necessary to get an address from DHCP server.
For all tests we are using traffic generator that was developed by ISC and which is available in Kea sources/packages - perfdhcp
We encourage to visit KEA ARM for more details
Performance testing results are volatile, multiple factors has to be taken to account e.g.: hardware, OS type, network, database location (local, remote), compilation CXX flags etc.
Results shown in this report are what we were able to get inside our testing network - those are NOT, by any means, guaranteed.
Kea development team takes performance and stability very seriously - please report on kea-users mailing lists any irregularities you observed inside your network.
ISC strongly recommends making yourself familiar with Kea performance optimization article.