<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE rfc [
  <!ENTITY nbsp    "&#160;">
  <!ENTITY zwsp   "&#8203;">
  <!ENTITY nbhy   "&#8209;">
  <!ENTITY wj     "&#8288;">
]>
<?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?>
<!-- generated by https://github.com/cabo/kramdown-rfc version 1.7.43 (Ruby 3.2.3) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-lg-bpm-benchmarking-methodology-for-rov-00" category="info" submissionType="IETF" xml:lang="en" version="3">
  <!-- xml2rfc v2v3 conversion 3.35.0 -->
  <front>
    <title abbrev="ROV Benchmarking">Benchmarking Methodology for Route Origin Validation (ROV)</title>
    <seriesInfo name="Internet-Draft" value="draft-lg-bpm-benchmarking-methodology-for-rov-00"/>
    <author initials="L." surname="Liu" fullname="Libin Liu">
      <organization>Zhongguancun Laboratory</organization>
      <address>
        <postal>
          <city>Beijing</city>
          <country>China</country>
        </postal>
        <email>liulb@zgclab.edu.cn</email>
      </address>
    </author>
    <author initials="N." surname="Geng" fullname="Nan Geng">
      <organization>Huawei Technologies</organization>
      <address>
        <postal>
          <city>Beijing</city>
          <country>China</country>
        </postal>
        <email>gengnan@huawei.com</email>
      </address>
    </author>
    <author initials="Y." surname="Chen" fullname="Yanqi Chen">
      <organization>Zhongguancun Laboratory</organization>
      <address>
        <postal>
          <city>Beijing</city>
          <country>China</country>
        </postal>
        <email>chenyq@zgclab.edu.cn</email>
      </address>
    </author>
    <date year="2026" month="November" day="02"/>
    <area>Operations and Management</area>
    <workgroup>BPM</workgroup>
    <abstract>
      <?line 101?>

<t>This document defines a benchmarking methodology for routers that implement Route Origin Validation (ROV). The methodology focuses on device-level behavior, including processing of validated Route Origin Authorization (ROA) payload (VRP) updates, the interaction between ROV and BGP, resource utilization, and the scalability of ROV under varying operational conditions. The procedures described here follow the principles and constraints of the Benchmarking Methodology Working Group (BMWG) and are intended to produce repeatable and comparable results across implementations.</t>
    </abstract>
  </front>
  <middle>
    <?line 105?>

<section anchor="introduction">
      <name>Introduction</name>
      <t>Route Origin Validation (ROV), as specified in <xref target="RFC6811"/>, allows routers to use validated Route Origin Authorization (ROA) information, which is distributed via the RPKI-to-Router (RTR) protocol defined in <xref target="RFC8210"/>, to classify BGP routes as Valid, Invalid, or NotFound. Deployments of ROV continue to increase across networks, and router vendors have implemented ROV processing as part of their control-plane functions.</t>
      <t>While operational experience is growing, there is currently no standardized methodology for measuring the performance impact and behavioral characteristics of ROV on routing devices. As with other protocol features evaluated by the Benchmarking Methodology Working Group (BMWG), a consistent and repeatable test framework is essential for:</t>
      <ul spacing="normal">
        <li>
          <t>Comparing router implementations,</t>
        </li>
        <li>
          <t>Evaluating scalability under controlled conditions,</t>
        </li>
        <li>
          <t>Characterizing the control-plane costs of ROV processing, and</t>
        </li>
        <li>
          <t>Understanding how ROV influences BGP convergence and routing stability.</t>
        </li>
      </ul>
      <t>This document defines a benchmarking methodology for routers that implement ROV, which builds upon the foundational benchmarking principles defined in <xref target="RFC1242"/>, <xref target="RFC2285"/>, <xref target="RFC2544"/>, <xref target="RFC2889"/>, and <xref target="RFC3918"/>. The methodology focuses on the Device Under Test (DUT) and uses controlled, reproducible inputs to isolate the effects of ROV from external dependencies. In particular, the benchmarking framework assumes the presence of an RTR update source, which may be an RPKI Cache Server or an RTR traffic generator capable of delivering synthetic Validated ROA Payloads (VRPs).</t>
      <t>The objective of this document is to define a set of metrics and procedures to quantify:</t>
      <ul spacing="normal">
        <li>
          <t>The latency of ROV state updates within the DUT,</t>
        </li>
        <li>
          <t>The impact of ROV on BGP control-plane performance,</t>
        </li>
        <li>
          <t>The scalability of ROV processing under varying VRP and BGP table sizes, and</t>
        </li>
        <li>
          <t>The resource utilization associated with enabling ROV.</t>
        </li>
      </ul>
      <t>By providing a consistent framework, this document enables vendors, operators, and researchers to evaluate ROV functionality under controlled and repeatable conditions, improving understanding of implementation performance and supporting informed deployment decisions.</t>
      <section anchor="requirements-language">
        <name>Requirements Language</name>
        <t>The key words "<bcp14>MUST</bcp14>", "<bcp14>MUST NOT</bcp14>", "<bcp14>REQUIRED</bcp14>", "<bcp14>SHALL</bcp14>", "<bcp14>SHALL
NOT</bcp14>", "<bcp14>SHOULD</bcp14>", "<bcp14>SHOULD NOT</bcp14>", "<bcp14>RECOMMENDED</bcp14>", "<bcp14>NOT RECOMMENDED</bcp14>",
"<bcp14>MAY</bcp14>", and "<bcp14>OPTIONAL</bcp14>" in this document are to be interpreted as
described in BCP 14 <xref target="RFC2119"/> <xref target="RFC8174"/> when, and only when, they
appear in all capitals, as shown here.</t>
        <?line -18?>

</section>
    </section>
    <section anchor="scope-and-goals">
      <name>Scope and Goals</name>
      <t>This document specifies a laboratory-based benchmarking methodology for evaluating the performance of router implementations of ROV as defined in <xref target="RFC6811"/>. The scope of this benchmarking methodology includes:</t>
      <ul spacing="normal">
        <li>
          <t><strong>ROV processing performance</strong>: Measurement of the time and resources required for a router to process VRP updates received via the RTR protocol.</t>
        </li>
        <li>
          <t><strong>Impact on BGP control-plane performance</strong>: Quantification of how enabling ROV affects BGP convergence times and routing table stability.</t>
        </li>
        <li>
          <t><strong>Scalability under controlled conditions</strong>: Evaluation of the router's ability to handle large VRP sets, rapid VRP churn, and BGP updates influenced by ROV.</t>
        </li>
        <li>
          <t><strong>Resource utilization</strong>: Measurement of system CPU utilization, system memory consumption, and relevant control-plane process load associated with ROV processing.</t>
        </li>
      </ul>
      <t>The goals of this document are:</t>
      <ul spacing="normal">
        <li>
          <t>To define a repeatable, controlled methodology for benchmarking ROV-enabled routers.</t>
        </li>
        <li>
          <t>To provide standardized metrics that allow for comparison across implementations.</t>
        </li>
      </ul>
    </section>
    <section anchor="terminology">
      <name>Terminology</name>
      <t>The terminology used in this document follows the conventions of <xref target="RFC1242"/>, <xref target="RFC2285"/>, and subsequent BMWG publications. The following terms are used with specific meanings in the context of ROV benchmarking.</t>
      <t>Route Origin Validation (ROV): A procedure defined in <xref target="RFC6811"/> that compares the origin AS of a BGP announcement with the set of authorized origins derived from validated ROA objects. ROV results in one of three states: Valid, Invalid, or NotFound.</t>
      <t>Validated ROA Payload (VRP): The processed output from a relying party containing prefix-origin pairs that routers use for ROV decisions. VRPs are transported via the RTR protocol.</t>
      <t>RPKI-to-Router Session: A protocol session between a router and an RPKI Cache Server. In benchmarking, RTR sessions may be emulated or generated using traffic/test tools to deliver synthetic VRP updates.</t>
      <t>ROV Update Processing Latency: The time from when a router receives new VRP data (via RTR) until the updated ROV state is reflected in the router's local Routing Information Base (RIB) or implemented in routing decisions.</t>
      <t>VRP-Triggered Revalidation Latency:
The time interval between completion of VRP installation and the moment all affected prefixes have updated validation states.</t>
      <t>BGP-Triggered ROV Validation Latency:
The time interval between receipt of a BGP UPDATE message and completion of the ROV validation procedure for that route.</t>
      <t>BGP Convergence Time: The time required for the router's control plane to process BGP updates and reach a stable routing state, while ROV validation is active.</t>
      <t>Resource Utilization: System CPU utilization, system memory consumption, and, when observable, per-process utilization of the ROV process and the BGP or routing process while the router performs ROV-related tasks, including processing of VRP updates and applying ROV policy.</t>
      <t>ROV Churn: A burst of VRP changes (e.g., many ROA additions or withdrawals) that may trigger significant revalidation and BGP recalculation, which is used in stress tests.</t>
      <t>ROV Scalability Limit: The maximum number of VRPs, RTR sessions, or ROV-triggered BGP changes that the router can process while maintaining normal operational performance.</t>
    </section>
    <section anchor="test-setup-and-laboratory-environment">
      <name>Test Setup and Laboratory Environment</name>
      <t>This section describes the required test topology, equipment, DUT configuration, RPKI data emulation, and traffic generation conditions. The goal of the test environment is to isolate the DUT and subject it to clearly defined RPKI-RTR and BGP tests, while providing accurate timing and state measurements.</t>
      <section anchor="test-topology">
        <name>Test Topology</name>
        <figure anchor="test-topo">
          <name>The test topology for ROV benchmarking.</name>
          <artwork><![CDATA[
+-------------------+    RTR    +----------------------+
|    RTR Emulator   |---------->|          DUT         |
|(RTR Update Source)|           |     (ROV Enabled)    |
+-------------------+           +----------------------+
                                 /\          /\
                                                          |           | Data-plane Traffic
                              BGP |  +-----------------+    
+---------------------+           |  |      Tester     |
|BGP Traffic Generator|-----------+  |(Data-plane Load)|
+---------------------+              +-----------------+
]]></artwork>
        </figure>
        <t>The test topology consists of four primary components: the DUT, an RPKI-RTR update source, a BGP traffic generator, and a tester for generating data-plane traffic load. The DUT is a router equipped with ROV capabilities, supporting the RPKI-RTR protocol and applying ROV policies to received BGP routes. The RPKI-RTR update source may be either a real RPKI cache implementation running in isolated mode or a dedicated emulator capable of producing arbitrary VRP sets and update patterns. This RTR source connects directly to the DUT using the RTR protocol and provides controlled VRP updates, including serial increments, cache resets, and bursty or delayed update sequences.</t>
        <t>The BGP traffic generator establishes one or more BGP peering sessions with the DUT and is responsible for delivering a full routing table together with controlled withdrawal or re-announcement events. Because IPv4 and IPv6 tables differ in scale and may exercise different implementation paths, the test setup must state the number of IPv4 routes and the number of IPv6 routes separately. A test <bcp14>MAY</bcp14> use a mixed baseline table (for example, 1,000,000 IPv4 routes and 250,000 IPv6 routes) or <bcp14>MAY</bcp14> benchmark each address family identifier (AFI) separately. In either case, the chosen route counts and AFIs under test must remain fixed across repeated runs for the same condition. The generator should be capable of presenting both stable baseline routing conditions and timed ROV-affected prefixes whose validation status will change in response to VRP updates.
