RFC 2751

Signaled Preemption Priority Policy Element

๐Ÿ“… published January 2000, from ietf

RFC 2751: Signaled Preemption Priority Policy Element ๐ŸŽ€

Title block, bestie: this one is by S. Herzog from IPHighway ๐Ÿ’โ€โ™€๏ธ. It's a Standards Track doc, dated January 2000, in the Network Working Group. The title block doesn't list anything it obsoletes or updates.


Status of this Memo ๐Ÿ“œ

This document is an Internet standards track protocol for the Internet community, and it's asking for discussion and suggestions for improvements. For the current standardization state and status of this protocol, check the "Internet Official Protocol Standards" (STD 1). Distribution of this memo is unlimited ๐ŸŒˆ.

Copyright (C) The Internet Society (2000). All Rights Reserved.

Abstract ๐Ÿฆ‹

This doc describes a preemption priority policy element that signaled policy based admission protocols can use, like [RSVP] and [COPS] ๐Ÿ’œ.

Preemption priority is a relative importance (a rank) among the flows competing to get admitted into the network. Instead of admitting flows in order of arrival (First Come First Admitted), network nodes can use priorities to preempt some previously admitted low priority flows to make room for a newer, high-priority flow. It's giving main character energy ๐Ÿ‘‘.

Table of Contents ๐Ÿ—บ๏ธ

   1 Introduction .....................................................2
   2 Scope and Applicability ..........................................3
   3 Stateless Policy .................................................3
   4 Policy Element Format ............................................4
   5 Priority Merging Issues ..........................................5
   5.1  Priority Merging Strategies ...................................6
   5.1.1 Take priority of highest QoS .................................6
   5.1.2 Take highest priority ........................................7
   5.1.3 Force error on heterogeneous merge ...........................7
   5.2  Modifying Priority Elements ...................................7
   6 Error Processing .................................................8
   7 IANA Considerations ..............................................8
   8 Security Considerations ..........................................8
   9 References .......................................................9
   10  Author Information .............................................9
   Appendix A: Example ...............................................10
   A.1  Computing Merged Priority ....................................10
   A.2  Translation (Compression) of Priority Elements ...............11
   Full Copyright Statement ..........................................12

1. Introduction โœจ

Okay so, traditional Capacity based Admission Control (CAC) just lets in new flows until the capacity runs out (First Come First Admitted) ๐Ÿ’…. Policy based Admission Control (PAC) is the glow-up ๐ŸŒธ. It tries to make order of arrival matter way less and uses policy based admission criteria instead.

One of the most popular policy criteria is how important a flow is compared to the other flows fighting for admission into a network node. Preemption Priority only kicks in when the flows trying to get through a node are overbooking resources, so that CAC would have to reject some of them. Preemption priority criteria help the node pick the most important flows (highest priority) for admission, while turning away the low priority ones ๐Ÿซถ.

Network nodes that support preemption should consider priorities to preempt some previously admitted low-priority flows in order to make room for a newer, high-priority flow. Literally the whole point ๐Ÿ˜ญ.

This document describes the format and applicability of the preemption priority, which is represented as a policy element in [RSVP-EXT] ๐Ÿ“ฆ.

2. Scope and Applicability ๐Ÿงš

