Kea  1.5.0
generic_lease_mgr_benchmark.cc
Go to the documentation of this file.
1 // Copyright (C) 2018 Internet Systems Consortium, Inc. ("ISC")
2 // Copyright (C) 2017 Deutsche Telekom AG.
3 //
4 // Authors: Andrei Pavel <andrei.pavel@qualitance.com>
5 //
6 // Licensed under the Apache License, Version 2.0 (the "License");
7 // you may not use this file except in compliance with the License.
8 // You may obtain a copy of the License at
9 //
10 // http://www.apache.org/licenses/LICENSE-2.0
11 //
12 // Unless required by applicable law or agreed to in writing, software
13 // distributed under the License is distributed on an "AS IS" BASIS,
14 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15 // See the License for the specific language governing permissions and
16 // limitations under the License.
17 
18 #include <config.h>
19 
21 
23 #include <dhcpsrv/testutils/cql_schema.h>
24 
25 #include <chrono>
26 #include <iomanip>
27 #include <iostream>
28 #include <string>
29 #include <vector>
30 
31 using namespace isc::asiolink;
32 using namespace isc::dhcp::test;
33 using namespace std;
34 using namespace std::chrono;
35 
36 namespace isc {
37 namespace dhcp {
38 namespace bench {
39 
40 GenericLeaseMgrBenchmark::GenericLeaseMgrBenchmark()
41  : lmptr_(NULL) {
42 }
43 
45 }
46 
47 void
48 GenericLeaseMgrBenchmark::setUp4(::benchmark::State& state, size_t const& lease_count) {
49  state.PauseTiming();
50  SetUp(state);
51  prepareLeases4(lease_count);
52  state.ResumeTiming();
53 }
54 
55 void
57  size_t const& lease_count) {
58  state.PauseTiming();
59  SetUp(state);
60  prepareLeases4(lease_count);
62  state.ResumeTiming();
63 }
64 
65 void
66 GenericLeaseMgrBenchmark::setUp6(::benchmark::State& state, size_t const& lease_count) {
67  state.PauseTiming();
68  SetUp(state);
69  prepareLeases6(lease_count);
70  state.ResumeTiming();
71 }
72 
73 void
75  size_t const& lease_count) {
76  state.PauseTiming();
77  SetUp(state);
78  prepareLeases6(lease_count);
80  state.ResumeTiming();
81 }
82 
83 void
84 GenericLeaseMgrBenchmark::prepareLeases4(size_t const& lease_count) {
85  leases4_.clear();
86  for (size_t i = 0x0001u; i < 0x0001u + lease_count; ++i) {
87  Lease4Ptr lease(new Lease4());
88  lease->addr_ = IOAddress(i);
89  lease->hwaddr_.reset(new HWAddr(vector<uint8_t>(6, i), HTYPE_ETHER));
90  lease->client_id_ = ClientIdPtr(new ClientId(vector<uint8_t>(8, 2 * i)));
91  lease->valid_lft_ = i;
92  lease->cltt_ = i;
93  lease->subnet_id_ = i;
94  lease->fqdn_rev_ = (i % 2) ? true : false;
95  lease->fqdn_fwd_ = (i % 2) ? true : false;
96  lease->hostname_ = to_string(i) + ".host.com";
97  leases4_.push_back(lease);
98  }
99 }
100 
101 void
103  for (Lease4Ptr const& lease : leases4_) {
104  lmptr_->addLease(lease);
105  }
106 }
107 
108 void
110  for (Lease4Ptr const& lease : leases4_) {
111  lmptr_->updateLease4(lease);
112  }
113 }
114 
115 void
117  for (Lease4Ptr const& lease : leases4_) {
118  lmptr_->getLease4(lease->addr_);
119  }
120 }
121 
122 void
124  for (Lease4Ptr const& lease : leases4_) {
125  const Lease4Collection collection = lmptr_->getLease4(*lease->hwaddr_);
126  }
127 }
128 
129 void
131  for (Lease4Ptr const& lease : leases4_) {
132  lmptr_->getLease4(*lease->hwaddr_, lease->subnet_id_);
133  }
134 }
135 
136 void
138  for (Lease4Ptr const& lease : leases4_) {
139  lmptr_->getLease4(*lease->client_id_);
140  }
141 }
142 
143 void
145  for (Lease4Ptr const& lease : leases4_) {
146  lmptr_->getLease4(*lease->client_id_, lease->subnet_id_);
147  }
148 }
149 
150 void
152  Lease4Collection expired_leases;
153  lmptr_->getExpiredLeases4(expired_leases, leases4_.size());
154 }
155 
156 void
157 GenericLeaseMgrBenchmark::prepareLeases6(size_t const& lease_count) {
158  if (lease_count > 0xfffdu) {
159  cerr << "lease_count <= 0xfffd or change address generation in "
160  "GenericLeaseMgrBenchmark::prepareLeases6()"
161  << endl;
162  }
163  leases6_.clear();
164  for (size_t i = 0x0001u; i < 0x0001u + lease_count; ++i) {
165  stringstream ss;
166  string n_lease;
167  ss << std::hex << i;
168  ss >> n_lease;
169  const string prefix = string("2001:db8::") + n_lease;
170  Lease6Ptr lease(new Lease6());
171  lease->addr_ = IOAddress(prefix);
172  lease->t1_ = i;
173  lease->t2_ = i;
174  lease->type_ = static_cast<Lease::Type>(i % 3); // NA, TA or PD
175  lease->prefixlen_ = i % 128;
176  lease->iaid_ = i;
177  lease->duid_ = DuidPtr(new DUID(vector<uint8_t>(8, i)));
178  lease->preferred_lft_ = i;
179  lease->valid_lft_ = i;
180  lease->cltt_ = i;
181  lease->subnet_id_ = i;
182  lease->fqdn_fwd_ = (i % 2 == 0) ? true : false;
183  lease->fqdn_rev_ = (i % 2 == 0) ? true : false;
184  lease->hostname_ = n_lease + ".host.com";
185  leases6_.push_back(lease);
186  }
187 }
188 
189 void
191  for (Lease6Ptr const& lease : leases6_) {
192  lmptr_->addLease(lease);
193  }
194 }
195 
196 void
198  for (Lease6Ptr const& lease : leases6_) {
199  lmptr_->updateLease6(lease);
200  }
201 }
202 
203 void
205  for (Lease6Ptr const& lease : leases6_) {
206  lmptr_->getLease6(lease->type_, lease->addr_);
207  }
208 }
209 
210 void
212  for (Lease6Ptr const& lease : leases6_) {
213  lmptr_->getLeases6(lease->type_, *lease->duid_, lease->iaid_);
214  }
215 }
216 
217 void
219  for (Lease6Ptr const& lease : leases6_) {
220  lmptr_->getLease6(lease->type_, *lease->duid_, lease->iaid_,
221  lease->subnet_id_);
222  }
223 }
224 
225 void
227  Lease6Collection expired_leases;
228  lmptr_->getExpiredLeases6(expired_leases, leases6_.size());
229 }
230 
235 
236 } // namespace bench
237 } // namespace dhcp
238 } // namespace isc
boost::shared_ptr< DUID > DuidPtr
Definition: duid.h:20
virtual void updateLease4(const Lease4Ptr &lease4)=0
Updates IPv4 lease.
void benchGetLease6_type_duid_iaid_subnetid()
This step retrieves IPv6 leases by (type, duid, iaid, subnet-id) tuple.
Structure that holds a lease for IPv4 address.
Definition: lease.h:256
void benchGetLease4_address()
This step retrieves IPv4 leases by IP address.
void benchInsertLeases4()
This step inserts all IPv4 leases stored in lease4_ into the LeaseMgr.
void benchGetLease4_clientid()
This step retrieves IPv4 leases by client-id.
std::vector< Lease4Ptr > Lease4Collection
A collection of IPv4 leases.
Definition: lease.h:455
Lease6Collection leases6_
List of IPv6 leases (useful during benchmarks)
Holds DUID (DHCPv6 Unique Identifier)
Definition: duid.h:27
virtual void getExpiredLeases6(Lease6Collection &expired_leases, const size_t max_leases) const =0
Returns a collection of expired DHCPv6 leases.
void benchGetExpiredLeases6()
This step retrieves all expired IPv6 leases.
void setUp6(::benchmark::State &state, size_t const &lease_count)
set up code for initializing IPv6 version of a benchmark
void benchGetLease4_hwaddr_subnetid()
This step retrieves IPv4 leases by (hwaddr, subnet-id) tuple.
void benchUpdateLeases4()
This step updates all IPv4 leases stored in lease4_ in the LeaseMgr.
boost::shared_ptr< Lease4 > Lease4Ptr
Pointer to a Lease4 structure.
Definition: lease.h:245
Lease4Collection leases4_
List of IPv4 leases (useful during benchmarks)
void benchUpdateLeases6()
This step updates all IPv6 leases stored in lease6_ in the LeaseMgr.
void prepareLeases4(size_t const &lease_count)
Prepares specified number of IPv4 leases.
Structure that holds a lease for IPv6 address and/or prefix.
Definition: lease.h:471
void benchGetLease4_hwaddr()
This step retrieves IPv4 leases by hardware address.
void benchInsertLeases6()
This step inserts all IPv6 leases stored in lease6_ into the LeaseMgr.
std::vector< Lease6Ptr > Lease6Collection
A collection of IPv6 leases.
Definition: lease.h:604
void benchGetLease6_type_duid_iaid()
This step retrieves IPv6 leases by (type, duid, iaid) tuple.
virtual Lease6Ptr getLease6(Lease::Type type, const isc::asiolink::IOAddress &addr) const =0
Returns existing IPv6 lease for a given IPv6 address.
boost::shared_ptr< ClientId > ClientIdPtr
Shared pointer to a Client ID.
Definition: duid.h:103
void benchGetLease4_clientid_subnetid()
This step retrieves IPv4 leases by (client-id, subnet-id) tuple.
virtual void getExpiredLeases4(Lease4Collection &expired_leases, const size_t max_leases) const =0
Returns a collection of expired DHCPv4 leases.
Ethernet 10Mbps.
Definition: dhcp4.h:56
void setUpWithInserts4(::benchmark::State &state, size_t const &lease_count)
set up code (with lease preinsertion) for initializing IPv4 version of a benchmark.
void setUpWithInserts6(::benchmark::State &state, size_t const &lease_count)
set up code (with lease preinsertion) for initializing IPv6 version of a benchmark.
Defines the logger used by the top-level component of kea-dhcp-ddns.
void prepareLeases6(size_t const &lease_count)
Prepares specified number of IPv6 leases.
Holds Client identifier or client IPv4 address.
Definition: duid.h:111
Hardware type that represents information from DHCPv4 packet.
Definition: hwaddr.h:20
virtual bool addLease(const Lease4Ptr &lease)=0
Adds an IPv4 lease.
virtual Lease4Ptr getLease4(const isc::asiolink::IOAddress &addr) const =0
Returns an IPv4 lease for specified IPv4 address.
void benchGetLease6_type_address()
This step retrieves IPv6 leases by IP address.
LeaseMgr * lmptr_
Pointer to the lease manager being under evaluation.
void benchGetExpiredLeases4()
This step retrieves all expired IPv4 leases.
virtual Lease6Collection getLeases6(Lease::Type type, const DUID &duid, uint32_t iaid) const =0
Returns existing IPv6 leases for a given DUID+IA combination.
boost::shared_ptr< Lease6 > Lease6Ptr
Pointer to a Lease6 structure.
Definition: lease.h:460
virtual void updateLease6(const Lease6Ptr &lease6)=0
Updates IPv6 lease.
void setUp4(::benchmark::State &state, size_t const &lease_count)
set up code for initializing IPv4 version of a benchmark