Subject: Re: [mpls] thought about the ADI name

From: Loa Andersson <[email-masked]>
Date: Thu, 6 Jan 2022 09:41:22 +0800

Haoyu,

This opens up for yet another interesting discussion. The "how many" ADs 
or ADIs is required in a single packet for the chain processing to be a 
problem. My guesstimate would be that the very vast majority of packet 
will have 0, 1 or 2 ADIs set, and the chain argument not very relevant.

Why should we design for a corner case?

Even if you have many ADIs set you would know from the flag field if 
there are AD that you are interested in.

/Loa

On 28/12/2021 01:39, Haoyu Song wrote:
> Hi Loa,
> 
> Please see my response inline with [HS].
> 
> Haoyu
> 
> -----Original Message-----
> From: Loa Andersson <[email-masked]>
> Sent: Saturday, December 25, 2021 2:41 AM
> To: Haoyu Song <[email-masked]>; [email-masked]
> Subject: Re: [mpls] thought about the ADI name
> 
> 
> 
> On 24/12/2021 01:58, Haoyu Song wrote:
>> Hi Loa,
>>
>> Let me try to explain a bit more. I have examples to back the following claims which I can present in a future meeting.
> 
> If you want to present, you should be specific and ask for a slot at a meeting.
>>
>> So far all the existing header design follows a chain structure.
> 
> hmmm -  do you consider a number of TLVs to be a "chain structure"?
> 
> [HS] Yes. Basically.  However, if a "T" is needed to identify a "TLV" structure, this structure has to be treated as 2 "headers" (i.e., using two parser states instead of one). Therefore, TLV is usually used as an inner structure of a header. It's not recommended for the outer header design.
> 
> The header are parsed linearly one by one from the start of the packet,
> 
> or upiu stop when you find what you are looking for, which may not be the last but the first, the last, or anything in between.
> [HS] Could you please give an example?
> 
> until you reach a header that is considered the last one concerned by the forwarding plane.
> 
> You know the presence of a specific header only when you reach it.
> 
> No. not true - if you have the flag field (FAI/NAI or ADI. or whatever you want to call them. The flags will tell you, you'll know what you are looking for.
> [HS] What I mean is that we just need a single indicator to tell the presence of AD. Beyond that, it's not helpful and even harmful. I have given the reasons. Perhaps you should try to write the pseudo code to verify that.
> 
> In this design, the number of parser states as well as the time for parsing is both linear to the number of headers scanned.
> 
> Can't argue about this, doesn't the fact that you are looking for something specific help?
>>
>> Now people may think using some extra indicators (i.e., a bitmap with each bit indicating the presence of a header later in the packet) may improve the parsing performance. To this we must ask "in what sense"?
>>
>> We can consider two possible types of improvements. First is the reduction of parsing states which can help to save the parser resource (i.e., fewer nodes in the parser FSM); second is the reduction of parsing cycles which can help to parse a packet faster (we have a fixed cost for parsing each header, no matter the size of it. E.g, each MPLS label is considered a header, the entire IPv6 header, excluding EHs, is also considered a header).
>>
>> For the first one, if you start to actually draft the parsing graph, you will find the opposite results. In two different parsing styles, both requires more parser states than a simple header chain.
>>
>> For the second one, we need to understand that the headers concerned by a forwarding plane need to all be parsed anyway. You can't ignore some headers in the middle because you will need to reconstruct the packet headers at the egress (a process also known as deparsing). So the extra indicator encoding doesn't help to improve the parsing speed either.
> 
> So, I conclude. If we have the flag field and know that there is only one or two action flags set, I will be worse off than if I have a PSD structure that I have no knowledge about?
> 
> [HS] You may just know there is PSD. That's enough. Other information doesn't help on either parser size or parsing speed. On the contrary, the bitmap or catalog forces the AD order and limits the AD extensibility.
> 
> 
> Now I'm too far off road, and stop here.
> 
>>
>> There's a reason why so far all the headers are simply organized as a chain. It's the most efficient and straightforward way. My study is based on current switch ASICs and some NPs.  If people don't believe me, then evidence (e.g., pseudo code or parsing graph) needs to be provided. Perhaps there are some different forwarding plane designs which can play magic. We need to learn that before introducing any new mechanism.
> 
> 
>>
>> A caveat is that, an extra indicator for the presence of HBH headers might be useful in some cases. For example, on an LSP path nodes, if there's no HBH headers later in the packet, the parser can stop further parsing immediately which can save some parsing cycles.  Even in this case, if the forwarding plane still requires to continue parsing, this mechanism doesn’t help.
>>
> I a FAI/NAI/ADI that indicates HBH wrse than one that indicate E2E?
> 
> [HS] Since LSP end nodes need to parse all the AD anyway, so an overall indicator for AD is sufficient for that purpose. Beyond that, an HBH indicator can allow the LSP path nodes to avoid continuing parsing when the indicator was found which can shorten the parsing process.
> 
> /Loa
> 
>> In general, we really just need to concern the packet header buffer (aka packet window) size. As long as all the headers concerned by a forwarding plane is within the buffer limit, the parsing cost is a negligible concern for a simple header chain. Other mechanisms are of no help at best and could be harmful at worst. Of course, I'd like to see evidence if people think the other way.
>>
>> Happy Holidays!
>>
>> Best regards,
>> Haoyu
>>
>> -----Original Message-----
>> From: Loa Andersson <[email-masked]>
>> Sent: Wednesday, December 22, 2021 2:54 PM
>> To: Haoyu Song <[email-masked]>; [email-masked]
>> Subject: Re: [mpls] thought about the ADI name
>>
>> Haoyu,
>>
>> OK, I simply don't understand.
>>
>> If you don't know what action you'll take, what good is it to know where to find the data?
>>
>> It might be that this is not what you say, but that is what if get from your text below. Sorry if I'm misunderstanding.
>>
>> /Loa
>>
>> On 23/12/2021 03:25, Haoyu Song wrote:
>>> Hi Loa,
>>>
>>> In my opinion the ADI should only be used to indicate the presence of AD.  E2E or HBH AD could be differentiated because in some case it can help stop further parsing beyond ADI.  Other information encoded in it won't help but complicate the parsing process. I strongly suggest any such proposal should give a clear presentation on why it's necessary and how it can help from the view of implementors, otherwise, we may end up with an over complicated design without tangible benefits.
>>>
>>> Best regards,
>>> Haoyu
>>>
>>> -----Original Message-----
>>> From: mpls <[email-masked]> On Behalf Of Loa Andersson
>>> Sent: Sunday, December 19, 2021 8:32 AM
>>> To: [email-masked]
>>> Subject: [mpls] thought about the ADI name
>>>
>>> Working Group,
>>>
>>> The MIAD Requirement Specification use the abbreviation ADI, it stands for Ancillary Data Indicator. Which is all nice and dandy.
>>>
>>> But isn't it he case  that the indicator gives us two things, the action to be performed and where to find the data needed, i.e., an Ancillary Data and Action indication (ADAI?).
>>>
>>> No I'm not suggesting that we change, but we should be aware, and it would be nice to have it mentioned somewhere.
>>>
>>> /Loa
>>
> 

-- 
Loa Andersson                        email: [email-masked]
Senior MPLS Expert                          [email-masked]
Bronze Dragon Consulting             phone: +46 739 81 21 64

---

From: Haoyu Song <[email-masked]>
Date: Thu, 6 Jan 2022 17:28:35 +0000

Hi Loa,

My design principle is to keep things simple yet flexible and extensible. So I think a packet should have only a single ADI. The size of ADs is pretty much limited by the header buffer size and the number of ADs can have some performance impact but this highly depends on the hardware technology. Keeping all the ADs in a chain follows the common design practice for headers ubiquitously used so far. This covers all the possible cases. No need to worry about flexibility and extensibility. 

From the parser point of view, knowing what AD you have upfront doesn't help improving the parser performance and reducing the parser graph size. On the contrary, it introduces unnecessary constraints. I'll explain this using real examples in my presentation. 

Best regards,
Haoyu

-----Original Message-----
From: Loa Andersson <[email-masked]> 
Sent: Wednesday, January 5, 2022 5:41 PM
To: Haoyu Song <[email-masked]>; [email-masked]
Subject: Re: [mpls] thought about the ADI name

Haoyu,

This opens up for yet another interesting discussion. The "how many" ADs or ADIs is required in a single packet for the chain processing to be a problem. My guesstimate would be that the very vast majority of packet will have 0, 1 or 2 ADIs set, and the chain argument not very relevant.

Even if you have many ADIs set you would know from the flag field if there are AD that you are interested in.

/Loa