BIND 10 #1263: Finish current experimental DHCP benchmarking work
BIND 10 Development
do-not-reply at isc.org
Thu Oct 20 10:19:27 UTC 2011
#1263: Finish current experimental DHCP benchmarking work
-------------------------------------+-------------------------------------
Reporter: | Owner: johnd
stephen | Status: accepted
Type: task | Milestone: Sprint-
Priority: major | DHCP-20111026
Component: dhcp | Resolution:
Keywords: | Sensitive: 0
Defect Severity: N/A | Sub-Project: DHCP
Feature Depending on Ticket: | Estimated Difficulty: 0
Add Hours to Ticket: 0 | Total Hours: 0
Internal?: 0 |
-------------------------------------+-------------------------------------
Comment (by tomek):
I have couple of comments. In DHCPv6 we need 3 transmission modes:
- sent to All_DHCP_Relay_Agents_and_Servers link-local multicast address.
This is the default mode for clients and so it should be the default for
this tool.
- sent to All_DHCP_Servers. This is the address that relays forward
packets to. Server that supports relays will also listen on this address.
This should be the second (in order of importance) address.
- sent to unicast address. Servers may allow unicast configuration.
There is also rapid-commit option that, when supported by both server and
client, will cause SOLICIT to be answered immediately with REPLY. That is
not needed in first version, but it is something that we should plan to
implement later.
There's one significant concern about how -r option will work. In
particular that it will require interruption to finish operation. That
will make any automated tests infeasible. That is ok if we also implement
method to run test automatically (i.e. execute and conclude without any
intervention, so it could be used from a script or fancier test
environment)
Regarding the -r option, it is useful, but it is not enough. Users will
want to answer several different questions. This option will answer only
"Can my server handle X requests per second?". The other often asked
question is "How long will it take to do X?". This may or may not be
achieved with -n option, depending on the interpretation of its
description.
I think the following usage scenarios are reasonable:
- I want to send X exchanges per second and see if server can handle that
for Y seconds/minutes/hours
- I want to send X exchanges and see how long it will take server to
handle them
To meet those usages, -time (or -t) option should be added that specifies
duration. -r, -n and -t should be allowed to be used together (or in
different combinations).
Other things that we should consider at a later date is turning this into
stress testing. Let's call it --torture or similar. It starts sending data
at some rate and increses it slowly until server starts dropping. That is
the maximum rate the server can handle.
There should be option to conclude (fail) the test if there is a single
drop. We don't want to wait 12 hours to see that 5 seconds after test
started something broke. Not sure how to implement this in the most
convenient way. Maybe --drop-threshold that specified acceptable amount of
dropped traffic? It seems useful to have it specified in both percentage
and absolute numbers.
Besides of using dhcperf as manual tool, it will also be used as automated
test. In that case it should have clearly state if specified pass criteria
are met or not. Something that could be easily parsed by automated
environements.
Make sure that return code will specify status.
For automated test tools it is very convenient to print out command-line
parameters. That's a practical experience. I received many logs that were
useless because it was not possible to reproduce the problem due to
missing information about used parameters.
There is no --version parameter. Tool should also print out its version
when started. See above comment about reproduction concerns.
Another feature that could make this tool much more powerful is the
ability to specify additional options. While it would be great to have
custom option definition framework, for now we can do something much
simpler. A command-line option that specifies extra payload that is
appended to the message. A proper warning "it is user's responsibility to
take care a proper format". For example, to specify that I want to send
option type 100 with length 2 contaiing 0xabcd, I could do: --extra-data
00:64:00:02:ab:cd. This seems simple enough (parse command-line + a single
memcpy will do the trick)
Another useful thing would to be to specify which options client should
request. That is also not too difficult. This is just adding 8 bit(v4) or
16bit (v6) integers to PRL or ORO, respectively. Usage could be simple:
--option 45 --option 5.
It would be useful to elaborate on reply verification. V4 server
responding with NACK is ok or not? What about v6 server sending REPLY with
status-code=no-addrs-avail? That is another thing we could eventually add
as a feature. In some scenarios negative response as considered a proper
one (test passed) and in others it is not (test failed). Make sure that
the verification could be tuneable. For now it can be simple, but it will
be more complex later.
--
Ticket URL: <http://bind10.isc.org/ticket/1263#comment:2>
BIND 10 Development <http://bind10.isc.org>
BIND 10 Development
More information about the bind10-tickets
mailing list