Hi Ilya,
These patches were already committed into the OVS-DPDK sub-tree that
Darrell is maintaining after they were under review for a long time (4
months and 7 revisions). I will reply to each comment and address the
comments around correctness by way of follow up patches.
thanks,
Kevin.
On 08/28/2017 02:28 PM, Ilya Maximets wrote:
>> Add counters to dp_netdev_rxq which will later be used for storing the
>> processing cycles of an rxq. Processing cycles will be stored in reference
>> to a defined time interval. We will store the cycles of the current in
>> progress
>> interval, a number of completed intervals and the sum of the completed
>> intervals.
>>
>> cycles_count_intermediate was used to count cycles for a pmd. With some small
>> additions we can also use it to count the cycles used for processing an rxq.
>>
>> Signed-off-by: Kevin Traynor <ktraynor at redhat.com>
>> ---
>> lib/dpif-netdev.c | 30 +++++++++++++++++++++++++++---
>> 1 file changed, 27 insertions(+), 3 deletions(-)
>>
>> diff --git a/lib/dpif-netdev.c b/lib/dpif-netdev.c
>> index f35c079..8731435 100644
>> --- a/lib/dpif-netdev.c
>> +++ b/lib/dpif-netdev.c
>> @@ -182,4 +182,8 @@ struct emc_cache {
>> #define DPCLS_OPTIMIZATION_INTERVAL 1000
>>
>> +/* Number of intervals for which cycles are stored
>> + * and used during rxq to pmd assignment. */
>> +#define PMD_RXQ_INTERVAL_MAX 6
>> +
>> struct dpcls {
>> struct cmap_node node; /* Within dp_netdev_pmd_thread.classifiers
>> */
>> @@ -340,4 +344,13 @@ enum pmd_cycles_counter_type {
>> };
>>
>> +enum rxq_cycles_counter_type {
>> + RXQ_CYCLES_PROC_CURR, /* Cycles spent successfully polling and
>> + processing packets during the current
>> + interval. */
>> + RXQ_CYCLES_PROC_HIST, /* Total cycles of all intervals that are
>> used
>> + during rxq to pmd assignment. */
>> + RXQ_N_CYCLES
>> +};
>
> All patches wide: Multi-line comments should have a '*' on each line.
>
This struct follows the coding style "comments" section example struct.
I'll check the other ones.
>> +
>> #define XPS_TIMEOUT_MS 500LL
>>
>> @@ -351,4 +364,11 @@ struct dp_netdev_rxq {
>> particular core. */
>> struct dp_netdev_pmd_thread *pmd; /* pmd thread that polls this queue.
>> */
>> +
>> + /* Counters of cycles spent successfully polling and processing pkts. */
>> + atomic_ullong cycles[RXQ_N_CYCLES];
>> + /* We store PMD_RXQ_INTERVAL_MAX intervals of data for an rxq and then
>> + sum them to yield the cycles used for an rxq. */
>> + atomic_ullong cycles_intrvl[PMD_RXQ_INTERVAL_MAX];
>> + unsigned intrvl_idx; /* Write index for 'cycles_intrvl'.
>> */
>
> Does it matter to save 2 letters in a variable names? It looks ugly and
> unreadable.
>
I think the current name is ok. Maybe not perfect, but ok.
>> };
>>
>> @@ -677,5 +697,4 @@ static void pmd_load_cached_ports(struct
>> dp_netdev_pmd_thread *pmd)
>> static inline void
>> dp_netdev_pmd_try_optimize(struct dp_netdev_pmd_thread *pmd);
>> -
>
> Is it necessary to remove this line? It was here to split xps related
> functions
> from others.
>
no, it wasn't necessary to remove, but not worthwhile of patch now.
>> static void
>> dpif_netdev_xps_revalidate_pmd(const struct dp_netdev_pmd_thread *pmd,
>> @@ -3092,4 +3111,5 @@ cycles_count_end(struct dp_netdev_pmd_thread *pmd,
>> static inline void
>> cycles_count_intermediate(struct dp_netdev_pmd_thread *pmd,
>> + struct dp_netdev_rxq *rxq,
>> enum pmd_cycles_counter_type type)
>> OVS_NO_THREAD_SAFETY_ANALYSIS
>> @@ -3100,4 +3120,8 @@ cycles_count_intermediate(struct dp_netdev_pmd_thread
>> *pmd,
>>
>> non_atomic_ullong_add(&pmd->cycles.n[type], interval);
>> + if (rxq && (type == PMD_CYCLES_PROCESSING)) {
>> + /* Add to the amount of current processing cycles. */
>> + non_atomic_ullong_add(&rxq->cycles[RXQ_CYCLES_PROC_CURR], interval);
>> + }
>> }
>>
>> @@ -3668,5 +3692,5 @@ dpif_netdev_run(struct dpif *dpif)
>> port->rxqs[i].rx,
>> port->port_no);
>> - cycles_count_intermediate(non_pmd, process_packets ?
>> + cycles_count_intermediate(non_pmd, NULL,
>> process_packets ?
>> PMD_CYCLES_PROCESSING
>> : PMD_CYCLES_IDLE);
>
> It's not yours, but it'll be nice to fix here:
> According to coding style, '?' should be on the next line near to arguments.
> Also, IMHO, the whole construction should have the same level of indention.
>
> Like this:
> cycles_count_intermediate(non_pmd, NULL,
> process_packets
> ? PMD_CYCLES_PROCESSING
> : PMD_CYCLES_IDLE);
> Or this:
> cycles_count_intermediate(
>
> non_pmd, NULL, process_packets ?
> PMD_CYCLES_PROCESSING
> : PMD_CYCLES_IDLE);
>
I don't generally like to mix fixes with new code, even if it's small as
a reviewer has to think about it and it alters the commit message.
There's another coding style issue you caught elsewhere, so I'll fix
them together in a follow up patch.
>> @@ -3855,5 +3879,5 @@ reload:
>> dp_netdev_process_rxq_port(pmd, poll_list[i].rxq->rx,
>> poll_list[i].port_no);
>> - cycles_count_intermediate(pmd,
>> + cycles_count_intermediate(pmd, NULL,
>> process_packets ?
>> PMD_CYCLES_PROCESSING
>> : PMD_CYCLES_IDLE);
>> --
>> 1.8.3.1
>
>
_______________________________________________
dev mailing list
[email protected]
https://mail.openvswitch.org/mailman/listinfo/ovs-dev