A tester is connected to the DUT to introduce controlled data-plane load during benchmarking. When present, the tester should generate stable and deterministic traffic loads so that the impact of forwarding load on ROV processing can be evaluated. When data-plane load is applied, its rate, frame size, traffic pattern, and address-selection rules needs be documented in the test report.</t>
      </section>
      <section anchor="dut-configuration-requirements">
        <name>DUT Configuration Requirements</name>
        <t>The DUT must be configured with ROV enabled on all BGP sessions receiving test routes. The router needs to establish a stable and fully functional RPKI-RTR session with the RTR emulator. To ensure that performance results are attributable solely to ROV behavior, all non-essential features on the DUT, such as additional routing protocols, unnecessary telemetry mechanisms, and unused services, should be disabled. Logging related to ROV may remain enabled for debugging purposes but can be rate-limited to avoid skewing CPU measurements or affecting test repeatability. All system parameters relevant to routing performance, such as multipath behavior or maximum-prefix limits, is suggested to be documented prior to testing.</t>
      </section>
      <section anchor="rtr-data-source-emulation">
        <name>RTR Data Source Emulation</name>
        <t>The RTR emulator is used to generate synthetic VRP data sets with user-defined characteristics. This includes the ability to create arbitrary combinations of prefixes and ASNs, overlapping VRPs, conflicting VRPs, and other edge cases relevant to validation logic. The VRP datasets should mimic realistic global distributions where appropriate, but can also support scaling tests where VRP volumes are substantially higher than today's norm. The data source needs to be able to further support generating controlled bursts of VRP updates, ranging from 100 to 10,000 VRP changes per second, and can allow for both additive updates and withdrawals.</t>
      </section>
      <section anchor="bgp-traffic-generation-requirements">
        <name>BGP Traffic Generation Requirements</name>
        <t>The BGP traffic generator should be able to present the DUT with a stable baseline routing table prior to initiating any benchmark. This ensures that the DUT begins each test run in a known, converged state with predictable CPU and memory utilization. The generator can also provide a set of ROV-affected prefixes whose origin AS can be manipulated in concert with VRP updates from the RTR emulator. These prefixes should span a range of prefix lengths and originate from diverse ASes to reflect realistic routing conditions. The traffic generator can support deterministic convergence triggers, such as the precise injection of BGP updates following a VRP change or the simultaneous application of both BGP and VRP events.</t>
      </section>
      <section anchor="traffic-profile-parameters">
        <name>Traffic Profile Parameters</name>
        <t>When data-plane traffic is used, the following parameters should be specified:</t>
        <ul spacing="normal">
          <li>
            <t>Fixed frame size used for the measurement. For convergence measurements, a small fixed packet size <bcp14>SHOULD</bcp14> be used to improve time resolution. A 128-byte packet at Layer 3 is one practical choice. Other fixed sizes <bcp14>MAY</bcp14> be used when required by the traffic generator or encapsulation overhead, but the selected size needs to be documented.</t>
          </li>
          <li>
            <t>Traffic rate in packets per second (PPS). For convergence measurements, the traffic should use a constant rate so that packet arrival times map directly to time resolution. Burst traffic <bcp14>MAY</bcp14> be used in stress scenarios, but such tests must be reported separately from constant-rate convergence tests.</t>
          </li>
          <li>
            <t>Traffic pattern. For convergence measurements, constant-rate traffic is <bcp14>RECOMMENDED</bcp14>.</t>
          </li>
          <li>
            <t>Source and destination IP address selection rules. When the setup sends one stream per tested prefix, the destination address for that stream should be selected from within the tested prefix. The first usable address is one valid example. The selection rule needs to be documented and applied consistently across runs.</t>
          </li>
          <li>
            <t>Whether traffic matches ROV-affected prefixes.</t>
          </li>
        </ul>
        <t>Each frame size and PPS combination should be reported separately.</t>
      </section>
    </section>
    <section anchor="benchmarking-methodology">
      <name>Benchmarking Methodology</name>
      <t>This section describes the general methodology for benchmarking ROV behavior on a DUT. The goal is to ensure that all tests are repeatable, comparable across different environments, and representative of realistic deployment conditions. The methodology defines how to establish a controlled and stable test environment, how to specify and vary input conditions, and how to measure key performance metrics associated with ROV processing.</t>
      <section anchor="general-considerations">
        <name>General Considerations</name>
        <t>Before any measurements are taken, the DUT must reach a well-defined steady state in which the RPKI-RTR session is fully established, the VRP set has been completely synchronized, and the BGP control plane has converged. A warm-up period is recommended to eliminate any cold-start effects that could bias measurement results.</t>
        <t>All sources of measurement noise should be avoided. Features such as logging, real-time telemetry export, or periodic background tasks can interfere with timing-sensitive measurements; therefore, such features should be disabled or rate-limited during benchmarking. CPU clock scaling, thermal throttling, or other variable-performance modes should be minimized if the test setup allows it.</t>
      </section>
      <section anchor="test-control-and-input-conditions">
        <name>Test Control and Input Conditions</name>
        <t>Accurate benchmarking depends on precise control of the input conditions applied to the DUT. All tests should begin from a consistent baseline consisting of:</t>
        <ul spacing="normal">
          <li>
            <t>A predefined ROA and VRP population, including the total number of ROAs and the total number of resulting VRPs. When synthetic ROAs are used to generate VRPs, the relationship between ROA count and VRP count must be stated.</t>
          </li>
          <li>
            <t>A stable and realistic baseline BGP RIB-in with IPv4 and IPv6 route counts documented separately (for example, 1,000,000 IPv4 routes and 250,000 IPv6 routes in a mixed table, or equivalent AFI-specific baselines).</t>
          </li>
          <li>
            <t>A defined coverage level of the VRP dataset relative to the announced routing space. Coverage <bcp14>SHOULD</bcp14> be reported as the percentage of announced prefixes, or the percentage of announced address space, for which at least one matching VRP exists. The selected coverage definition neds to be stated and applied consistently across runs.</t>
          </li>
          <li>
            <t>Defined structural properties of the VRP dataset, including overlap characteristics. At minimum, the test should specify the fraction or probability that a VRP is covered by another VRP, for example where a more-specific VRP falls within the prefix range of a less-specific VRP. Tests <bcp14>MAY</bcp14> additionally report the distribution of covering depth, prefix lengths, and authorized origin AS diversity when those properties are relevant to the implementation under test.</t>
          </li>
        </ul>
        <t>From this baseline, input variables may be modified to stress different aspects of ROV behavior. These variables include the VRP churn rate, ranging from steady incremental updates to high-intensity bursts, the coverage level of the VRP dataset, the overlap probability among VRPs, and the type of RPKI-RTR updates provided to the DUT, such as incremental updates versus full-table refreshes. Each of these conditions may trigger different processing strategies within the DUT, and therefore needs to be explicitly controlled and documented.</t>
      </section>
      <section anchor="metrics-and-measurements">
        <name>Metrics and Measurements</name>
        <t>Benchmarking ROV behavior requires collecting quantitative performance metrics that reflect how the DUT processes validation information and incorporates it into the BGP decision process. Therefore, this document proposes key performance metrics including ROV update processing latency, ROV validation latency, BGP convergence time, VRP storage size, system CPU and memory utilization, per-process utilization where available, and ROV state rebuild time.</t>
        <t><strong>ROV update processing latency</strong> measures the time from receipt of an RTR update (incremental or full) until the DUT has fully updated its internal validation state. This metric captures the efficiency of ROV data structures and algorithms.</t>
        <t><strong>ROV validation latency</strong> measures the time interval between a router's receipt of a BGP UPDATE message that contains a new or changed route, and the completion of the ROV procedure for that route, producing a validation state of Valid, Invalid, or NotFound. This metric isolates the internal validation step, excluding the larger BGP convergence process, and provides insight into the responsiveness of the DUT's validation engine.</t>
        <t><strong>BGP convergence time</strong> with ROV enabled measures how long the DUT takes to converge on BGP prefixes whose validation states change due to VRP updates. This reflects the real operational behavior of ROV as it interacts with the control plane.</t>
        <t>The <strong>VRP storage size</strong> inside the DUT should also be recorded to evaluate the scalability of the implementation when operating with large VRP datasets. Alongside this, <strong>resource utilization</strong> <bcp14>SHOULD</bcp14> be monitored to identify performance limits or resource-intensive operations triggered by ROV. At minimum, the benchmark should collect system-level CPU utilization and system-level memory consumption. When the DUT exposes process-level counters, the benchmark should also collect utilization for the ROV process and for the BGP process or main routing process.</t>
        <t>A recovery-related measurement, <strong>ROV state rebuild time</strong> after RTR session reset, quantifies the time needed for the DUT to re-establish a complete and correct ROV validation state after an RTR session reset or cache outage. This metric reflects robustness and recovery behavior under fault or restart scenarios.</t>
        <t>Finally, the DUT should be evaluated under high-pressure scenarios by measuring its behavior when processing VRP bursts, such as surges of 100-10,000 VRPs per second. This measurement reveals whether the implementation can sustain abrupt workload increases without dropping updates, stalling, or entering unstable states.</t>
      </section>
    </section>
    <section anchor="benchmark-tests">
      <name>Benchmark Tests</name>
      <t>This section defines the individual benchmark tests used to evaluate the performance and behavior of a DUT implementing ROV. Each test focuses on a specific aspect of the ROV processing pipeline, including VRP ingestion, validation, interaction with BGP, scalability limits, and robustness under stress and failure conditions. All tests assume the laboratory setup and input conditions described previously.</t>
      <section anchor="test-rov-update">
        <name>ROV Update Processing Latency</name>
        <t><strong>Objective</strong>: Measure the latency from the arrival of an RTR PDU until the new VRP information is installed in the DUT's internal ROV tables.</t>
        <t>The <strong>test procedures</strong> for ROV update processing latency are listed below:</t>
        <ol spacing="normal" type="1"><li>
            <t>Prepare baseline state  </t>
            <ul spacing="normal">
              <li>
                <t>Establish RTR session between DUT and the RTR emulator.</t>
              </li>
              <li>
                <t>Preload DUT with a selected baseline VRP size (e.g., 100k VRPs).</t>
              </li>
              <li>
                <t>Ensure BGP is fully converged.</t>
              </li>
            </ul>
          </li>
          <li>
            <t>Inject controlled RTR update  </t>
            <ul spacing="normal">
              <li>
                <t>From the emulator, send a controlled incremental update. The test must state whether the update affects a single VRP or a batch of multiple VRPs.</t>
              </li>
              <li>
                <t>For each changed VRP, document whether the operation is an addition, withdrawal, or modification.</t>
              </li>
              <li>
                <t>Document the expected validation-state change triggered by the update, such as Valid-to-Invalid due to origin-AS mismatch, Valid-to-Invalid due to prefix-length violation, Invalid-to-Valid, Valid-to-NotFound, Invalid-to-NotFound, or NotFound-to-Valid.</t>
              </li>
              <li>
                <t>Alternatively, for full-refresh tests, send a full VRP set replacement PDU sequence and document the number and type of VRP changes contained in the replacement.</t>
              </li>
            </ul>
          </li>
          <li>
            <t>Timestamp PDU transmission  </t>
            <ul spacing="normal">
              <li>
                <t>Record the exact moment the first update PDU is sent.</t>
              </li>
            </ul>
          </li>
          <li>
            <t>Monitor DUT internal state  </t>
            <ul spacing="normal">
              <li>
                <t>Use device instrumentation (API, CLI, or telemetry) to detect the exact moment the VRP table reflects the update.</t>
              </li>
              <li>
                <t>Confirm the VRP entry has been added, removed, or modified as expected.</t>
              </li>
            </ul>
          </li>
          <li>
            <t>Calculate latency  </t>
            <ul spacing="normal">
              <li>
                <t>The latency is the time difference between the moment the RTR PDU is sent and the moment the VRP is applied on the DUT. For batch updates, the report should distinguish first-VRP installation latency, last-VRP installation latency, and aggregate batch processing time when the DUT exposes sufficient instrumentation.</t>
              </li>
            </ul>
          </li>
          <li>
            <t>Repeat for multiple VRP table sizes  </t>
            <ul spacing="normal">
              <li>
                <t>E.g., 50k, 100k, 500k, and 1M VRPs.</t>
              </li>
            </ul>
          </li>
          <li>
            <t>Repeat no less than 10 independent runs per condition  </t>
            <ul spacing="normal">
              <li>
                <t>Compute mean and standard deviation.</t>
              </li>
            </ul>
          </li>
        </ol>
      </section>
      <section anchor="test-rov-validation">
        <name>ROV Validation Latency</name>
        <t><strong>Objective</strong>: Measure how long the DUT takes to apply updated VRPs to the validation states of affected BGP prefixes.</t>
        <t>The <strong>test procedures</strong> for ROV validation latency are listed below:</t>
        <ol spacing="normal" type="1"><li>
            <t>Establish baseline  </t>
            <ul spacing="normal">
              <li>
                <t>Load the baseline BGP table with IPv4 and IPv6 route counts stated explicitly (for example, 1,000,000 IPv4 routes and 250,000 IPv6 routes, or an AFI-specific baseline).</t>
              </li>
              <li>
                <t>Ensure all prefixes have a known baseline validation state.</t>
              </li>
            </ul>
          </li>
          <li>
            <t>Select a controlled prefix set  </t>
            <ul spacing="normal">
              <li>
                <t>Pick a set of prefixes (e.g., 1,000) whose origin AS is tied to specific VRPs.</t>
              </li>
              <li>
                <t>Control and report the distribution of affected prefixes across the validation structure. At minimum, include one scenario in which affected prefixes are localized to the same region of the validation structure (for example, sharing a common covering prefix, trie branch, or address block) and one scenario in which affected prefixes are distributed across different regions.</t>
              </li>
              <li>
                <t>The locality rule, address-family mix, prefix-length distribution, and number of affected prefixes per region needs to be documented.</t>
              </li>
            </ul>
          </li>
          <li>
            <t>Trigger validation update  </t>
            <ul spacing="normal">
              <li>
                <t>Modify VRPs so that these prefixes change validation state (Valid-&gt;Invalid or Invalid-&gt;Valid).</t>
              </li>
              <li>
                <t>The test must document whether each validation change is caused by an origin-AS mismatch, a prefix-length violation, loss of covering VRP, addition of a covering VRP, or another explicitly stated condition.</t>
              </li>
            </ul>
          </li>
          <li>
            <t>Timestamp VRP installation completion  </t>
            <ul spacing="normal">
              <li>
                <t>As measured in <xref target="test-rov-update"/>.</t>
              </li>
            </ul>
          </li>
          <li>
            <t>Monitor DUT validation table  </t>
            <ul spacing="normal">
              <li>
                <t>Continuously query validation state for selected prefixes.</t>
              </li>
              <li>
                <t>Note the timestamp when all prefixes reflect the updated state.</t>
              </li>
            </ul>
          </li>
          <li>
            <t>Compute latency  </t>
            <ul spacing="normal">
              <li>
                <t>The validation latency is the time difference between the moment the VRP installation is completed and the moment all affected validation states have been updated.</t>
              </li>
            </ul>
          </li>
          <li>
            <t>Repeat with varying set sizes  </t>
            <ul spacing="normal">
              <li>
                <t>E.g., 10 prefixes, 100 prefixes, 1,000 prefixes.</t>
              </li>
            </ul>
          </li>
        </ol>
      </section>
      <section anchor="bgp-convergence-with-rov-enabled">
        <name>BGP Convergence with ROV Enabled</name>
        <t><strong>Objective</strong>: Measure BGP convergence time for routes impacted by ROV state changes, and compare ROV-triggered convergence with BGP-only convergence.</t>
        <t>This test includes two cases. The first case measures convergence caused by VRP changes delivered through RTR, where the intent is to trigger ROV revalidation and then observe the resulting BGP behavior. The second case measures the propagation and convergence time of the same BGP routing event with ROV enabled and with ROV disabled.</t>
        <section anchor="case-a-vrp-triggered-bgp-convergence">
          <name>Case A: VRP-triggered BGP convergence</name>
          <t>The <strong>test procedures</strong> for VRP-triggered BGP convergence are listed below:</t>
          <ol spacing="normal" type="1"><li>
              <t>Prepare baseline  </t>
              <ul spacing="normal">
                <li>
                  <t>Establish full-table BGP adjacency.</t>
                </li>
                <li>
                  <t>Enable ROV on the DUT.</t>
                </li>
                <li>
                  <t>Ensure stable initial convergence.</t>
                </li>
              </ul>
            </li>
            <li>
              <t>Select test prefixes  </t>
              <ul spacing="normal">
                <li>
                  <t>Choose prefixes that will transition validation state once VRP updates are applied, such as Valid-to-Invalid or Invalid-to-Valid.</t>
                </li>
                <li>
                  <t>Document the cause of the validation change, such as origin-AS mismatch or prefix-length violation.</t>
                </li>
              </ul>
            </li>
            <li>
              <t>Trigger VRP state change  </t>
              <ul spacing="normal">
                <li>
                  <t>Send VRP modifications via RTR. The purpose of this step is to trigger convergence through VRP changes delivered by RTR and then observe the BGP control-plane behavior that follows from the changed validation state.</t>
                </li>
              </ul>
            </li>
            <li>
              <t>Monitor BGP behavior  </t>
              <ul spacing="normal">
                <li>
                  <t>Observe best-path selection changes.</t>
                </li>
                <li>
                  <t>Timestamp withdrawal, replacement, or re-installation of affected prefixes.</t>
                </li>
              </ul>
            </li>
            <li>
              <t>Measure convergence  </t>
              <ul spacing="normal">
                <li>
                  <t>End-to-end convergence timer: This timer should start when the RTR emulator sends the first relevant VRP update and should end when both the BGP RIB and Forwarding Information Base (FIB) reach stable state. This metric captures RTR delivery, VRP installation, ROV revalidation, and the resulting BGP convergence.</t>
                </li>
                <li>
                  <t>Post-installation BGP convergence timer: This timer should start when the DUT completes installation of the relevant VRP update and should end when both the BGP RIB and FIB reach stable state. This metric isolates BGP convergence after VRP installation.</t>
                </li>
                <li>
                  <t>If only one timer is reported, the report needs to state which timer definition is used.</t>
                </li>
              </ul>
            </li>
            <li>
              <t>Record:  </t>
              <ul spacing="normal">
                <li>
                  <t>Time to withdraw or replace routes that become Invalid.</t>
                </li>
                <li>
                  <t>Time to install or select routes that become Valid.</t>
                </li>
                <li>
                  <t>Time until new best paths stabilize.</t>
                </li>
              </ul>
            </li>
          </ol>
        </section>
        <section anchor="case-b-bgp-triggered-convergence-with-and-without-rov">
          <name>Case B: BGP-triggered convergence with and without ROV</name>
          <t>The <strong>test procedures</strong> for comparing BGP-triggered convergence are listed below:</t>
          <ol spacing="normal" type="1"><li>
              <t>Prepare baseline conditions  </t>
              <ul spacing="normal">
                <li>
                  <t>Prepare two otherwise identical baseline conditions: one with ROV enabled and one with ROV disabled.</t>
                </li>
                <li>
                  <t>Ensure that the baseline BGP table, VRP dataset, DUT configuration, data-plane traffic conditions, and measurement instrumentation are identical unless explicitly varied by the test.</t>
                </li>
              </ul>
            </li>
            <li>
              <t>Inject the BGP event  </t>
              <ul spacing="normal">
                <li>
                  <t>Apply the same BGP event in both conditions.</t>
                </li>
                <li>
                  <t>Example events include announcing a new route, withdrawing a route, changing an origin AS, or changing BGP attributes that affect best-path selection.</t>
                </li>
              </ul>
            </li>
            <li>
              <t>Control affected prefixes and distribution  </t>
              <ul spacing="normal">
                <li>
                  <t>Ensure that the route count, affected prefix set, prefix-length distribution, AFI mix, and structural distribution of affected prefixes are identical between the ROV-enabled and ROV-disabled runs.</t>
                </li>
                <li>
                  <t>If data-plane traffic is used, the traffic rate, frame size, destination-prefix mapping, and address-selection rules must also remain identical.</t>
                </li>
              </ul>
            </li>
            <li>
              <t>Measure convergence time  </t>
              <ul spacing="normal">
                <li>
                  <t>Measure the time from BGP event injection to the point at which both the BGP RIB and FIB reach stable state.</t>
                </li>
                <li>
                  <t>The timer start and timer end conditions must be identical for the ROV-enabled and ROV-disabled runs.</t>
                </li>
              </ul>
            </li>
            <li>
              <t>Record and compare results  </t>
              <ul spacing="normal">
                <li>
                  <t>Record the absolute convergence time for both runs.</t>
                </li>
                <li>
                  <t>Report the relative difference introduced by enabling ROV, including minimum, average, maximum, and at least P95 values across repeated runs.</t>
                </li>
              </ul>
            </li>
          </ol>
        </section>
      </section>
      <section anchor="vrp-scalability-tests">
        <name>VRP Scalability Tests</name>
        <t><strong>Objective</strong>: Evaluate DUT performance with varying VRP table sizes.</t>
        <t>The <strong>test procedures</strong> for VRP scalability tests are listed below:</t>
        <ol spacing="normal" type="1"><li>
            <t>Generate VRP datasets at sizes:  </t>
            <ul spacing="normal">
              <li>
                <t>E.g., 50k, 100k, 500k, 1M.</t>
              </li>
            </ul>
          </li>
          <li>
            <t>Load each dataset into the RTR emulator.</t>
          </li>
          <li>
            <t>For each dataset, measure:  </t>
            <ul spacing="normal">
              <li>
                <t>Full-table synchronization time.</t>
              </li>
              <li>
                <t>VRP update processing latency (from <xref target="test-rov-update"/>).</t>
              </li>
              <li>
                <t>ROV validation latency (from <xref target="test-rov-validation"/>).</t>
              </li>
              <li>
                <t>System memory consumption.</t>
              </li>
              <li>
                <t>System CPU utilization during sync and steady state.</t>
              </li>
              <li>
                <t>Per-process utilization for the ROV process and the BGP or routing process, when available.</t>
              </li>
            </ul>
          </li>
          <li>
            <t>Record failures  </t>
            <ul spacing="normal">
              <li>
                <t>Session drops</t>
              </li>
              <li>
                <t>Timeouts</t>
              </li>
              <li>
                <t>Missing VRPs</t>
              </li>
              <li>
                <t>ROV process crashes</t>
              </li>
            </ul>
          </li>
          <li>
            <t>Repeat 10 times per size for statistical stability.</t>
          </li>
        </ol>
      </section>
      <section anchor="vrp-churn-and-stress-tests">
        <name>VRP Churn and Stress Tests</name>
        <t><strong>Objective</strong>: Stress-test the DUT under rapid VRP changes to measure stability, performance, and correctness.</t>
        <t>The <strong>test procedures</strong> for VRP churn and stress tests are listed below:</t>
        <ol spacing="normal" type="1"><li>
            <t>Baseline setup  </t>
            <ul spacing="normal">
              <li>
                <t>Load a stable VRP table (e.g., 500k).</t>
              </li>
              <li>
                <t>Establish the baseline BGP table with IPv4 and IPv6 route counts stated explicitly.</t>
              </li>
            </ul>
          </li>
          <li>
            <t>Generate controlled churn patterns  </t>
            <ul spacing="normal">
              <li>
                <t>Rapid add or remove spikes: 100-10,000 VRPs per second.</t>
              </li>
              <li>
                <t>Sustained churn: continuous modifications for 5-10 minutes.</t>
              </li>
              <li>
                <t>Mixed churn: adds, removes, and changes simultaneously.</t>
              </li>
            </ul>
          </li>
          <li>
            <t>Measure DUT behavior  </t>
            <ul spacing="normal">
              <li>
                <t>VRP update backlog or queueing.</t>
              </li>
              <li>
                <t>ROV validation delays.</t>
              </li>
              <li>
                <t>System CPU spikes and, when available, spikes in the ROV process and the BGP or routing process.</t>
              </li>
              <li>
                <t>BGP convergence degradation.</t>
              </li>
              <li>
                <t>Missed or dropped VRP updates.</t>
              </li>
            </ul>
          </li>
          <li>
            <t>Check correctness  </t>
            <ul spacing="normal">
              <li>
                <t>Verify that no stale or inconsistent ROV states remain.</t>
              </li>
            </ul>
          </li>
          <li>
            <t>Record crash, stall, or throttling events.</t>
          </li>
        </ol>
      </section>
      <section anchor="resource-utilization">
        <name>Resource Utilization</name>
        <t><strong>Objective</strong>: Measure resource consumption under various ROV workloads.</t>
        <t>The <strong>test procedures</strong> for RTR session behavior tests are listed below:</t>
        <ol spacing="normal" type="1"><li>
            <t>Establish monitoring tools  </t>
            <ul spacing="normal">
              <li>
                <t>System CPU sampling (100-500 ms interval).</t>
              </li>
              <li>
                <t>System memory usage tracking.</t>
              </li>
              <li>
                <t>Per-process sampling for the ROV process and the BGP or routing process, when available.</t>
              </li>
              <li>
                <t>Hardware counters if available.</t>
              </li>
            </ul>
          </li>
          <li>
            <t>Measure under conditions  </t>
            <ul spacing="normal">
              <li>
                <t>Idle ROV.</t>
              </li>
              <li>
                <t>Full VRP sync.</t>
              </li>
              <li>
                <t>VRP churn.</t>
              </li>
              <li>
                <t>BGP convergence triggered by ROV events.</t>
              </li>
            </ul>
          </li>
          <li>
            <t>Record  </t>
            <ul spacing="normal">
              <li>
                <t>System CPU load curves.</t>
              </li>
              <li>
                <t>Peak and steady-state system memory consumption.</t>
              </li>
              <li>
                <t>Process-level load curves for the ROV process and the BGP or routing process, when available.</t>
              </li>
              <li>
                <t>Any evidence of saturation (e.g., 100% CPU, memory exhaustion).</t>
              </li>
            </ul>
          </li>
          <li>
            <t>Identify thresholds  </t>
            <ul spacing="normal">
              <li>
                <t>Points where performance degrades or ROV processing becomes unstable.</t>
              </li>
            </ul>
          </li>
        </ol>
      </section>
      <section anchor="rtr-session-behavior-tests">
        <name>RTR Session Behavior Tests</name>
        <t><strong>Objective</strong>: Evaluate robustness and recovery of DUT under RTR failure and failover scenarios, including both RTR session recovery and the subsequent BGP recalculation caused by restored or changed ROV state.</t>
        <t>The <strong>test procedures</strong> for RTR session behavior tests are listed below:</t>
        <ol spacing="normal" type="1"><li>
            <t>Session reset test  </t>
            <ul spacing="normal">
              <li>
                <t>Establish normal RTR session.</t>
              </li>
              <li>
                <t>Trigger forced session reset from emulator.</t>
              </li>
              <li>
                <t>Measure time to reestablish RTR session, ROV state rebuild time, and time until validation state becomes consistent again.</t>
              </li>
              <li>
                <t>After validation state consistency is restored, measure any resulting BGP recalculation and convergence using the post-installation BGP convergence timer defined in the BGP convergence test.</t>
              </li>
            </ul>
          </li>
          <li>
            <t>Cache failover test  </t>
            <ul spacing="normal">
              <li>
                <t>Configure DUT with two RTR servers (primary + secondary).</t>
              </li>
              <li>
                <t>Terminate primary RTR connection.</t>
              </li>
              <li>
                <t>Measure failover time and data consistency after switch.</t>
              </li>
              <li>
                <t>Measure the time until affected BGP routes reach stable RIB and FIB state after the restored or failover VRP state is applied.</t>
              </li>
            </ul>
          </li>
          <li>
            <t>Full resynchronization timing  </t>
            <ul spacing="normal">
              <li>
                <t>From emulator, force a full Reset Query sequence.</t>
              </li>
              <li>
                <t>Measure full VRP reload time.</t>
              </li>
              <li>
                <t>Measure subsequent ROV-triggered BGP convergence when the resynchronized VRP set changes validation states for installed BGP routes.</t>
              </li>
              <li>
                <t>Compare across different VRP scales.</t>
              </li>
            </ul>
          </li>
          <li>
            <t>Incremental update performance  </t>
            <ul spacing="normal">
              <li>
                <t>Send controlled incremental PDUs.</t>
              </li>
              <li>
                <t>Measure processing latency and correctness.</t>
              </li>
              <li>
                <t>Introduce occasional malformed or unexpected PDUs to test robustness.</t>
              </li>
            </ul>
          </li>
        </ol>
      </section>
    </section>
    <section anchor="reporting-requirements">
      <name>Reporting Requirements</name>
      <t>An ROV benchmarking report must provide enough details to allow reproducibility and meaningful comparison across different DUTs. Each report needs to include the following elements:</t>
      <ul spacing="normal">
        <li>
          <t><strong>Test environment description</strong>: The report must specify the DUT hardware and software versions, the testbed topology, and all ROV-related configuration parameters required to replicate the setup.</t>
        </li>
        <li>
          <t><strong>Input conditions</strong>: The report must document the ROA count, VRP count, VRP coverage relative to the announced routing space, VRP overlap characteristics, the RIB-in size with IPv4 and IPv6 counts stated separately, the presence and rate of VRP churn, and whether RTR updates were incremental or full.</t>
        </li>
        <li>
          <t><strong>Metrics and results</strong>: Each measured metric must include its definition, a brief description of the measurement procedure, and results presented in tabular numerical form (including minimum, average, maximum, and at least P95 values). Graphs <bcp14>MAY</bcp14> be included for clarification.</t>
        </li>
        <li>
          <t><strong>Deviations and anomalies</strong>: Any deviation from the expected behavior must be described, including the conditions under which it occurred and whether the test was repeated.</t>
        </li>
        <li>
          <t><strong>Summary of observations</strong>: The report must include a concise summary of overall DUT performance, scalability limits observed, and any significant effects of enabling ROV on BGP behavior.</t>
        </li>
      </ul>
      <t>In addition, the report is suggested to include, at minimum, the following parameters:</t>
      <ul spacing="normal">
        <li>
          <t>DUT hardware model, CPU architecture, memory size, and software version.</t>
        </li>
        <li>
          <t>Complete DUT configuration relevant to ROV and BGP.</t>
        </li>
        <li>
          <t>Testbed topology description.</t>
        </li>
        <li>
          <t>Total number of ROAs and total number of resulting VRPs.</t>
        </li>
        <li>
          <t>VRP table size.</t>
        </li>
        <li>
          <t>VRP coverage relative to the announced routing space, including the definition used for coverage.</t>
        </li>
        <li>
          <t>VRP overlap characteristics, including the probability or fraction that a VRP is covered by another VRP.</t>
        </li>
        <li>
          <t>VRP churn rate.</t>
        </li>
        <li>
          <t>For VRP update tests, whether each update affects a single VRP or multiple VRPs, and the operation type for each update.</t>
        </li>
        <li>
          <t>For validation-change tests, the validation-change type, such as origin-AS mismatch, prefix-length violation, or loss/addition of a covering VRP.</t>
        </li>
        <li>
          <t>For locality-sensitive tests, whether affected prefixes map to the same or different regions of the validation structure, and the locality rule used.</t>
        </li>
        <li>
          <t>RIB-in size, with IPv4 and IPv6 route counts stated separately.</t>
        </li>
        <li>
          <t>AFIs under test (IPv4, IPv6, or mixed).</t>
        </li>
        <li>
          <t>Number of RTR sessions.</t>
        </li>
        <li>
          <t>RTR timer configuration.</t>
        </li>
        <li>
          <t>Presence and parameters of data-plane traffic (if used), including fixed frame size, PPS rate, traffic pattern, and address-selection rule.</t>
        </li>
        <li>
          <t>ROV policy mode (e.g., reject Invalid).</t>
        </li>
        <li>
          <t>System CPU sampling interval and any process-level sampling interval.</t>
        </li>
        <li>
          <t>Measurement repetition count.</t>
        </li>
        <li>
          <t>For BGP convergence tests, whether the reported timer is end-to-end from VRP update transmission, post-installation BGP convergence, or BGP-triggered convergence with ROV enabled/disabled.</t>
        </li>
      </ul>
      <t>For each metric, the report must provide:</t>
      <ul spacing="normal">
        <li>
          <t>Metric definition.</t>
        </li>
        <li>
          <t>Measurement method.</t>
        </li>
        <li>
          <t>Minimum, average, maximum, and at least P95 values.</t>
        </li>
        <li>
          <t>Number of samples collected.</t>
        </li>
      </ul>
    </section>
    <section anchor="security-considerations">
      <name>Security Considerations</name>
      <t>This document defines a benchmarking methodology for evaluating ROV on routing devices. As such, it does not introduce new protocols, modify existing security mechanisms, or create new vulnerabilities within the RPKI system or BGP itself. All benchmarking activities are intended to take place in isolated laboratory environments. Nevertheless, a number of security considerations apply to the execution and interpretation of the tests described in this document.</t>
      <t>Benchmarking ROV necessarily involves the generation, manipulation, and replay of RPKI objects. These test artifacts <bcp14>MUST NOT</bcp14> be injected into production RPKI repositories, production RPKI caches, or live BGP routing systems. Test-generated RPKI data sets <bcp14>SHOULD</bcp14> be clearly separated from real-world trust anchors, and laboratory RPKI caches <bcp14>SHOULD</bcp14> use isolated test Trust Anchors to prevent accidental propagation.</t>
      <t>Similarly, BGP routing information used in the tests including simulated full tables, invalid prefixes, or artificially crafted origin-AS combinations, <bcp14>MUST NOT</bcp14> leak into production routing domains. All BGP sessions used for testing <bcp14>MUST</bcp14> be confined to a closed environment without external connectivity.</t>
      <t>Tests involving stress conditions, such as high churn rates or large-scale VRP updates, may cause elevated CPU or memory consumption on the DUT. Operators performing such tests <bcp14>SHOULD</bcp14> ensure that the DUT is not simultaneously connected to any production network to avoid unintended service degradation.</t>
    </section>
    <section anchor="implementation-status">
      <name>Implementation Status</name>
      <t>This section summarizes the current implementation and experimental coverage of this methodology, following the reporting approach in <xref target="RFC7942"/>. It provides implementation experience for IETF discussion.</t>
      <t>A prototype implementation of the benchmarking methodology described in this document supports the experiments reported in <xref target="implementation-detail"/>. It uses BIRD <xref target="BIRD"/> as the routing and ROV implementation, the Linux kernel for forwarding, a locally modified BRIO <xref target="BRIO"/> as the RTR source, and Bngblaster <xref target="BNGBLASTER"/> for BGP traffic generation.</t>
      <t>Implemented:</t>
      <ul spacing="normal">
        <li>
          <t>Incremental VRP updates, full-table resynchronization, and localized and distributed ROV validation tests.</t>
        </li>
        <li>
          <t>VRP-triggered BGP convergence and BGP-triggered convergence comparisons with ROV enabled and disabled.</t>
        </li>
        <li>
          <t>VRP scalability, churn and stress, and resource-utilization tests.</t>
        </li>
        <li>
          <t>RTR session recovery, Cache Reset resynchronization, and malformed-PDU handling tests.</t>
        </li>
      </ul>
      <t>Not yet implemented or incomplete:</t>
      <ul spacing="normal">
        <li>
          <t>Comparison of localized and distributed ROV validation workloads with the same number of BGP routes undergoing ROV state changes.</t>
        </li>
        <li>
          <t>Evaluation on additional routing implementations and dedicated hardware routers; the reported experiments use a BIRD-based DUT under WSL2.</t>
        </li>
        <li>
          <t>Primary-to-secondary RTR cache failover measurements. In the current BIRD setup, both caches contribute authorizations concurrently, so loss of one session does not exercise the standby-cache activation required by this scenario.</t>
        </li>
        <li>
          <t>Hardware performance-counter measurements, which are unavailable in the current WSL2 environment.</t>
        </li>
      </ul>
    </section>
    <section anchor="iana-considerations">
      <name>IANA Considerations</name>
      <t>This document has no actions for IANA.</t>
    </section>
  </middle>
  <back>
    <references anchor="sec-combined-references">
      <name>References</name>
      <references anchor="sec-normative-references">
        <name>Normative References</name>
        <reference anchor="RFC2119">
          <front>
            <title>Key words for use in RFCs to Indicate Requirement Levels</title>
            <author fullname="S. Bradner" initials="S." surname="Bradner"/>
            <date month="March" year="1997"/>
            <abstract>
              <t>In many standards track documents several words are used to signify the requirements in the specification. These words are often capitalized. This document defines these words as they should be interpreted in IETF documents. This document specifies an Internet Best Current Practices for the Internet Community, and requests discussion and suggestions for improvements.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="2119"/>
          <seriesInfo name="DOI" value="10.17487/RFC2119"/>
        </reference>
        <reference anchor="RFC8174">
          <front>
            <title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</title>
            <author fullname="B. Leiba" initials="B." surname="Leiba"/>
            <date month="May" year="2017"/>
            <abstract>
              <t>RFC 2119 specifies common key words that may be used in protocol specifications. This document aims to reduce the ambiguity by clarifying that only UPPERCASE usage of the key words have the defined special meanings.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="8174"/>
          <seriesInfo name="DOI" value="10.17487/RFC8174"/>
        </reference>
        <reference anchor="RFC6811">
          <front>
            <title>BGP Prefix Origin Validation</title>
            <author fullname="P. Mohapatra" initials="P." surname="Mohapatra"/>
            <author fullname="J. Scudder" initials="J." surname="Scudder"/>
            <author fullname="D. Ward" initials="D." surname="Ward"/>
            <author fullname="R. Bush" initials="R." surname="Bush"/>
            <author fullname="R. Austein" initials="R." surname="Austein"/>
            <date month="January" year="2013"/>
            <abstract>
              <t>To help reduce well-known threats against BGP including prefix mis- announcing and monkey-in-the-middle attacks, one of the security requirements is the ability to validate the origination Autonomous System (AS) of BGP routes. More specifically, one needs to validate that the AS number claiming to originate an address prefix (as derived from the AS_PATH attribute of the BGP route) is in fact authorized by the prefix holder to do so. This document describes a simple validation mechanism to partially satisfy this requirement. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="6811"/>
          <seriesInfo name="DOI" value="10.17487/RFC6811"/>
        </reference>
        <reference anchor="RFC8210">
          <front>
            <title>The Resource Public Key Infrastructure (RPKI) to Router Protocol, Version 1</title>
            <author fullname="R. Bush" initials="R." surname="Bush"/>
            <author fullname="R. Austein" initials="R." surname="Austein"/>
            <date month="September" year="2017"/>
            <abstract>
              <t>In order to verifiably validate the origin Autonomous Systems and Autonomous System Paths of BGP announcements, routers need a simple but reliable mechanism to receive Resource Public Key Infrastructure (RFC 6480) prefix origin data and router keys from a trusted cache. This document describes a protocol to deliver them.</t>
              <t>This document describes version 1 of the RPKI-Router protocol. RFC 6810 describes version 0. This document updates RFC 6810.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8210"/>
          <seriesInfo name="DOI" value="10.17487/RFC8210"/>
        </reference>
        <reference anchor="RFC1242">
          <front>
            <title>Benchmarking Terminology for Network Interconnection Devices</title>
            <author fullname="S. Bradner" initials="S." surname="Bradner"/>
            <date month="July" year="1991"/>
            <abstract>
              <t>This memo discusses and defines a number of terms that are used in describing performance benchmarking tests and the results of such tests. This memo provides information for the Internet community. It does not specify an Internet standard.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="1242"/>
          <seriesInfo name="DOI" value="10.17487/RFC1242"/>
        </reference>
        <reference anchor="RFC2285">
          <front>
            <title>Benchmarking Terminology for LAN Switching Devices</title>
            <author fullname="R. Mandeville" initials="R." surname="Mandeville"/>
            <date month="February" year="1998"/>
            <abstract>
              <t>This document is intended to provide terminology for the benchmarking of local area network (LAN) switching devices. It extends the terminology already defined for benchmarking network interconnect devices in RFCs 1242 and 1944 to switching devices. This memo provides information for the Internet community. It does not specify an Internet standard of any kind.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="2285"/>
          <seriesInfo name="DOI" value="10.17487/RFC2285"/>
        </reference>
        <reference anchor="RFC2544">
          <front>
            <title>Benchmarking Methodology for Network Interconnect Devices</title>
            <author fullname="S. Bradner" initials="S." surname="Bradner"/>
            <author fullname="J. McQuaid" initials="J." surname="McQuaid"/>
            <date month="March" year="1999"/>
            <abstract>
              <t>This document is a republication of RFC 1944 correcting the values for the IP addresses which were assigned to be used as the default addresses for networking test equipment. This memo provides information for the Internet community.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="2544"/>
          <seriesInfo name="DOI" value="10.17487/RFC2544"/>
        </reference>
        <reference anchor="RFC2889">
          <front>
            <title>Benchmarking Methodology for LAN Switching Devices</title>
            <author fullname="R. Mandeville" initials="R." surname="Mandeville"/>
            <author fullname="J. Perser" initials="J." surname="Perser"/>
            <date month="August" year="2000"/>
            <abstract>
              <t>This document is intended to provide methodology for the benchmarking of local area network (LAN) switching devices. This memo provides information for the Internet community.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="2889"/>
          <seriesInfo name="DOI" value="10.17487/RFC2889"/>
        </reference>
        <reference anchor="RFC3918">
          <front>
            <title>Methodology for IP Multicast Benchmarking</title>
            <author fullname="D. Stopp" initials="D." surname="Stopp"/>
            <author fullname="B. Hickman" initials="B." surname="Hickman"/>
            <date month="October" year="2004"/>
            <abstract>
              <t>The purpose of this document is to describe methodology specific to the benchmarking of multicast IP forwarding devices. It builds upon the tenets set forth in RFC 2544, RFC 2432 and other IETF Benchmarking Methodology Working Group (BMWG) efforts. This document seeks to extend these efforts to the multicast paradigm.</t>
              <t>The BMWG produces two major classes of documents: Benchmarking Terminology documents and Benchmarking Methodology documents. The Terminology documents present the benchmarks and other related terms. The Methodology documents define the procedures required to collect the benchmarks cited in the corresponding Terminology documents. This memo provides information for the Internet community.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="3918"/>
          <seriesInfo name="DOI" value="10.17487/RFC3918"/>
        </reference>
      </references>
      <references anchor="sec-informative-references">
        <name>Informative References</name>
        <reference anchor="RFC7942">
          <front>
            <title>Improving Awareness of Running Code: The Implementation Status Section</title>
            <author fullname="Y. Sheffer" initials="Y." surname="Sheffer"/>
            <author fullname="A. Farrel" initials="A." surname="Farrel"/>
            <date month="July" year="2016"/>
            <abstract>
              <t>This document describes a simple process that allows authors of Internet-Drafts to record the status of known implementations by including an Implementation Status section. This will allow reviewers and working groups to assign due consideration to documents that have the benefit of running code, which may serve as evidence of valuable experimentation and feedback that have made the implemented protocols more mature.</t>
              <t>This process is not mandatory. Authors of Internet-Drafts are encouraged to consider using the process for their documents, and working groups are invited to think about applying the process to all of their protocol specifications. This document obsoletes RFC 6982, advancing it to a Best Current Practice.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="205"/>
          <seriesInfo name="RFC" value="7942"/>
          <seriesInfo name="DOI" value="10.17487/RFC7942"/>
        </reference>
        <reference anchor="BIRD" target="https://bird.nic.cz/">
          <front>
            <title>BIRD Internet Routing Daemon</title>
            <author>
              <organization>CZ.NIC</organization>
            </author>
            <date/>
          </front>
        </reference>
        <reference anchor="BRIO" target="https://github.com/usnistgov/NIST-BRIO">
          <front>
            <title>NIST BGP-RPKI-IO (BRIO)</title>
            <author>
              <organization>National Institute of Standards and Technology</organization>
            </author>
            <date/>
          </front>
        </reference>
        <reference anchor="BNGBLASTER" target="https://rtbrick.github.io/bngblaster/">
          <front>
            <title>Routing Protocol and BNG Blaster</title>
            <author>
              <organization>RtBrick</organization>
            </author>
            <date/>
          </front>
        </reference>
        <reference anchor="RIPE-RIS" target="https://www.ripe.net/analyse/internet-measurements/routing-information-service-ris/">
          <front>
            <title>Routing Information Service (RIS)</title>
            <author>
              <organization>RIPE NCC</organization>
            </author>
            <date/>
          </front>
        </reference>
        <reference anchor="RPKIViews" target="https://rpkiviews.org/">
          <front>
            <title>RPKIViews</title>
            <author initials="J." surname="Snijders" fullname="Job Snijders">
              <organization/>
            </author>
            <date/>
          </front>
        </reference>
        <reference anchor="ROUTINATOR" target="https://github.com/NLnetLabs/routinator">
          <front>
            <title>Routinator</title>
            <author>
              <organization>NLnet Labs</organization>
            </author>
            <date/>
          </front>
        </reference>
        <reference anchor="STAYRTR" target="https://github.com/bgp/stayrtr">
          <front>
            <title>StayRTR</title>
            <author>
              <organization/>
            </author>
            <date/>
          </front>
        </reference>
      </references>
    </references>
    <?line 708?>