The Framework document for policy-based admission control [RAP] describes the various components that take part in policy decision making (that's PDP, PEP and LDP) ๐Ÿ“. The whole vibe of PREEMPTION_PRI elements is to be simple, stateless, and light-weight, so they could be implemented internally within a node's LDP (Local Decision Point) ๐Ÿ’–.

There are some base assumptions in the usage model for PREEMPTION_PRI elements:

  • They are created by PDPs

In a model where PDPs control PEPs at the edge of the policy domain (for example, in border routers), PDPs squish sets of relevant policy rules into one single priority criterion. That priority, expressed in the PREEMPTION_PRI element, can then be passed along to downstream PEPs in the same policy domain. Those PEPs have LDPs but no controlling PDP ๐ŸŒˆ.

  • They can be processed by LDPs

PREEMPTION_PRI elements get processed by the LDPs of nodes that don't have a controlling PDP. LDPs may interpret these objects, forward them as is, or do local merging to forward an equivalent merged PREEMPTION_PRI policy element. LDPs must follow the merging strategy that was encoded by PDPs in the PREEMPTION_PRI objects. (Clearly, a PDP, being a superset of LDP, may act as an LDP as well ๐Ÿ‘‘.)

  • They are enforced by PEPs

PREEMPTION_PRI elements work with a node's traffic control module (and capacity admission control) to enforce priorities, and to preempt previously admitted flows when the need arises โญ.

3. Stateless Policy ๐Ÿฆ‹

Signaled Preemption Priority is stateless, which means it doesn't need past history or external information to be interpreted. So when it's carried in COPS messages for outsourcing policy decisions, these objects are included as COPS Stateless Policy Data Decision objects (see [COSP, COPS-RSVP]) ๐Ÿ’œ.

4. Policy Element Format ๐ŸŽ€

The format of Policy Data objects is defined in [RSVP-EXT]. A single Policy Data object can hold one or more policy elements, each one representing a different (and maybe orthogonal) policy ๐Ÿ“.

The format of the preemption priority policy element looks like this:

      +-------------+-------------+-------------+-------------+
      | Length (12)               | P-Type = PREEMPTION_PRI   |
      +------+------+-------------+-------------+-------------+
      | Flags       | M. Strategy | Error Code  | Reserved(0) |
      +------+------+-------------+-------------+-------------+
      | Preemption Priority       | Defending Priority        |
      +------+------+-------------+-------------+-------------+

Here's the breakdown, bestie ๐Ÿ’…:

  • Length: 16 bits

Always 12. This is the overall length of the policy element, in bytes.

  • P-Type: 16 bits

PREEMPTION_PRI = 3

This value is registered with IANA, see Section 7 ๐ŸŒธ.

  • Flags: 8 bits

Reserved (always 0).

  • Merge Strategy: 8 bit
      1    Take priority of highest QoS: recommended
      2    Take highest priority: aggressive
      3    Force Error on heterogeneous merge
  • Reserved: 8 bits
  • Error code: 8 bits
      0  NO_ERROR        Value used for regular PREEMPTION_PRI elements
      1  PREEMPTION      This previously admitted flow was preempted
      2  HETEROGENEOUS   This element encountered heterogeneous merge
  • Reserved: 8 bits

Always 0.

  • Preemption Priority: 16 bit (unsigned)

This is the priority of the new flow, compared with the defending priority of previously admitted flows. Higher values mean higher Priority ๐Ÿ”ฅ.

  • Defending Priority: 16 bits (unsigned)

Once a flow gets admitted, its preemption priority becomes irrelevant ๐Ÿ™ˆ. Instead, its defending priority is what gets compared with the preemption priority of new flows.

For any specific flow, its preemption priority must always be less than or equal to its defending priority. A wide gap between preemption and defending priority adds stability ๐Ÿง. A moderate preemption priority makes it harder for a flow to preempt others, but once it succeeds, the higher defending priority makes it easier for that flow to avoid getting preempted itself. This is how you balance order dependency and priority โœจ.

5. Priority Merging Issues ๐Ÿ’€

Let's say two RSVP reservations merge ๐Ÿ‘€:

          F1: QoS=High,  Priority=Low
          F2: QoS=Low,   Priority=High

   F1+F2= F3: QoS=High,  Priority=???

So F3 should have QoS=High, but what Priority should it take? A few negative side-effects have been spotted that can mess with a merge like this ๐Ÿ™ƒ:

Free-Riders:

If F3 takes Priority=High, then F1 got a free ride, borrowing high priority that was only meant for the low QoS F2. If you attach costs to QoS and priority, F1 gets an "expensive" priority without having to "pay" for it ๐Ÿ’ธ.

Denial of Service:

If F3 takes Priority=Low, the merged flow could get preempted or fail even though F2 brought high priority ๐Ÿ˜ค.

Denial of service is basically the inverse of the free-rider problem. When flows compete for resources and one flow gets undeserved high priority, it may be able to preempt another flow that actually deserves it. So one free-rider ends up being another flow's denial of service ๐Ÿฅฒ.

Instability:

The mix of preemption priority, killer reservation and blockade state [RSVP] may make admitted flows less stable, where a reservation gets preempted, reinstated, and preempted again over and over ๐ŸŒ€.

5.1. Priority Merging Strategies ๐Ÿงฉ

When merging happens, LDPs may receive multiple preemption elements, and they must compute the priority of the merged flow using these rules:

  • a. Preemption priority and defending priority are merged and computed separately, regardless of each other.
  • b. Participating priority elements are selected. All priority elements are checked against their merging strategy to decide whether they should take part in the merged result (as specified below).
  • c. The highest priority of all participating priority elements is computed.

The rest of this section covers the different merging strategies that can be specified in the PREEMPTION_PRI element ๐Ÿ’–.

5.1.1. Take priority of highest QoS ๐Ÿ‘‘

The PREEMPTION_PRI element only takes part in the merged reservation if it belongs to a flow that contributed to the merged QoS level. In other words, its QoS requirement can't be a subset of another reservation. A simple way to check whether a flow contributed to the merged QoS result is to compute the merged QoS with and without it, then compare the results (though this clearly isn't the most efficient method) ๐Ÿง.

