Hello Morten, Thanks for your giving me your valuable feedback. Please see inline tagged with [Hideyuki].
> > From: dev [mailto:dev-boun...@dpdk.org] On Behalf Of Hideyuki Yamashita > > Sent: Wednesday, November 25, 2020 6:40 AM > > > > Hello, > > > > Following are the work items planned for 21.02 from NTT TechnoCross: > > I will try to post patch set after 20.11 is released. > > > > --- > > 1) Introduce API stats function > > In general, DPDK application consumes CPU usage because it polls > > incoming packets using rx_burst API in infinite loop. > > This makes difficult to estimate how much CPU usage is really > > used to send/receive packets by the DPDK application. > > > > For example, even if no incoming packets arriving, CPU usage > > looks nearly 100% when observed by top command. > > > > It is beneficial if developers can observe real CPU usage of the > > DPDK application. > > Such information can be exported to monitoring application like > > prometheus/graphana and shows CPU usage graphically. > > This would be very beneficial. > > Unfortunately, this seems to be not so simple for applications like the > SmartShare StraightShaper, which is not a simple packet forwarding > application, but has multiple pipeline stages. Our application also keeps > some packets in queues for shaping purposes, so the number of packets > transmitted does not match the number of packets received within some time > interval. [Hideyuki] Thanks. I share the same view with you. DPDK application varies and not all applications "simply forward incoming packets". So I think maybe target applications are limited. Though I believe this enhancement is useful for those applications still. > > > > To achieve above, this patch set provides apistats functionality. > > apistats provides the followiing two counters for each lcore. > > - rx_burst_counts[RTE_MAX_LCORE] > > - tx_burst_counts[RTE_MAX_LCORE] > > Those accumulates rx_burst/tx_burst counts since the application > > starts. > > > > By using those values, developers can roughly estimate CPU usage. > > Let us assume a DPDK application is simply forwarding packets. > > It calls tx_burst only if it receive packets. > > If rx_burst_counts=1000 and tx_burst_count=1000 during certain > > period of time, one can assume CPU usage is 100%. > > If rx_burst_counts=1000 and tx_burst_count=100 during certain > > period of time, one can assume CPU usage is 10%. > > Here we assumes that tx_burst_count equals counts which rx_burst > > function > > really receives incoming packets. > > I am not sure I understand what is being counted in these counters. The > number of packets in the bursts, or the number of invocations of the > rx_burst/tx_burst functions. [Hideyuki] Latter. I think exsisting mechanism may store number of packets. (maybe I am wrong) > > Here are some data from our purpose built profiler, illustrating how > nonlinear this really is. These data are from a SmartShare appliance in live > production at an ISP. I hope you find it useful: > > Rx_burst uses ca. 40 CPU cycles if there are no packets, ca. 260 cycles if > there is one packet, and down to ca. 40 cycles per packet for a burst of many > packets. > > Tx_burst uses ca. 350 cycles for one packet, and down to ca. 20 cycles per > packet for a burst of many packets. [Hideyuki] Thanks for your sharing useful info! Ah, I realized that consumption of CPU cycle is not linear like following. 0 packet receive -> 0 cycle 1 packet receive -> 1 cycle 10 packets receive -> 10 cycle It is very interesting. Thanks for your information. I will keep your information in my mind. > One of our intermediate pipeline stages (which not is not receiving or > transmitting packets, only processing them) uses ca. 150 cycles for a burst > of one packet, and down to ca. 110 cycles for a burst of many packets. > > Nevertheless, your suggested API might be usable by simple > ingress->routing->egress applications. So don’t let me discourage you! [Hideyuki] Thanks for your supporting my idea. Yes, I agree with you that for simple forwarding applications, this enhancement might be useful to monitor the cpu usage "roughly". BR, Hideyuki Yamashita NTT TechnoCross >