<div dir="ltr">See here (for the markup, issues, pull requests, discussion, etc.)<div><a href="https://github.com/p4lang/p4-spec/tree/master/p4-16/psa">https://github.com/p4lang/p4-spec/tree/master/p4-16/psa</a><br></div><div><br></div><div>and here (for the rendered document):</div><div><a href="http://p4lang.github.io/p4-spec/">http://p4lang.github.io/p4-spec/</a><br></div><div><br></div><div>-N</div></div><div class="gmail_extra"><br><div class="gmail_quote">On Sun, Aug 20, 2017 at 8:32 PM, Peng He <span dir="ltr"><<a href="mailto:peng.he.2000@gmail.com" target="_blank">peng.he.2000@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr"><div><div>Thanks Andy for the comprehensive response! I can see readable egress queue length would be useful for INT. Could you also talk about ingress metering in PSA? I mean three color two rate policer, will the hierarchical metering being considered in PSA? I suppose INT would also need info about metering, e.g., accepted packets/bytes, dropped packets/bytes? BTW, is there a draft to describe PSA in a bit details at this time? Thanks again.<br><br><br></div>Regards,<br></div>Peng<br></div><div class="HOEnZb"><div class="h5"><div class="gmail_extra"><br><div class="gmail_quote">On Wed, Aug 16, 2017 at 1:33 PM, Andy Fingerhut <span dir="ltr"><<a href="mailto:andy.fingerhut@gmail.com" target="_blank">andy.fingerhut@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr"><div>A key fact about P4 right now is that different implementations of P4 can have different capabilities from each other.  Neither the P4_14 nor P4_16 language specs contain anything I can think of that would directly enable you to implement the things you ask about.  That doesn't stop _particular P4 implementations_ from providing additional mechanisms to do so, but of course that can limit the portability of P4 programs wanting to implement such features.</div><div><br></div><div>The Portable Switch Architecture (PSA) spec is in draft form right now, and I can speak to its current contents, and what I expect it might include when it reaches version 1.0.</div><span><div><br></div>1. can queue depth be manipulated through P4?<div><br></div></span><div>There is a proposal to include as part of the PSA the ability to make visible to your P4 egress control block the depth that a queue had at the time a packet was enqueued at its end, here: <a href="https://github.com/p4lang/p4-spec/issues/335" target="_blank">https://github.com/p4lan<wbr>g/p4-spec/issues/335</a>   The title of that issue, and some of the comments there, suggest making it readable from the ingress control block before enqueuing it, but that seems to be a less favored approach due to implementation difficulties in some ASIC implementations.</div><span><div><br></div><div>2. can the queue congestion avoidance algorithms or associated parameters per egress queue be manipulated?</div><div><br></div></span><div>"queue congestion avoidance algorithms" covers a lot of possibilities, so it is difficult to answer that question without knowing more about what visibility to the system state you need for a particular algorithm.  If you have one in mind that can be implemented without knowing about current queue depths, i.e. it can be implemented using the Register extern to read state, modify it in your P4 program, and write it back, e.g. elephant traps, Bloom filters, etc. etc., then most likely yes.</div><span><div><br></div><div><span style="font-size:12.8px">3. you mentioned </span><span style="color:rgb(0,0,0);font-family:-webkit-standard;font-size:medium">control plane APIs exist for configuring scheduling policies</span><span style="font-size:12.8px">, could you elaborate it a bit more? don't think P4 can describe scheduling polices at this moment? or treat scheduler as an 'extern'? till P4 can have programmable packet scheduling? </span><br></div><div><span style="font-size:12.8px"><br></span></div></span><div><span style="font-size:12.8px">If we split hairs a bit, I didn't actually say they exist :-)  Whether a P4 implementation has multiple class of service queues, with scheduling parameters that can be configured via a control plane API, is not part of the PSA, and I would guess it will not be, except to specify how the ingress P4 code could specify one of several class-of-service queues for the selected output port (but allowing an implementation to only have 1 queue per output port).  The P4-API effort might choose to define APIs for configuring parameters for a scheduler, but I am not sure whether that is part of that group's plans.</span></div><div><span style="font-size:12.8px"><br></span></div><div><span style="font-size:12.8px">Note that even if a P4 implementation contained some non-P4-programmable scheduling algorithms, e.g. weighted fair queueing with run-time configurable weight values for each queue, that can be tremendously useful.  P4_16 definitely takes the approach that these are in externs.</span></div><span class="m_-6098415640341821323HOEnZb"><font color="#888888"><div><span style="font-size:12.8px"><br></span></div><div><span style="font-size:12.8px">Andy</span></div></font></span></div><div class="m_-6098415640341821323HOEnZb"><div class="m_-6098415640341821323h5"><div class="gmail_extra"><br><div class="gmail_quote">On Wed, Aug 16, 2017 at 9:43 AM, Peng He <span dir="ltr"><<a href="mailto:peng.he.2000@gmail.com" target="_blank">peng.he.2000@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr"><div><div><div><div><div>Sorry to jump here.. I have similar question about queue:<br><br></div>1. can queue depth be manipulated through P4?<br></div>2. can the queue congestion avoidance algorithms or associated parameters per egress queue be manipulated?<br></div>3. you mentioned <span style="color:rgb(0,0,0);font-family:-webkit-standard;font-size:medium;font-style:normal;font-variant-caps:normal;font-weight:normal;letter-spacing:normal;text-align:start;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;display:inline;float:none">control plane APIs exist for configuring scheduling policies</span>, could you elaborate it a bit more? don't think P4 can describe scheduling polices at this moment? or treat scheduler as an 'extern'? till P4 can have programmable packet scheduling? <br><br></div>Regards,<br></div>Peng<br></div><div class="m_-6098415640341821323m_-3198329532753826150HOEnZb"><div class="m_-6098415640341821323m_-3198329532753826150h5"><div class="gmail_extra"><br><div class="gmail_quote">On Wed, Aug 16, 2017 at 10:24 AM, Andy Fingerhut <span dir="ltr"><<a href="mailto:andy.fingerhut@gmail.com" target="_blank">andy.fingerhut@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr">In P4 source code, you typically do not manipulate queues.  You select which queue a packet should be enqueued upon in P4 source code, e.g. by assigning a value to a metadata field that selects an output port for the packet, or multiple output ports via a multicast group.  In the most common case those queues will be FIFO.  I guess if that is what you meant by manipulating queues, then that is how it is typically done.<div><br></div><div>Can you say a little more about what kinds of queue manipulation you are interested in here?</div><div><br></div><div>For example, are asking about what kind of control plane APIs exist for configuring scheduling policies between multiple queues leading to the same output port?</div><div><br></div><div>Something else?</div><div><br></div><div>And</div><div><br></div></div><div class="gmail_extra"><br><div class="gmail_quote"><div><div class="m_-6098415640341821323m_-3198329532753826150m_2784614309406062842h5">On Tue, Aug 15, 2017 at 10:04 PM, Wallas Fróes <span dir="ltr"><<a href="mailto:wallasync@gmail.com" target="_blank">wallasync@gmail.com</a>></span> wrote:<br></div></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div><div class="m_-6098415640341821323m_-3198329532753826150m_2784614309406062842h5"><div dir="ltr">Hello,<div><br></div><div>I have a question.</div><div>Would I like to know, how I do for manipulating the queues in P4?<span class="m_-6098415640341821323m_-3198329532753826150m_2784614309406062842m_3958004942886826818HOEnZb"><font color="#888888"><br clear="all"><div><br></div>-- <br><div class="m_-6098415640341821323m_-3198329532753826150m_2784614309406062842m_3958004942886826818m_-2948437006930322066gmail_signature"><div dir="ltr"><span style="font-size:12.8px">Att,</span><div style="font-size:12.8px"><br></div><div style="font-size:12.8px">Wallas Fróes</div><div style="font-size:12.8px">Information Security in Computer Networks</div><div style="font-size:12.8px">Computer Engineer</div><div style="font-size:12.8px">Cel: (77) 8841-0762</div></div></div>
</font></span></div></div>
<br></div></div>______________________________<wbr>_________________<br>
P4-dev mailing list<br>
<a href="mailto:P4-dev@lists.p4.org" target="_blank">P4-dev@lists.p4.org</a><br>
<a href="http://lists.p4.org/mailman/listinfo/p4-dev_lists.p4.org" rel="noreferrer" target="_blank">http://lists.p4.org/mailman/li<wbr>stinfo/p4-dev_lists.p4.org</a><br></blockquote></div><br></div>
<br>______________________________<wbr>_________________<br>
P4-dev mailing list<br>
<a href="mailto:P4-dev@lists.p4.org" target="_blank">P4-dev@lists.p4.org</a><br>
<a href="http://lists.p4.org/mailman/listinfo/p4-dev_lists.p4.org" rel="noreferrer" target="_blank">http://lists.p4.org/mailman/li<wbr>stinfo/p4-dev_lists.p4.org</a><br></blockquote></div><br></div>
</div></div></blockquote></div><br></div>
</div></div></blockquote></div><br></div>
</div></div><br>______________________________<wbr>_________________<br>
P4-dev mailing list<br>
<a href="mailto:P4-dev@lists.p4.org">P4-dev@lists.p4.org</a><br>
<a href="http://lists.p4.org/mailman/listinfo/p4-dev_lists.p4.org" rel="noreferrer" target="_blank">http://lists.p4.org/mailman/<wbr>listinfo/p4-dev_lists.p4.org</a><br></blockquote></div><br></div>