BIND 10 #1481: Optimize size on XFR-out

BIND 10 Development do-not-reply at isc.org
Tue Dec 6 13:01:01 UTC 2011


#1481: Optimize size on XFR-out
-------------------------------------+-------------------------------------
            Reporter:  shane         |                        Owner:
                Type:  enhancement   |                       Status:  new
            Priority:  minor         |                    Milestone:  New
           Component:  xfrout        |  Tasks
           Sensitive:  0             |                     Keywords:
         Sub-Project:  DNS           |              Defect Severity:  N/A
Estimated Difficulty:  0             |  Feature Depending on Ticket:
         Total Hours:  0             |          Add Hours to Ticket:  0
                                     |                    Internal?:  0
-------------------------------------+-------------------------------------
 https://lists.isc.org/pipermail/bind10-dev/2011-December/002851.html

 During review of #1389, it was discovered, that xfrout splits the stream
 into
 messages in an suboptimal way. Currently, it keeps a sum of RR sizes and
 if this
 overflows, it renders the message and starts a new one.

 But, the rendering compresses names. This means few more RRs could fit in,
 if we
 are lucky and there are lots of similar names (which there usually are, at
 last
 the names of the RRs, if not inside the real data).

 This is not really a big deal, it doesn't break anything. But it generates
 more
 messages and can increase the size of the whole stream, as we can't
 compress
 names across message boundary. Having less messages mean having less
 boundaries
 and more compression.

 So, I'd like to ask, is it worth fixing? There surely are ways to do it
 completely right and fill the messages up to the edge. One would be like
 this:

 {{{
 message = <empty message>
 * Iterate over the RRs to transfer:
   * new_message = message
   * new_message.add(rr)
   * try to render
   * if it overflows:
     * send out message
     * message = <empty message>
     * message.add(rr)
   * else:
     * message = new_message
 }}}

 That is, of course, slow. However, if we could save the renderer state and
 could
 „continue“ with another rr added to the message, it could be made fast (it
 wouldn't make the counts in the headers right, but otherwise, we add RRs
 to the
 end of message).

 So, do you think, is it worth fixing?

-- 
Ticket URL: <http://bind10.isc.org/ticket/1481>
BIND 10 Development <http://bind10.isc.org>
BIND 10 Development


More information about the bind10-tickets mailing list