The reasoning here is that the highest QoS flow is the one dominating the merged reservation, so its priority should dominate it too. This approach is the most amenable to preventing priority distortions like free-riders and denial of service ๐Ÿซถ.

This is a recommended merging strategy ๐ŸŒŸ.

5.1.2. Take highest priority ๐Ÿ™…โ€โ™€๏ธ

All PREEMPTION_PRI elements take part in the merged reservation.

This strategy separates priority from QoS level, so it's highly subject to free-riders and its inverse, denial of service ๐Ÿ˜ฌ.

This is not a recommended method, but it may be simpler to implement ๐Ÿคทโ€โ™€๏ธ.

5.1.3. Force error on heterogeneous merge ๐Ÿšซ

okay so a PREEMPTION_PRI element is only allowed to join a merged reservation if every other flow in that merge has the same QoS level (homogeneous flows) ๐ŸŽ€

the thinking here is that mixed-QoS merges are rare and super complicated to handle, so it's just better to ban them outright ๐Ÿ™…โ€โ™€๏ธ

ngl this one can be a denial of service vibe ๐Ÿ˜ญ a single receiver asking for an incompatible QoS level can wreck things for every other receiver in the merged reservation

Note: whether flows count as heterogeneous is about the QoS level only (FLOWSPEC values), and it's up to the local (LDP) definition ๐Ÿ’… other kinds of heterogeneous reservations, like conflicting reservation styles, are handled by RSVP and have nothing to do with this PREEMPTION_PRI element

this strategy is a recommended merging strategy when reservation homogeneity is coordinated and enforced across the whole multicast tree ๐ŸŒณ it's stricter than Section 5.1.1, but it's way easier to implement โœจ


5.2. Modifying Priority Elements ๐Ÿ› ๏ธ

when POLICY_DATA objects are protected by integrity, LDPs should not try to change them ๐Ÿ”’ they have to be forwarded exactly as they are, or their security envelope gets invalidated ๐Ÿ’” in every other case, LDPs may modify and merge incoming PREEMPTION_PRI elements to shrink their size and count, following this rule:

merging happens separately for each merging strategy ๐Ÿงฉ

there's no known algorithm that merges PREEMPTION_PRI elements from different merging strategies without losing valuable information that may affect OTHER nodes ๐Ÿ˜ค

  • for each merging strategy, you take the highest QoS across all participating PREEMPTION_PRI elements and put it into one outgoing PREEMPTION_PRI element for that strategy ๐Ÿ‘‘
  • this compresses things so you forward at most one PREEMPTION_PRI element per merging strategy, no matter how many receivers there are (see the example in Appendix A.2) ๐Ÿฆ‹

6. Error Processing ๐Ÿšจ

a PREEMPTION_PRI error object gets sent back toward the appropriate receivers whenever something goes wrong with a PREEMPTION_PRI element ๐Ÿ’Œ

PREEMPTION

when a flow that was already admitted gets preempted, a copy of the preempting flow's PREEMPTION_PRI element is sent back toward the PDP that originated the preempted PREEMPTION_PRI object ๐Ÿ“จ that PDP knows both the preempting and the preempted priorities, so it can build a higher priority PREEMPTION_PRI element to try to bring the preempted flow back ๐Ÿ”

Heterogeneity

when a flow F1 with the Heterogeneous Error merging strategy set in its PREEMPTION_PRI element runs into heterogeneity, the PREEMPTION_PRI element is sent back toward the receivers with the Heterogeneity error code set ๐Ÿซถ


7. IANA Considerations ๐Ÿ“‹

following the policies in [IANA-CONSIDERATIONS], Standard RSVP Policy Elements (P-type values) are assigned by IETF Consensus action as described in [RSVP-EXT] ๐ŸŒˆ

PREEMPTION_PRI gets the P-type value 3 ๐ŸŽ€


8. Security Considerations ๐Ÿ”

the integrity of PREEMPTION_PRI is guaranteed, like any other policy element, by being encapsulated in a Policy Data object [RSVP-EXT] ๐Ÿ›ก๏ธ