<section numbered="false" anchor="ack">
      <name>Acknowledgements</name>
      <t>Many thanks to Giuseppe Fioccola, Christian Giese, and Maria Matejka for their review, comments, and suggestions.</t>
    </section>
    <section numbered="false" anchor="changes">
      <name>Appendix A. Summary of Changes</name>
      <t>This appendix summarizes the major changes introduced during the evolution of this document.</t>
      <t>Versions -00 through -03 were published under the name draft-lg-bmwg-benchmarking-methodology-for-rov. Following the consolidation of the BMWG and IPPM working groups into the Benchmarking and Performance Measurement (BPM) Working Group, the document was renamed to draft-lg-bpm-benchmarking-methodology-for-rov. Accordingly, draft-lg-bpm-benchmarking-methodology-for-rov-00 continues the work of draft-lg-bmwg-benchmarking-methodology-for-rov-03.</t>
      <section numbered="false" anchor="appendix-a1-changes-from-draft-lg-bmwg-benchmarking-methodology-for-rov-03-to-draft-lg-bpm-benchmarking-methodology-for-rov-00">
        <name>Appendix A.1. Changes from draft-lg-bmwg-benchmarking-methodology-for-rov-03 to draft-lg-bpm-benchmarking-methodology-for-rov-00</name>
        <t>The major changes introduced in draft-lg-bpm-benchmarking-methodology-for-rov-00, compared with draft-lg-bmwg-benchmarking-methodology-for-rov-03, are as follows:</t>
        <ul spacing="normal">
          <li>
            <t>Added Appendix B documenting a BIRD-based implementation of the benchmarking methodology and its experimental results.</t>
          </li>
          <li>
            <t>Added an Implementation Status section describing the prototype and its experimental coverage.</t>
          </li>
        </ul>
      </section>
      <section numbered="false" anchor="appendix-a2-changes-from-02-to-03">
        <name>Appendix A.2. Changes from -02 to -03</name>
        <t>Version -03 adds this appendix to summarize the major changes introduced across document revisions and improve revision traceability. 
