On 4 March 2016 at 17:47, Tilli, Juha-Matti (Nokia - FI/Espoo) <
juha-matti.ti...@nokia.com> wrote:

> Hi,
>
>
>
> The current algorithm indeed is unfair, because queue 0 has the highest
> priority. There are at least two solutions to this:
>
> 1. Leave the priority order unspecified
>
> 2. Specify that queues are checked in the order they appear in the array
>
>
>
> I kind of like solution (2), because it allows the application to behave
> in a round-robin manner by altering the order of the queues between the
> calls:
>
> - odp_pktin_recv_mq_tmo({q1, q2, q3, q4}, …)
>
> - odp_pktin_recv_mq_tmo({q2, q3, q4, q1}, …)
>
> - odp_pktin_recv_mq_tmo({q3, q4, q1, q2}, …)
>
> - odp_pktin_recv_mq_tmo({q4, q1, q2, q3}, …)
>
> …
>
>
>
> Then essentially the priority of all queues averages out to have
> approximately the same average priority.
>
>
>
> So, you should perhaps consider in the API spec that the priority order
> could be defined to be 0, 1, 2, …. I cannot foresee any implementation
> which would use a different priority order.
>

Agreed. We can improve the documentation to specify that priority is in the
order of input queue in the array with '0' being highest priority.

Regards,
Bala

>
>
> *From:* lng-odp [mailto:lng-odp-boun...@lists.linaro.org] *On Behalf Of *EXT
> Savolainen, Petri (Nokia - FI/Espoo)
> *Sent:* Friday, March 04, 2016 12:46 PM
> *To:* EXT Bala Manoharan
> *Cc:* LNG ODP Mailman List
> *Subject:* Re: [lng-odp] [API-NEXT PATCH 1/2] api: pktio: add recv from
> multiple queues with tmo
>
>
>
>
>
>
>
> *From:* EXT Bala Manoharan [mailto:bala.manoha...@linaro.org
> <bala.manoha...@linaro.org>]
> *Sent:* Friday, March 04, 2016 12:16 PM
> *To:* Savolainen, Petri (Nokia - FI/Espoo) <petri.savolai...@nokia.com>
> *Cc:* LNG ODP Mailman List <lng-odp@lists.linaro.org>
> *Subject:* Re: [lng-odp] [API-NEXT PATCH 1/2] api: pktio: add recv from
> multiple queues with tmo
>
>
>
>
>
>
>
> On 4 March 2016 at 15:21, Petri Savolainen <petri.savolai...@nokia.com>
> wrote:
>
> Added odp_pktin_recv_mq_tmo() which allows application to
> poll multiple input queues (interfaces) with single call.
> The call includes timeout parameter which allows thread to
> e.g. sleep while waiting for more packets to arrive and thus
> avoid 100% CPU utilization when packet rate is low.
>
> Signed-off-by: Petri Savolainen <petri.savolai...@nokia.com>
> Signed-off-by: Juha-Matti Tilli <juha-matti.ti...@nokia.com>
> ---
>  include/odp/api/spec/packet_io.h                   | 55
> ++++++++++++++++++++++
>  .../include/odp/api/plat/packet_io_types.h         |  3 ++
>  2 files changed, 58 insertions(+)
>
> diff --git a/include/odp/api/spec/packet_io.h
> b/include/odp/api/spec/packet_io.h
> index 302d431..0932cf0 100644
> --- a/include/odp/api/spec/packet_io.h
> +++ b/include/odp/api/spec/packet_io.h
> @@ -63,6 +63,15 @@ extern "C" {
>   * Actual MAC address sizes may be different.
>   */
>
> +/**
> + * @def ODP_PKTIN_NO_WAIT
> + * Do not wait on packet input
> + */
> +
> +/**
> + * @def ODP_PKTIN_WAIT
> + * Wait infinitely on packet input
> + */
>
>  /**
>   * Packet input mode
> @@ -530,6 +539,52 @@ odp_pktio_t odp_pktio_lookup(const char *name);
>  int odp_pktin_recv(odp_pktin_queue_t queue, odp_packet_t packets[], int
> num);
>
>  /**
> + * Receive packets directly from multiple interface input queues
> + *
> + * Receives up to 'num' packets from one of the specified pktio interface
> input
> + * queues. The index of the source queue is stored into 'from' output
> + * parameter. If there are no packets available on any of the queues,
> waits for
> + * packets depeding on 'wait' parameter value. Returns the number of
> packets
> + * received.
>
>
>
> A Minor query, since there are more than one input queue and 'num' packets
> are returned from only one of the input queue what happens when more than
> one input queue contains the packet? Is there any inherent priority order
> to be maintained by the implementation? Correct me if I am wrong but these
> input queues are created based on hash parameters and does not contain any
> priority value.
>
> Regards,
>
> Bala
>
>
>
> No priority order. We could say that queue[0] is checked always first,
> etc. But I think we can leave it implementation specific in which order
> queues are checked (at least for now). Application can use the plain recv()
> in between of these calls to poll “high” priority queues more of than the
> others.
>
>
>
> -Petri
>
>
>
>
>
>
>
>
>
>
>
_______________________________________________
lng-odp mailing list
lng-odp@lists.linaro.org
https://lists.linaro.org/mailman/listinfo/lng-odp

Reply via email to