On 2021/9/22 2:11, Jerin Jacob wrote: > On Tue, Sep 21, 2021 at 10:42 PM Pai G, Sunil <sunil.pa...@intel.com> wrote: >> >> Hi Jerin, >> >> <snipped> >> >>>>> To understand it better, Could you share more details on feedback >>>>> mechanism on your application enqueue >>>>> >>>>> app_enqueue_v1(.., nb_seg) >>>>> { >>>>> /* Not enough space, Let application handle it by >>>>> dropping or resubmitting */ >>>>> if (rte_dmadev_burst_capacity() < nb_seg) >>>>> return -ENOSPC; >>>>> >>>>> do rte_dma_op() in loop without checking error; >>>>> return 0; // Success >>>>> } >>>>> >>>>> vs >>>>> app_enqueue_v2(.., nb_seg) >>>>> { >>>>> int rc; >>>>> >>>>> rc |= rte_dma_op() in loop without checking error; >>>>> return rc; // return the actual status to application >>>>> if Not enough space, Let application handle it by dropping or >>>>> resubmitting */ } >>>>> >>>>> Is app_enqueue_v1() and app_enqueue_v2() logically the same from >>>>> application PoV. Right? >>>>> >>>>> If not, could you explain, the version you are planning to do for >>>>> app_enqueue() >>>> >>>> The exact version can be found here : >>>> >>> http://patchwork.ozlabs.org/project/openvswitch/patch/20210907120021.4 >>>> 093604-2-sunil.pa...@intel.com/ Unfortunately, both versions are not >>>> same in our case because of the SW fallback we have for ring full >>>> scenario's. >>>> For a packet with 8 nb_segs, if the ring has only space for 4 , we >>>> would avoid this packet with app_enqueue_v1 while going ahead with an >>> enqueue with app_enqueue_v2, resulting in a mix of DMA and CPU copies >>> for a packet which we would want to avoid. >>> >>> Thanks for RFC link. Usage is clear now, Since you are checking the space in >>> the completion handler, I am not sure, what is hard to get the remaining >>> space, Will following logic work to find the empty space. If not, please >>> discuss >>> the issue with this approach. I am trying to avoid yet another fastpath API >>> and complication in driver as there is element checking space in the submit >>> queue and completion queue at least in our hardware. >>> >>> max_count = nb_desc; (power of 2) >>> mask = max_count - 1; >>> >>> for (i = 0; I < n; i++) { >>> submit_idx = rte_dma_copy(); >>> } >>> rc = rte_dma_completed(…, &completed_idx..); >>> space_in_queue = mask - ((submit_idx – completed_idx) & mask); >>> >> >> Unfortunately, space left in the device (as calculated by the app) still can >> mean there is no space in the device :| >> i.e its pmd dependent. > > I did not pay much attention to Jiayu's reply as I did not know what is DSA. > Now I searched the DSA in ml, I could see the PMD patches. > > If it is PMD limitation then I am fine with the proposed API. > > @Richardson, Bruce @Laatz, Kevin @feng Since it is used fastpath, Can > we move to fastpath handler and > remove additional check in fastpath from common code like other APIs.
+1 for move to fastpath. > >> >> As Jiayu mentioned before: >>> The fact is that it's very hard for apps to calculate the available space >>> of a DMA ring. >>> For DSA, the available space is decided by three factors: the number of >>> available slots >>> in SW ring, the max batching size of a batch descriptor, and if there are >>> available batch >>> descriptors. The first one is configured by SW, and apps can calculate it. >>> But the second >>> depends on DSA HW, and the third one is hided in DSA driver which is not >>> visible to apps. >>> Considering the complexity of different DMA HW, I think the best way is to >>> hide all details >>> inside DMA dev and provide this check capacity API for apps. >> >> <snipped> >> >> Thanks and regards, >> Sunil >> > . >