No technical changes to the benchmarking methodology or benchmark procedures are introduced in this revision.</t>
      </section>
      <section numbered="false" anchor="appendix-a3-changes-from-01-to-02">
        <name>Appendix A.3. Changes from -01 to -02</name>
        <t>The major changes from version -01 to version -02 are as follows:</t>
        <ul spacing="normal">
          <li>
            <t>Expanded the controlled input conditions to distinguish ROA and VRP populations and to characterize VRP coverage relative to the announced routing space and overlap properties within the VRP dataset.</t>
          </li>
          <li>
            <t>Refined the ROV update processing latency test to distinguish single-VRP and batch updates, document addition, withdrawal, and modification operations and the expected validation-state transitions, and report first-VRP installation latency, last-VRP installation latency, and aggregate batch processing time when observable.</t>
          </li>
          <li>
            <t>Refined the ROV validation latency test by introducing the structural distribution of affected prefixes as a controlled variable. The methodology now distinguishes localized and distributed prefix sets and requires the locality rule, AFI mix, prefix-length distribution, and cause of each validation-state change to be documented.</t>
          </li>
          <li>
            <t>Reworked the BGP convergence benchmark into two cases: VRP-triggered BGP convergence and BGP-triggered convergence with and without ROV. The revision also introduced separate end-to-end and post-VRP-installation convergence timers and more explicit controls for comparing ROV-enabled and ROV-disabled runs.</t>
          </li>
          <li>
            <t>Extended RTR session recovery, cache failover, and full resynchronization tests to include the subsequent BGP recalculation and convergence caused by restored or changed ROV state.</t>
          </li>
          <li>
            <t>Expanded the reporting requirements to cover the newly introduced VRP dataset characteristics, update types, validation-change causes, locality conditions, and convergence timer definitions, and refined the use of normative requirement language throughout the methodology.</t>
          </li>
        </ul>
      </section>
      <section numbered="false" anchor="appendix-a4-changes-from-00-to-01">
        <name>Appendix A.4. Changes from -00 to -01</name>
        <t>The major changes from version -00 to version -01 are as follows:</t>
        <ul spacing="normal">
          <li>
            <t>Refined the test topology and baseline BGP input conditions to distinguish IPv4 and IPv6 route counts and to support mixed or AFI-specific benchmarking under fixed and repeatable conditions.</t>
          </li>
          <li>
            <t>Refined the data-plane traffic profile for convergence measurements by specifying a fixed frame size, PPS-based constant-rate traffic, separate treatment of burst traffic, and deterministic source and destination address selection rules.</t>
          </li>
          <li>
            <t>Clarified resource utilization metrics and measurement procedures by distinguishing system-level CPU and memory consumption from per-process utilization of the ROV process and the BGP or routing process, when such counters are available.</t>
          </li>
          <li>
            <t>Updated the scalability, churn, resource utilization, and reporting procedures to consistently document AFIs under test, data-plane traffic parameters, and system-level and process-level resource measurements.</t>
          </li>
        </ul>
      </section>
    </section>
    <section numbered="false" anchor="implementation-detail">
      <name>Appendix B. Implementation Details</name>
      <t>This appendix describes the application of the benchmark tests in <xref target="benchmark-tests"/> to a BIRD-based DUT. It presents the test environment, shared input datasets, measurement procedures, and results.</t>
      <section numbered="false" anchor="report-environment">
        <name>Appendix B.1. Test Environment</name>
        <t>The DUT consists of BIRD for routing and ROV processing, together with the Linux kernel for packet forwarding. BRIO supplies VRPs over the RTR protocol, with local modifications providing first-Prefix-PDU send timestamps and controlled client disconnection. Bngblaster establishes BGP sessions and advertises the baseline and update routes, with a local modification for IPv6 neighbor emulation. A separate ingress sends UDP probes through the DUT; receivers at the emulated BGP peers identify the forwarding next hop. The test environment configuration is summarized in <xref target="fig-test-environment"/>.</t>
        <t>The test setup uses BRIO for direct control over incremental VRP additions and withdrawals in the VRP churn and stress test (<xref target="vrp-churn-and-stress-tests"/>). By comparison, widely used RTR tools, such as Routinator <xref target="ROUTINATOR"/> and StayRTR <xref target="STAYRTR"/>, derive incremental updates by comparing complete VRP sets internally. The additional processing delays transmission, making this approach unsuitable for continuous monitoring in this test.</t>
        <figure anchor="fig-test-environment">
          <name>Test environment configuration.</name>
          <artwork><![CDATA[
+==========================+=================================================+
| Component                | Configuration                                   |
+==========================+=================================================+
| Operating environment    | Linux under WSL2; kernel                        |
|                          | `6.18.33.2-microsoft-standard-WSL2`             |
+--------------------------+-------------------------------------------------+
| CPU                      | Intel Core 5 220H                               |
+--------------------------+-------------------------------------------------+
| Memory available to WSL2 | 15.37 GiB                                       |
+--------------------------+-------------------------------------------------+
| Routing software         | BIRD 2.19.2                                     |
+--------------------------+-------------------------------------------------+
| BGP traffic generator    | Bngblaster 0.9.39, with local modifications     |
|                          |                                                 |
+--------------------------+-------------------------------------------------+
| RTR source               | BRIO b7.1.2, with local modifications           |
+--------------------------+-------------------------------------------------+

]]></artwork>
        </figure>
      </section>
      <section numbered="false" anchor="report-data">
        <name>Appendix B.2. BGP and VRP Data</name>
        <t><strong>Initial BGP data.</strong> Routes are sampled from the RIPE RIS <xref target="RIPE-RIS"/> RRC00 MRT snapshot of 9 September 2026 at 00:00 UTC. Sampling is performed separately for IPv4 and IPv6, with quotas allocated across peers, targeting 1,000,000 IPv4 and 250,000 IPv6 routes. Conversion preserves the original BGP path attributes. Two filters are applied:</t>
        <ul spacing="normal">
          <li>
            <t>Routes whose NEXT_HOP differs from the advertising peer's address are excluded to avoid exceeding the interface capacity of the test setup when emulating additional next hops. The Bngblaster build supports at most 255 TCP-enabled interfaces.</t>
          </li>
          <li>
            <t>Routes with AS_PATH text too long to be displayed in full are excluded to prevent truncation in BIRD's CLI output and RIB change logs.</t>
          </li>
        </ul>
        <t>The resulting baseline contains 999,125 IPv4 and 222,006 IPv6 candidate routes from 99 peers, covering 805,052 distinct prefixes. Different peers' advertisements of the same prefix are retained as separate candidates. All experiments use this BGP baseline.</t>
        <t><strong>Initial VRP data.</strong> VRPs originate from the RPKIViews <xref target="RPKIViews"/> snapshot of 8 September 2026 at 23:47:23 UTC. AS0 records are removed, and additional authorizations are generated to bring the numbers of Invalid and NotFound BGP routes closer together. The resulting baseline contains 1,060,368 VRPs: 820,699 IPv4 and 239,669 IPv6. Experiments use either this complete baseline or sampled subsets.</t>
        <t>The inputs comprise four datasets:</t>
        <ul spacing="normal">
          <li>
            <t><strong>Single-batch VRP updates:</strong> Nested initial sets of 50k, 100k, 500k, and 1M VRPs. Randomly select BGP candidates and change their ROV states until reaching 1,000 VRP operations.</t>
          </li>
          <li>
            <t><strong>Multi-batch VRP updates:</strong> Apply the same generation method over 300 batches, starting with 500k VRPs and targeting 100, 500, or 1,000 operations per batch.</t>
          </li>
          <li>
            <t><strong>Prefix-selected VRP updates:</strong> Select 100, 500, or 1,000 distinct prefixes and change a selected candidate's ROV state for each.</t>
          </li>
          <li>
            <t><strong>BGP updates:</strong> Keep the complete VRP baseline fixed and generate 1,000 BGP operations per workload. Each operation is selected to change the best path in at least one of the configurations with ROV enabled or disabled.</t>
          </li>
        </ul>
        <t>A single ROV transition may require multiple VRP operations and affect additional routes. Consequently, a prefix-selected workload targeting 1,000 prefixes may require more than 1,000 VRP operations, and the resulting ROV state changes may extend to BGP routes for other prefixes.</t>
        <t>The ROV validation latency test in <xref target="test-rov-validation"/> requires both localized and distributed scenarios. The localized scenario draws prefixes from as few IPv4 /8 or IPv6 /32 address regions as needed to meet the target count. The distributed scenario samples prefixes randomly from the entire eligible pool without restricting address regions.</t>
        <t>The BGP update dataset includes mixed workloads and workloads containing a single operation type. The five operation types are:</t>
        <ul spacing="normal">
          <li>
            <t><strong>Withdraw best:</strong> Withdraw the existing best route.</t>
          </li>
          <li>
            <t><strong>Add Valid:</strong> Announce a new route with a Valid ROV state that can become the best path.</t>
          </li>
          <li>
            <t><strong>Add Invalid:</strong> Announce a new Invalid route that can become the best path.</t>
          </li>
          <li>
            <t><strong>Invalid to Valid:</strong> Change an existing Invalid route to Valid so that it becomes the best path.</t>
          </li>
          <li>
            <t><strong>Best to Invalid:</strong> Change the existing best route to Invalid.</t>
          </li>
        </ul>
      </section>
      <section numbered="false" anchor="report-measurement">
        <name>Appendix B.3. Measurement Methods</name>
        <t>The collection methods and observation timestamps for authorization installation, validation queries, routing decisions, and forwarding behavior are summarized in <xref target="fig-measurement-methods"/>.</t>
        <figure anchor="fig-measurement-methods">
          <name>Measurement methods and observation timestamps.</name>
          <artwork><![CDATA[
+========================+=========================+=========================+
| Observable             | Collection method       | Observation time        |
+========================+=========================+=========================+
| VRP installation or    | BIRD VRP change logs    | Timestamp associated    |
| withdrawal             |                         | with the observed log   |
|                        |                         | event                   |
+------------------------+-------------------------+-------------------------+
| ROV state              | BIRD CLI queries for a  | Receipt of the query    |
|                        | prefix and origin ASN   | result                  |
+------------------------+-------------------------+-------------------------+
| RIB changes            | BIRD best-path change   | Timestamp associated    |
|                        | logs                    | with the observed log   |
|                        |                         | event                   |
+------------------------+-------------------------+-------------------------+
| FIB changes            | UDP probes sent through | Receipt of a probe, or  |
|                        | a separate ingress and  | expiry of its           |
|                        | received at candidate   | observation deadline    |
|                        | next hops               | where applicable        |
+------------------------+-------------------------+-------------------------+

]]></artwork>
        </figure>
        <t>The collector queries ROV states through BIRD's command-line interface over a persistent UNIX domain socket connection. It sends query commands in groups and receives all replies before submitting the next group. In the ordinary convergence experiments, a new observation is compared with the previous state, and only a state change creates an event.</t>
        <t>FIB probes are sent continuously at the configured aggregate packet rate, without waiting for the preceding probe to arrive. In the ordinary convergence experiments, a probe with no reception within one second produces a no-reception observation. The observed forwarding state is compared with the previous state, and only a change creates a new event.</t>
        <t>Some experiments measure short intervals that are particularly sensitive to pauses in the measurement process. The measurement software therefore disables Python's automatic garbage collection during timed collection in all experiments and restores its previous setting afterward.</t>
      </section>
      <section numbered="false" anchor="report-conventions">
        <name>Appendix B.4. General Conventions</name>
        <t>ROV queries use a default group size of eight commands. Convergence experiments use a ten-second quiet period and, where forwarding is monitored, an aggregate probe limit of 10,000 packets/s with a one-second packet deadline. Collection stops after the quiet period, with pending logs and events drained. In ordinary convergence experiments, expected-state matching and final correctness checks are performed after timed collection. The reported last-change endpoint excludes the subsequent quiet period. The VRP churn and stress test (<xref target="vrp-churn-and-stress-tests"/>) retains pending targets across subsequent batches and checks their completion periodically during collection. The RTR session behavior tests (<xref target="rtr-session-behavior-tests"/>) additionally require scenario-specific protocol events.</t>
        <t>The default origin for transmission-based intervals is BRIO's monotonic timestamp immediately before the first successful Prefix PDU send call for the relevant response. Continuous-update VRP latency measurements in <xref target="fig-churn-vrp-latency"/> instead start at the corresponding Serial Notify send time: multiple batches may share one RTR response, preventing its first Prefix PDU from providing a separate origin for each batch. ROV, RIB, and FIB latencies in that experiment use a post-installation origin. Post-installation intervals and scenario-specific origins are defined in the corresponding experiments.</t>
        <t>Latency values are expressed in milliseconds unless another unit is specified. Standard deviation is the sample standard deviation. P95 is the 95th percentile using linear interpolation between ordered samples. The sample count denotes repeated runs, different inputs, or observed batches as specified in each section. An em dash denotes an unavailable measurement; N/A denotes an inapplicable measurement.</t>
      </section>
      <section numbered="false" anchor="report-vrp-update">
        <name>Appendix B.5. ROV Update Processing Latency</name>
        <t>This experiment implements the update-processing test in <xref target="test-rov-update"/> using nested initial sets of 50k, 100k, 500k, and 1M VRPs, with 1,000 VRP operations at each scale. It measures installation latency for incremental and full-table updates. Each condition is repeated ten times. The results are shown in <xref target="fig-vrp-update-latency"/>.</t>
        <figure anchor="fig-vrp-update-latency">
          <name>VRP installation latency for incremental and full-table updates.</name>
          <artwork><![CDATA[
+============+===================+=================+===================+===================+===================+
|  Initial   |     Mean (ms)     |  Std. dev. (ms) |    Minimum (ms)   |    Maximum (ms)   |      P95 (ms)     |
|    VRPs    |                   |                 |                   |                   |                   |
+------------+--------+----------+--------+--------+--------+----------+--------+----------+--------+----------+
|            | Incr.  |   Full   | Incr.  |  Full  | Incr.  |   Full   | Incr.  |   Full   | Incr.  |   Full   |
+============+========+==========+========+========+========+==========+========+==========+========+==========+
|        50k | 47.489 |  160.076 |  2.434 |  3.513 | 45.186 |  154.845 | 51.302 |  164.765 | 51.170 |  164.759 |
+------------+--------+----------+--------+--------+--------+----------+--------+----------+--------+----------+
|       100k | 46.460 |  319.486 |  3.047 |  7.385 | 43.172 |  305.609 | 51.389 |  331.359 | 51.323 |  329.472 |
+------------+--------+----------+--------+--------+--------+----------+--------+----------+--------+----------+
|       500k | 42.628 | 1631.664 |  2.713 | 16.436 | 38.670 | 1598.010 | 47.795 | 1659.967 | 47.325 | 1653.157 |
+------------+--------+----------+--------+--------+--------+----------+--------+----------+--------+----------+
|         1M | 38.704 | 3366.851 |  3.245 | 54.778 | 32.703 | 3299.205 | 44.141 | 3447.183 | 43.178 | 3444.970 |
+------------+--------+----------+--------+--------+--------+----------+--------+----------+--------+----------+

]]></artwork>
        </figure>
        <t>Incr. denotes incremental delivery; Full denotes full-table resynchronization. In <xref target="fig-vrp-update-latency"/>, incremental update latency is short and similar across the tested table sizes, averaging approximately 40–50 ms. Full-table resynchronization latency increases as the VRP table grows.</t>
      </section>
      <section numbered="false" anchor="report-rov-validation">
        <name>Appendix B.6. ROV Validation Latency</name>
        <t>This experiment implements the validation-latency test in <xref target="test-rov-validation"/> using 1,060,368 initial VRPs and updates targeting 100, 500, or 1,000 selected prefixes in localized and distributed groups. With BIRD's ROA-table trie enabled, it measures validation latency from VRP installation completion. The results are shown in <xref target="fig-rov-validation-latency"/>.</t>
        <figure anchor="fig-rov-validation-latency">
          <name>ROV validation latency for localized and distributed workloads.</name>
          <artwork><![CDATA[
+============+=====================+=====================+=====================+=====================+=====================+
|  Selected  |      Mean (ms)      |    Std. dev. (ms)   |     Minimum (ms)    |     Maximum (ms)    |       P95 (ms)      |
|  prefixes  |                     |                     |                     |                     |                     |
+------------+----------+----------+----------+----------+----------+----------+----------+----------+----------+----------+
|            |  Local.  | Distrib. |  Local.  | Distrib. |  Local.  | Distrib. |  Local.  | Distrib. |  Local.  | Distrib. |
+============+==========+==========+==========+==========+==========+==========+==========+==========+==========+==========+
|        100 |   71.847 |  104.377 |    5.244 |   17.235 |   66.315 |   87.147 |   79.560 |  141.479 |   78.635 |  134.556 |
+------------+----------+----------+----------+----------+----------+----------+----------+----------+----------+----------+
|        500 |  133.143 |  622.376 |   11.623 |   38.711 |  118.246 |  565.663 |  157.540 |  705.357 |  151.338 |  681.772 |
+------------+----------+----------+----------+----------+----------+----------+----------+----------+----------+----------+
|      1,000 |  174.169 | 2119.743 |   33.637 |  961.166 |  144.346 |  906.791 |  256.348 | 3934.232 |  231.466 | 3501.198 |
+------------+----------+----------+----------+----------+----------+----------+----------+----------+----------+----------+

]]></artwork>
        </figure>
        <t>Local. denotes localized inputs; Distrib. denotes distributed inputs. As shown in <xref target="fig-rov-validation-latency"/>, ROV validation latency increases with the number of selected prefixes in both scenarios. For the same selected prefix count, localized workloads show lower observed latency. However, selecting the same number of prefixes does not mean that the same number of prefixes is actually affected. For example, both workloads select 1,000 prefixes, but ROV states change for 3,640 prefixes in the localized scenario and 23,777 prefixes in the distributed scenario. The longer latency in the distributed scenario is therefore associated with both a different prefix distribution and more prefixes to process.</t>
      </section>
      <section numbered="false" anchor="report-bgp-convergence">
        <name>Appendix B.7. BGP Convergence with ROV Enabled</name>
        <t>The following experiments correspond to the two cases in <xref target="bgp-convergence-with-rov-enabled"/>.</t>
        <section numbered="false" anchor="report-vrp-bgp-convergence">
          <name>Appendix B.7.1. Case A: VRP-triggered BGP convergence</name>
          <t>This experiment implements the test in <xref target="case-a-vrp-triggered-bgp-convergence"/> using 1,060,368 initial VRPs and the distributed workload with 1,000 selected prefixes, requiring 1,230 VRP operations. It monitors RIB and FIB changes. End-to-end and post-installation convergence times are shown in <xref target="fig-vrp-bgp-convergence"/>.</t>
          <figure anchor="fig-vrp-bgp-convergence">
            <name>VRP-triggered BGP convergence.</name>
            <artwork><![CDATA[
+===================+==========+=========+==========+==========+==========+
| Timer             | Mean     | Std.    | Minimum  | Maximum  | P95 (ms) |
|                   | (ms)     | dev.    | (ms)     | (ms)     |          |
|                   |          | (ms)    |          |          |          |
+===================+==========+=========+==========+==========+==========+
| End-to-end        | 5027.552 | 267.088 | 4826.382 | 5736.282 | 5469.557 |
| convergence       |          |         |          |          |          |
+-------------------+----------+---------+----------+----------+----------+
| Post-installation | 4813.556 | 363.372 | 4540.745 | 5703.936 | 5432.527 |
| BGP convergence   |          |         |          |          |          |
+-------------------+----------+---------+----------+----------+----------+

]]></artwork>
          </figure>
          <t>The final FIB change determines the convergence endpoint in all ten runs. Mean end-to-end convergence in <xref target="fig-vrp-bgp-convergence"/> is 5.03 s, of which 4.81 s occurs after VRP installation. Thus, most of the measured convergence interval follows installation, with FIB convergence taking longer than RIB convergence.</t>
        </section>
        <section numbered="false" anchor="report-bgp-update-convergence">
          <name>Appendix B.7.2. Case B: BGP-triggered convergence with and without ROV</name>
          <t>This experiment implements the test in <xref target="case-b-bgp-triggered-convergence-with-and-without-rov"/> with a fixed set of 1,060,368 VRPs and 1,000 BGP operations per workload. One mixed workload and five individual operation-type workloads are replayed with ROV enabled and disabled. RIB and FIB convergence is measured from the first BGP UPDATE send to the last observed change. The results are shown in <xref target="fig-bgp-mixed"/> through <xref target="fig-bgp-best-to-invalid"/>.</t>
          <t><strong>Mixed.</strong></t>
          <figure anchor="fig-bgp-mixed">
            <name>BGP convergence with ROV enabled and disabled: mixed updates.</name>
            <artwork><![CDATA[
+============+===========+==============+==============+===========+
| ROV policy | Mean (ms) | Minimum (ms) | Maximum (ms) |  P95 (ms) |
+============+===========+==============+==============+===========+
| Enabled    | 10591.995 |    10532.102 |    10664.151 | 10662.097 |
+------------+-----------+--------------+--------------+-----------+
| Disabled   | 10580.443 |    10539.504 |    10648.550 | 10632.916 |
+------------+-----------+--------------+--------------+-----------+

]]></artwork>
          </figure>
          <t><strong>Withdraw best.</strong></t>
          <figure anchor="fig-bgp-withdraw-best">
            <name>BGP convergence with ROV enabled and disabled: Withdraw best.</name>
            <artwork><![CDATA[
+============+===========+==============+==============+===========+
| ROV policy | Mean (ms) | Minimum (ms) | Maximum (ms) |  P95 (ms) |
+============+===========+==============+==============+===========+
| Enabled    |  9791.912 |     9168.918 |    11690.974 | 11275.438 |
+------------+-----------+--------------+--------------+-----------+
| Disabled   |  9599.031 |     9066.639 |    10978.189 | 10714.374 |
+------------+-----------+--------------+--------------+-----------+

]]></artwork>
          </figure>
          <t><strong>Add Valid.</strong></t>
          <figure anchor="fig-bgp-add-valid">
            <name>BGP convergence with ROV enabled and disabled: Add Valid.</name>
            <artwork><![CDATA[
+============+===========+==============+==============+===========+
| ROV policy | Mean (ms) | Minimum (ms) | Maximum (ms) |  P95 (ms) |
+============+===========+==============+==============+===========+
| Enabled    | 10158.053 |     9685.791 |    10586.965 | 10506.822 |
+------------+-----------+--------------+--------------+-----------+
| Disabled   | 10361.078 |    10173.760 |    11069.728 | 10893.730 |
+------------+-----------+--------------+--------------+-----------+

]]></artwork>
          </figure>
          <t><strong>Add Invalid.</strong></t>
          <figure anchor="fig-bgp-add-invalid">
            <name>BGP convergence with ROV enabled and disabled: Add Invalid.</name>
            <artwork><![CDATA[
+============+===========+==============+==============+===========+
| ROV policy | Mean (ms) | Minimum (ms) | Maximum (ms) |  P95 (ms) |
+============+===========+==============+==============+===========+
| Enabled    |       N/A |          N/A |          N/A |       N/A |
+------------+-----------+--------------+--------------+-----------+
| Disabled   |  9962.983 |     9685.891 |    10177.751 | 10176.955 |
+------------+-----------+--------------+--------------+-----------+

]]></artwork>
          </figure>
          <t><strong>Invalid to Valid.</strong></t>
          <figure anchor="fig-bgp-invalid-to-valid">
            <name>BGP convergence with ROV enabled and disabled: Invalid to Valid.</name>
            <artwork><![CDATA[
+============+===========+==============+==============+==========+
| ROV policy | Mean (ms) | Minimum (ms) | Maximum (ms) | P95 (ms) |
+============+===========+==============+==============+==========+
| Enabled    |  8686.659 |     8111.456 |     9856.441 | 9621.860 |
+------------+-----------+--------------+--------------+----------+
| Disabled   |  8011.848 |     8005.596 |     8031.975 | 8027.183 |
+------------+-----------+--------------+--------------+----------+

]]></artwork>
          </figure>
          <t><strong>Best to Invalid.</strong></t>
          <figure anchor="fig-bgp-best-to-invalid">
            <name>BGP convergence with ROV enabled and disabled: Best to Invalid.</name>
            <artwork><![CDATA[
+============+===========+==============+==============+==========+
| ROV policy | Mean (ms) | Minimum (ms) | Maximum (ms) | P95 (ms) |
+============+===========+==============+==============+==========+
| Enabled    |  9298.554 |     9105.652 |     9568.952 | 9558.411 |
+------------+-----------+--------------+--------------+----------+
| Disabled   |  8385.576 |     8006.559 |     9898.653 | 9520.511 |
+------------+-----------+--------------+--------------+----------+

]]></artwork>
          </figure>
          <t>The mixed workload produces similar convergence times with ROV enabled and disabled (<xref target="fig-bgp-mixed"/>). For Withdraw best and Add Valid, the operations have similar effects on route selection in both configurations, and the measured convergence times are also similar (<xref target="fig-bgp-withdraw-best"/> and <xref target="fig-bgp-add-valid"/>). For Add Invalid, ROV rejects the added routes, so no RIB or forwarding changes are observed with ROV enabled and no last-change latency is reported (<xref target="fig-bgp-add-invalid"/>). The larger differences occur for Invalid to Valid (<xref target="fig-bgp-invalid-to-valid"/>) and Best to Invalid (<xref target="fig-bgp-best-to-invalid"/>): the validation-state transitions do not change route eligibility with ROV disabled, whereas they require route reselection with ROV enabled. These two workloads therefore show larger differences in convergence time between the configurations.</t>
        </section>
      </section>
      <section numbered="false" anchor="report-vrp-scalability">
        <name>Appendix B.8. VRP Scalability Tests</name>
        <t>This experiment implements the scalability test in <xref target="vrp-scalability-tests"/> using 50k, 100k, 500k, and 1M initial VRPs, with 1,000 VRP operations at each scale. It measures initial synchronization, VRP update latency, validation latency after VRP installation, and BIRD CPU and memory consumption. Each condition is repeated ten times. The results are shown in <xref target="fig-vrp-scalability"/>.</t>
        <figure anchor="fig-vrp-scalability">
          <name>VRP scalability measurements.</name>
          <artwork><![CDATA[
+==========+=================+==========+============+===========+===========+
| Initial  | Full-table      | VRP      | ROV        | BIRD CPU  | BIRD RSS  |
| VRPs     | synchronization | update   | validation | (%)       | (MiB)     |
|          | (ms)            | latency  | latency    |           |           |
|          |                 | (ms)     | (ms)       |           |           |
+==========+=================+==========+============+===========+===========+
| 50k      |          17.104 |   48.578 |    206.269 |    38.366 |   462.971 |
+----------+-----------------+----------+------------+-----------+-----------+
| 100k     |          32.779 |   49.258 |    340.882 |    58.298 |   466.205 |
+----------+-----------------+----------+------------+-----------+-----------+
| 500k     |         188.375 |   44.607 |    789.480 |    66.257 |   501.640 |
+----------+-----------------+----------+------------+-----------+-----------+
| 1M       |         422.649 |   41.032 |   3099.493 |    70.451 |   562.093 |
+----------+-----------------+----------+------------+-----------+-----------+

]]></artwork>
        </figure>
        <t>The CPU column in <xref target="fig-vrp-scalability"/> reports BIRD utilization during initial synchronization, with one fully occupied logical CPU equal to 100%. Memory is BIRD's steady-state resident set size (RSS). Values are reported as means across runs. In this test setup, ROV and BGP processing share a single BIRD process, so their resource usage cannot be measured separately and is reported for BIRD as a whole.</t>
        <t>As shown in <xref target="fig-vrp-scalability"/>, initial synchronization and post-installation ROV validation take longer as the VRP table grows. Mean incremental VRP update latency ranges from 41.032 to 49.258 ms, similar to the update-processing results in <xref target="fig-vrp-update-latency"/>. Mean BIRD CPU utilization during synchronization rises from 38.4% to 70.5%, while steady-state RSS increases from 463 MiB to 562 MiB. RSS varies little across repeated runs at each scale.</t>
      </section>
      <section numbered="false" anchor="report-vrp-churn">
        <name>Appendix B.9. VRP Churn and Stress Tests</name>
        <t>This experiment implements the churn test in <xref target="vrp-churn-and-stress-tests"/> with 500k initial VRPs and 300 batches at one-second intervals, targeting 100, 500, or 1,000 VRP operations per batch. It measures VRP, ROV, RIB, and FIB latency under continuous updates. Only targets predicted to change once over the complete update sequence are monitored. Delivery delays and aggregation of multiple batches into one RTR response can combine or cancel repeated operations. Within the DUT, subsequent updates may also arrive before earlier changes have propagated to routing and forwarding, so intermediate states may produce neither a RIB change log nor a change in the forwarding next hop observed by probes. Targets with repeated changes are therefore excluded from measurement; their updates remain in the submitted workload.</t>
        <t>In practice, continuous updates substantially affected the measurement process. Large numbers of ROV and FIB targets increased the query and probe workload, while high load on the DUT delayed CLI responses and could also delay packet forwarding. BIRD's ROA-table settle timers also defer route revalidation after VRP updates, adding a waiting period before routing and forwarding changes. The measurement procedure therefore includes the following measures to reduce these effects:</t>
        <ul spacing="normal">
          <li>
            <t>Monitor selected batches rather than every batch: ROV, RIB, and FIB targets are selected from batches 10, 20, and every subsequent tenth batch through batch 300. VRP logs are collected for all batches.</t>
          </li>
          <li>
            <t>Measure ROV and FIB in separate runs to reduce interference between CLI queries and forwarding probes.</t>
          </li>
          <li>
            <t>Set ROA-table settle timers to zero for RIB and FIB measurements to remove the additional waiting period before route revalidation.</t>
          </li>
          <li>
            <t>Check completion every five seconds and remove completed ROV/FIB targets to avoid continuing queries and probes for those targets.</t>
          </li>
        </ul>
        <t>Monitoring continues across batch boundaries until the expected state is observed. For each component, the batch endpoint is the latest of the selected targets' first observations of their expected resulting states. A complete batch latency requires all selected targets to be observed. Collection ends after all updates have been submitted and all selected targets have completed, or when the overall timeout expires; final correctness checks follow collection.</t>
        <t>VRP latency starts at the Serial Notify send time because multiple batches may be combined into one RTR response, whose first Prefix PDU cannot provide a separate timing origin for each batch. ROV, RIB, and FIB post-installation latencies start at the last observed VRP change for the corresponding batch. All 30 selected batches at each size have complete ROV, RIB, and FIB matches.</t>
        <t>VRP latency is shown in <xref target="fig-churn-vrp-latency"/>.</t>
        <figure anchor="fig-churn-vrp-latency">
          <name>VRP latency under continuous updates.</name>
          <artwork><![CDATA[
+============+=============+=============+=============+=============+=============+
|   Target   |     Mean    |  Std. dev.  |   Minimum   |   Maximum   |     P95     |
| operations |     (ms)    |     (ms)    |     (ms)    |     (ms)    |     (ms)    |
| per batch  |             |             |             |             |             |
+============+=============+=============+=============+=============+=============+
|    100     |    69.234   |   121.791   |    41.754   |   1856.278  |    61.636   |
+------------+-------------+-------------+-------------+-------------+-------------+
|    500     |    74.930   |   172.700   |    42.722   |   2768.577  |    66.831   |
+------------+-------------+-------------+-------------+-------------+-------------+
|   1,000    |    78.477   |   138.877   |    42.920   |   1901.677  |    76.311   |
+------------+-------------+-------------+-------------+-------------+-------------+
]]></artwork>
        </figure>
        <t>Post-installation ROV latency is shown in <xref target="fig-churn-rov-latency"/>.</t>
        <figure anchor="fig-churn-rov-latency">
          <name>Post-installation ROV latency under continuous updates.</name>
          <artwork><![CDATA[
+============+=============+=============+=============+=============+=============+
|   Target   |     Mean    |  Std. dev.  |   Minimum   |   Maximum   |     P95     |
| operations |     (ms)    |     (ms)    |     (ms)    |     (ms)    |     (ms)    |
| per batch  |             |             |             |             |             |
+============+=============+=============+=============+=============+=============+
|    100     |   348.373   |   333.814   |    10.100   |   1736.384  |   898.628   |
+------------+-------------+-------------+-------------+-------------+-------------+
|    500     |   755.901   |   410.524   |   309.312   |   2469.823  |   1403.662  |
+------------+-------------+-------------+-------------+-------------+-------------+
|   1,000    |   1477.077  |   869.270   |   227.354   |   3544.283  |   3031.084  |
+------------+-------------+-------------+-------------+-------------+-------------+
]]></artwork>
        </figure>
        <t>Post-installation RIB latency is shown in <xref target="fig-churn-rib-latency"/>.</t>
        <figure anchor="fig-churn-rib-latency">
          <name>Post-installation RIB latency under continuous updates.</name>
          <artwork><![CDATA[
+============+=============+=============+=============+=============+=============+
|   Target   |     Mean    |  Std. dev.  |   Minimum   |   Maximum   |     P95     |
| operations |     (ms)    |     (ms)    |     (ms)    |     (ms)    |     (ms)    |
| per batch  |             |             |             |             |             |
+============+=============+=============+=============+=============+=============+
|    100     |   2497.838  |   249.244   |   1683.396  |   3129.184  |   2838.429  |
+------------+-------------+-------------+-------------+-------------+-------------+
|    500     |   3538.866  |   578.829   |   2398.800  |   6240.222  |   3848.731  |
+------------+-------------+-------------+-------------+-------------+-------------+
|   1,000    |   3412.681  |   518.784   |   2099.247  |   4159.981  |   4117.594  |
+------------+-------------+-------------+-------------+-------------+-------------+
]]></artwork>
        </figure>
        <t>Post-installation FIB latency is shown in <xref target="fig-churn-fib-latency"/>.</t>
        <figure anchor="fig-churn-fib-latency">
          <name>Post-installation FIB latency under continuous updates.</name>
          <artwork><![CDATA[
+============+=============+=============+=============+=============+=============+
|   Target   |     Mean    |  Std. dev.  |   Minimum   |   Maximum   |     P95     |
| operations |     (ms)    |     (ms)    |     (ms)    |     (ms)    |     (ms)    |
| per batch  |             |             |             |             |             |
+============+=============+=============+=============+=============+=============+
|    100     |   3464.875  |   259.310   |   2677.374  |   4132.012  |   3822.033  |
+------------+-------------+-------------+-------------+-------------+-------------+
|    500     |   4552.836  |   620.005   |   3435.884  |   7504.002  |   4888.761  |
+------------+-------------+-------------+-------------+-------------+-------------+
|   1,000    |   4638.344  |   510.229   |   3190.433  |   5435.035  |   5357.773  |
+------------+-------------+-------------+-------------+-------------+-------------+
]]></artwork>
        </figure>
        <t>Additional single-batch tests measure VRP installation, ROV validation, and BGP convergence latency. Each test initializes the corresponding pre-update state, applies one batch, and measures VRP, ROV, RIB, and FIB latency. ROV and FIB are measured in separate runs, consistent with the continuous-update tests. The latency comparison is shown in <xref target="fig-churn-latency-comparison"/>.</t>
        <figure anchor="fig-churn-latency-comparison">
          <name>Latency comparison between continuous and single-batch updates.</name>
          <artwork><![CDATA[
+============+===================+===================+===================+===================+
| Operations |    VRP latency    | Post-installation | Post-installation | Post-installation |
| per batch  |                   |    ROV latency    |    RIB latency    |    FIB latency    |
|            |     Mean (ms)     |     Mean (ms)     |     Mean (ms)     |     Mean (ms)     |
+------------+---------+---------+---------+---------+---------+---------+---------+---------+
|            |  Cont.  |  Single |  Cont.  |  Single |  Cont.  |  Single |  Cont.  |  Single |
+============+=========+=========+=========+=========+=========+=========+=========+=========+
|    100     |  69.234 |  44.654 | 348.373 |  20.659 | 2497.838| 1839.835| 3464.875| 2834.748|
+------------+---------+---------+---------+---------+---------+---------+---------+---------+
|    500     |  74.930 |  45.496 | 755.901 |  48.868 | 3538.866| 2202.871| 4552.836| 3254.135|
+------------+---------+---------+---------+---------+---------+---------+---------+---------+
|   1,000    |  78.477 |  46.229 | 1477.077|  63.922 | 3412.681| 2110.765| 4638.344| 3174.544|
+------------+---------+---------+---------+---------+---------+---------+---------+---------+
]]></artwork>
        </figure>
        <t><xref target="fig-churn-latency-comparison"/> shows higher VRP, ROV, RIB, and FIB latencies under continuous updates than under single-batch updates. However, the measurement process itself also experienced delays during continuous updates. A monitoring round queries or probes all current targets once. <xref target="fig-churn-monitoring-rounds"/> compares the average duration and target count of these rounds between continuous and single-batch tests. The averages use the first complete round after each selected batch adds its targets, including any unfinished targets from earlier batches.</t>
        <figure anchor="fig-churn-monitoring-rounds">
          <name>Monitoring round duration and target count for continuous and single-batch updates.</name>
          <artwork><![CDATA[
+============+==============+=============+==============+=============+==============+
| Operations | Update mode  |  ROV round  | ROV targets  |  FIB round  | FIB targets  |
| per batch  |              |  time (ms)  |  per round   |  time (ms)  |  per round   |
+============+==============+=============+==============+=============+==============+
|    100     |  Continuous  |   269.888   |   321.933    |    37.509   |   162.300    |
+------------+--------------+-------------+--------------+-------------+--------------+
|    100     | Single-batch |    24.745   |   321.933    |    31.968   |   162.300    |
+------------+--------------+-------------+--------------+-------------+--------------+
|    500     |  Continuous  |   729.705   |   608.267    |    90.170   |   370.533    |
+------------+--------------+-------------+--------------+-------------+--------------+
|    500     | Single-batch |    46.149   |   608.267    |    71.983   |   367.367    |
+------------+--------------+-------------+--------------+-------------+--------------+
|   1,000    |  Continuous  |   2502.206  |   1827.533   |   370.557   |   1046.067   |
+------------+--------------+-------------+--------------+-------------+--------------+
|   1,000    | Single-batch |    60.419   |   741.667    |    93.249   |   494.233    |
+------------+--------------+-------------+--------------+-------------+--------------+
]]></artwork>
        </figure>
        <t>As shown in <xref target="fig-churn-monitoring-rounds"/>, at 100 and 500 operations per batch, each ROV query round covers the same number of targets in continuous and single-batch tests, but takes substantially longer in the continuous tests. At 1,000 operations per batch, unfinished targets from earlier batches remain under monitoring alongside new targets; both ROV and FIB rounds cover more targets and take longer than in the single-batch tests. Together, <xref target="fig-churn-latency-comparison"/> and <xref target="fig-churn-monitoring-rounds"/> show higher observed latency under continuous updates, but the increase includes delays from the measurement process, preventing separate quantification of the increase in DUT processing latency.</t>
        <t>Update delivery is also affected. <xref target="fig-churn-notify-intervals"/> shows how the interval between Serial Notify transmissions changes as the workload progresses.</t>
        <figure anchor="fig-churn-notify-intervals">
          <name>Serial Notify transmission intervals during continuous updates.</name>
          <artwork><![CDATA[
+==============+=================================================================+
|  Operations  |           Mean Serial Notify transmission interval (s)          |
|  per batch   |                                                                 |
+--------------+---------------------+---------------------+---------------------+
|              |    Batches 1–100    |   Batches 100–200   |   Batches 200–300   |
+==============+=====================+=====================+=====================+
|     100      |        1.000        |        1.000        |        1.000        |
+--------------+---------------------+---------------------+---------------------+
|     500      |        1.000        |        1.001        |        1.001        |
+--------------+---------------------+---------------------+---------------------+
|    1,000     |        1.008        |        1.277        |        2.087        |
+--------------+---------------------+---------------------+---------------------+
]]></artwork>
        </figure>
        <t>The Serial Notify transmission intervals in <xref target="fig-churn-notify-intervals"/> remain close to the configured one-second interval at 100 and 500 operations per batch. At 1,000 operations per batch, the interval grows as the test progresses, exceeding two seconds on average in the final portion. The RTR source therefore falls behind the submission schedule at the highest load, alongside the slowdown in state observation.</t>
      </section>
      <section numbered="false" anchor="report-resource-utilization">
        <name>Appendix B.10. Resource Utilization</name>
        <t>This experiment implements the resource-utilization test in <xref target="resource-utilization"/> using the multi-batch VRP update dataset. It replays the first 60 batches of the workload targeting 100 VRP operations per batch, with batches submitted at one-second intervals. System and BIRD CPU and memory are measured during initial synchronization, idle operation, and updates with convergence. The results are shown in <xref target="fig-resource-cpu"/> and <xref target="fig-resource-memory"/>.</t>
        <figure anchor="fig-resource-cpu">
          <name>System and BIRD CPU utilization by experimental phase.</name>
          <artwork><![CDATA[
+==================================+=====================+===================+
| Phase                            | Mean system CPU (%) | Mean BIRD CPU (%) |
+==================================+=====================+===================+
| Initial full-table               |             205.497 |            66.479 |
| synchronization                  |                     |                   |
+----------------------------------+---------------------+-------------------+
| Idle steady state                |              31.161 |             1.541 |
+----------------------------------+---------------------+-------------------+
| Updates and convergence          |             228.661 |            73.150 |
+----------------------------------+---------------------+-------------------+

]]></artwork>
        </figure>
        <figure anchor="fig-resource-memory">
          <name>System memory consumption and BIRD RSS by experimental phase.</name>
          <artwork><![CDATA[
+=================+=============+==============+==============+==============+
| Phase           | Mean system | Mean system  | Mean BIRD    | Mean BIRD    |
|                 | used memory | sampled peak | RSS (MiB)    | RSS sampled  |
|                 | (MiB)       | (MiB)        |              | peak (MiB)   |
+=================+=============+==============+==============+==============+
| Initial         |    4057.007 |     4107.663 |       29.991 |       57.610 |
| full-table      |             |              |              |              |
| synchronization |             |              |              |              |
+-----------------+-------------+--------------+--------------+--------------+
| Idle steady     |    6837.546 |     6869.547 |      501.815 |      501.926 |
| state           |             |              |              |              |
+-----------------+-------------+--------------+--------------+--------------+
| Updates and     |    7531.922 |     7633.124 |      503.106 |      503.501 |
| convergence     |             |              |              |              |
+-----------------+-------------+--------------+--------------+--------------+

]]></artwork>
        </figure>
        <t>Both CPU columns use one fully occupied logical CPU as 100%; system CPU can exceed 100%. <xref target="fig-resource-cpu"/> and <xref target="fig-resource-memory"/> report means over runs, and the memory peak column is the mean of each run's sampled phase peak. Hardware performance counters are not included in this WSL2 campaign. In this test setup, ROV and BGP processing share a single BIRD process, so their resource usage cannot be measured separately and is reported for BIRD as a whole.</t>
        <t>In <xref target="fig-resource-cpu"/>, BIRD CPU utilization is low during the idle phase and rises during synchronization and continuous updates. Mean utilization reaches 73.2% during updates and convergence, compared with 1.5% while idle. BIRD RSS in <xref target="fig-resource-memory"/> remains close to 502–503 MiB between the idle and update phases, while system memory consumption increases.</t>
      </section>
      <section numbered="false" anchor="report-rtr-session">
        <name>Appendix B.11. RTR Session Behavior Tests</name>
        <t>These experiments implement Scenarios 1, 3, and 4 of <xref target="rtr-session-behavior-tests"/>. Scenarios 1 and 4 use 500k initial VRPs; Scenario 3 uses 50k, 100k, 500k, and 1M. Each input contains 1,000 VRP operations. Measurements cover RTR recovery, full resynchronization, malformed-update handling, and the resulting ROV, RIB, and FIB changes. Scenario 2 is not performed, as explained below. The scenario triggers and timer origins are summarized in <xref target="fig-rtr-scenarios"/>.</t>
        <figure anchor="fig-rtr-scenarios">
          <name>RTR session test scenarios, triggers, and timer origins.</name>
          <artwork><![CDATA[
+======================+==========================+========================+
| Scenario             | Trigger                  | Timer origin           |
+======================+==========================+========================+
| 1. Session reset and | Close active RTR         | BRIO disconnect        |
| recovery             | connection               | completion             |
+----------------------+--------------------------+------------------------+
| 3. Full              | Apply updates and send   | Cache Reset send time  |
| resynchronization    | Cache Reset              |                        |
+----------------------+--------------------------+------------------------+
| 4. Normal/malformed  | Replay updates; replace  | First Prefix PDU send  |
| incremental updates  | every tenth Prefix PDU   | time (relay to DUT)    |
|                      | with type 255 for errors |                        |
+----------------------+--------------------------+------------------------+
]]></artwork>
        </figure>
        <t><strong>Scenario 1: Session reset test.</strong></t>
        <figure anchor="fig-rtr-session-recovery">
          <name>RTR session reset and recovery results.</name>
          <artwork><![CDATA[
+=========+============+===========+==============+============+===================+
| Initial | New        | RTR       | VRP          | ROV        | Post-installation |
| VRPs    | connection |  recovery | installation | completion | RIB/FIB           |
|         | (ms)       | (ms)      | (ms)         | (ms)       |  convergence (ms) |
+=========+============+===========+==============+============+===================+
| 500k    |   1000.291 | 15568.829 |    15588.969 |  17378.615 |          5692.486 |
+---------+------------+-----------+--------------+------------+-------------------+

]]></artwork>
        </figure>
        <t>The first four latency columns in <xref target="fig-rtr-session-recovery"/> start at disconnect completion. New connection ends when BRIO registers BIRD's new TCP connection; RTR recovery ends when BIRD's RTR session is observed to return to the Established state. The last column starts at VRP installation completion. A new connection is established after approximately 1.00 s, while RTR recovery and VRP installation complete after approximately 15.57 s and 15.59 s. ROV completion follows at 17.38 s, and the post-installation RIB/FIB convergence interval averages 5.69 s.</t>
        <t><strong>Scenario 2: Cache failover test.</strong></t>
        <t>The cache failover test in <xref target="rtr-session-behavior-tests"/> requires a switch from a primary RTR cache to a secondary cache. In this BIRD setup, both RTR sessions are active and contribute authorizations to the shared IPv4 and IPv6 ROA tables (<tt>r4</tt> and <tt>r6</tt>). The secondary cache's authorizations are already available before the primary connection fails. Disconnecting the primary therefore does not trigger activation of a standby cache or an identifiable primary-to-secondary switchover. Measuring continued service from the remaining cache would not measure the failover required by this scenario, so no failover latency is reported.</t>
        <t><strong>Scenario 3: Full resynchronization timing.</strong></t>
        <figure anchor="fig-rtr-resynchronization">
          <name>Full VRP resynchronization and BGP convergence.</name>
          <artwork><![CDATA[
+==========+==========+=============+===================+=============+
| Initial  | Full VRP | End-to-end  | Post-installation | Final-state |
| VRPs     | reload   | RIB/FIB     | RIB/FIB           | consistency |
|          | (ms)     | convergence | convergence (ms)  |             |
|          |          | (ms)        |                   |             |
+==========+==========+=============+===================+=============+
| 50k      |  160.380 |    4394.699 |          4234.319 | 10/10       |
+----------+----------+-------------+-------------------+-------------+
| 100k     |  313.001 |    4986.441 |          4673.440 | 10/10       |
+----------+----------+-------------+-------------------+-------------+
| 500k     | 1605.430 |    6794.705 |          5189.275 | 10/10       |
+----------+----------+-------------+-------------------+-------------+
| 1M       | 3472.341 |    8575.873 |          5103.532 | 10/10       |
+----------+----------+-------------+-------------------+-------------+

]]></artwork>
        </figure>
        <t>In <xref target="fig-rtr-resynchronization"/>, mean full VRP reload time increases from 160.380 ms at 50k VRPs to 3472.341 ms at 1M, similar to the full-table resynchronization results in <xref target="fig-vrp-update-latency"/>. Mean end-to-end RIB/FIB convergence increases from 4.395 s to 8.576 s, while mean post-installation convergence ranges from 4.234 s to 5.189 s. Final-state consistency checks pass in all ten runs at every scale.</t>
        <t><strong>Scenario 4: Incremental update performance.</strong></t>
        <figure anchor="fig-rtr-malformed-updates">
          <name>Normal and malformed incremental update results.</name>
          <artwork><![CDATA[
+=============================+================+=============================+
| Metric                      | Normal updates | Updates containing          |
|                             |                | malformed PDUs              |
+=============================+================+=============================+
| VRP installation latency    |        126.986 |                         N/A |
| (ms)                        |                |                             |
+-----------------------------+----------------+-----------------------------+
| ROV completion latency (ms) |       1586.566 |                         N/A |
+-----------------------------+----------------+-----------------------------+
| RIB/FIB convergence latency |       6269.012 |                         N/A |
| (ms)                        |                |                             |
+-----------------------------+----------------+-----------------------------+
| Error Report received       |            N/A |                       10/10 |
+-----------------------------+----------------+-----------------------------+
| RTR connection closed after |            N/A |                       10/10 |
| error                       |                |                             |
+-----------------------------+----------------+-----------------------------+
| Authorization cleanup       |            N/A |                       10/10 |
| completed                   |                |                             |
+-----------------------------+----------------+-----------------------------+
| Final VRP table correct     |          10/10 |                       10/10 |
+-----------------------------+----------------+-----------------------------+
| Final ROV states correct    |          10/10 |                       10/10 |
+-----------------------------+----------------+-----------------------------+

]]></artwork>
        </figure>
        <t>In <xref target="fig-rtr-malformed-updates"/>, normal updates complete VRP installation, ROV validation, and RIB/FIB convergence with mean latencies of 126.986 ms, 1.587 s, and 6.269 s, respectively. In all ten malformed-update runs, the DUT sends an Error Report, closes the RTR connection, and completes authorization cleanup. Final VRP and ROV checks pass for both groups.</t>
      </section>
    </section>
  </back>
  <!-- ##markdown-source:
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
wf8Pt9LgbcFzAQA=

-->

</rfc>