further security mechanisms are not warranted ๐Ÿ’… especially because preemption priority is meant to give simple, quick guidance to routers inside a trusted zone, or at least a single zone where no zone boundaries get crossed ๐Ÿงฑ it's giving fortress energy ๐Ÿฐ


9. References ๐Ÿ“š

[RSVP-EXT]            Herzog, S., "RSVP Extensions for Policy
                      Control", RFC 2750, January 2000.

[COPS-RSVP]           Boyle, J., Cohen, R., Durham, D., Herzog, S.,
                      Raja, R. and A. Sastry, "COPS usage for RSVP",
                      RFC 2749, January 2000.

[RAP]                 Yavatkar, R., et al., "A Framework for Policy
                      Based Admission Control", RFC 2753, January
                      2000.

[COPS]                Boyle, J., Cohen, R., Durham, D., Herzog, S.,
                      Raja, R. and A. Sastry, "The COPS (Common Open
                      Policy Service) Protocol", RFC 2748, January
                      2000.

[RSVP]                Braden, R., ed., et al., "Resource ReSerVation
                      Protocol (RSVP) - Functional Specification",
                      RFC 2205, September 1997.

[IANA-CONSIDERATIONS] Alvestrand, H. and T. Narten, "Guidelines for
                      Writing an IANA Considerations Section in
                      RFCs", BCP 26, RFC 2434, October 1998.

10. Author Information โœ๏ธ

Shai Herzog
IPHighway, Inc.
55 New York Avenue
Framingham, MA 01701

Phone: (508) 620-1141
EMail: herzog@iphighway.com

Appendix A. Example ๐Ÿง

these examples show how merged priority elements get computed, plus how PREEMPTION_PRI elements get translated (compressed) ๐Ÿ’–

A.1. Computing Merged Priority ๐Ÿงฎ

                         r1
                        /   QoS=Hi (Pr=3, St=Highest QoS)
                       /
     s1-----A---------B--------r2  QoS=Low (Pr=4, St=Highest PP)
             \        \
              \        \   QoS=Low  (Pr=7, St=Highest QoS)
               r4        r3

       QoS=Low (Pr=9, St=Error)

     Example 1: Merging preemption priority elements

example one is a multicast scenario with one sender and four receivers, each with their own PREEMPTION_PRI element definition ๐ŸŒธ

r1, r2 and r3 merge in B, and the result is priority 4 ๐ŸŽฏ

reason: r3's PREEMPTION_PRI doesn't participate (r3 isn't contributing to the merged QoS), so the priority is the highest one from r1 and r2 โœจ

r1, r2, r3 and r4 merge in A, and the result is priority 4 again ๐Ÿ™ˆ r4 doesn't participate because its QoS=Low is incompatible with r1's QoS=High ๐Ÿ’€ an error PREEMPTION_PRI should be sent back to r4 to tell it that its PREEMPTION_PRI element ran into heterogeneity ๐Ÿซ 

A.2. Translation (Compression) of Priority Elements ๐Ÿ—œ๏ธ

given this set of participating PREEMPTION_PRI elements, the merging node can do the following compression ๐Ÿ”ฅ

From:
          (Pr=3, St=Highest QoS)
          (Pr=7, St=Highest QoS)
          (Pr=4, St=Highest PP)
          (Pr=9, St=Highest PP)
          (Pr=6, St=Highest PP)
To:
          (Pr=7, St=Highest QoS)
          (Pr=9, St=Highest PP)

Copyright (C) The Internet Society (2000). All Rights Reserved.

This document and translations of it may be copied and furnished to others, and derivative works that comment on or otherwise explain it or assist in its implementation may be prepared, copied, published and distributed, in whole or in part, without restriction of any kind, provided that the above copyright notice and this paragraph are included on all such copies and derivative works. However, this document itself may not be modified in any way, such as by removing the copyright notice or references to the Internet Society or other Internet organizations, except as needed for the purpose of developing Internet standards in which case the procedures for copyrights defined in the Internet Standards process must be followed, or as required to translate it into languages other than English.

The limited permissions granted above are perpetual and will not be revoked by the Internet Society or its successors or assigns.

This document and the information contained herein is provided on an "AS IS" basis and THE INTERNET SOCIETY AND THE INTERNET ENGINEERING TASK FORCE DISCLAIMS ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF THE INFORMATION HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.

Acknowledgement ๐ŸŒท

funding for the RFC Editor function is currently provided by the Internet Society ๐Ÿ’œ

๐Ÿ“ฆ where this page comes from