On Tue, Sep 21, 2021 at 7:46 PM Pai G, Sunil <sunil.pa...@intel.com> wrote: > > Hi Jerin,
Hi Sunil, > > > > > > > From: Kevin Laatz <[2]kevin.la...@intel.com> > > > > > > Add a burst capacity check API to the dmadev library. This API > > > > > > is > > > > > > useful to > > > > > > applications which need to how many descriptors can be enqueued > > in > > > > > > the > > > > > > current batch. For example, it could be used to determine > > > > > > whether > > > > > > all > > > > > > segments of a multi-segment packet can be enqueued in the > > > > > > same > > > > batch > > > > > > or not > > > > > > (to avoid half-offload of the packet). > > > > > > > > > > > > #Could you share more details on the use case with vhost? > > > > > > # Are they planning to use this in fast path if so it need to > > > > > > move as > > > > > > fast path function pointer? > > > > > > > > > > I believe the intent is to use it on fastpath, but I would assume > > > > > only once per burst, so the penalty for non-fastpath may be > > > > > acceptable. As you point out - for an app that really doesn't want > > > > > to have to pay that penalty, tracking ring use itself is possible. > > > > > > > > > > The desire for fast-path use is also why I suggested having the > > > > > space as an optional return parameter from the submit API call. It > > > > > could logically also be a return value from the "completed" call, > > > > > which might actually make more sense. > > > > > > > > > > > # Assume the use case needs N rte_dma_copy to complete a > > > > > > logical > > > > copy > > > > > > at vhost level. Is the any issue in half-offload, meaning when N > > > > > > th > > one > > > > > > successfully completed then only the logical copy is completed. > > Right? > > > > > > > > > > Yes, as I understand it, the issue is for multi-segment packets, > > > > > where we only want to enqueue the first segment if we know we will > > > > > success with the final one too. > > > > > > > > Sorry for the delay in reply. > > > > > > > > If so, why do we need this API. We can mark a logical transaction > > > > completed IFF final segment is succeeded. Since this fastpath API, I > > > > would like to really understand the real use case for it, so if > > > > required then we need to implement in an optimized way. > > > > Otherwise driver does not need to implement this to have generic > > > > solution for all the drivers. > > > > > > Hi Jiayu, Sunil, > > > > > The fact is that it's very hard for apps to calculate the available > > > space of a > > DMA ring. > > > > Yes, I agree. > > > > My question is more why to calculate the space per burst and introduce yet > > another fastpath API. > > For example, the application needs to copy 8 segments to complete a logical > > copy in the application perspective. > > In case, when 8th copy is completed then only the application marks the > > logical copy completed. > > i.e why to check per burst, 8 segments are available or not? Even it is > > available, there may be multiple reasons why any of the segment copies can > > fail. So the application needs to track all the jobs completed or not > > anyway. > > Am I missing something in terms of vhost or OVS usage? > > > > For the packets that do not entirely fit in the DMA ring , we have a SW copy > fallback in place. > So, we would like to avoid scenario caused because of DMA ring full where few > parts of the packet are copied through DMA and other parts by CPU. > Besides, this API would also help improve debuggability/device introspection > to check the occupancy rather than the app having to manually track the state > of every DMA device in use. 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() > Copying from other thread: > > > What are those scenarios, could you share some descriptions of them. > > What if the final or any segment fails event the space is available. > > So you have to take care of that anyway. RIght? > > I think this is app dependent no? The application can choose not to take > care of such scenarios and treat the packets as dropped. > Ring full scenarios(-ENOSPC from rte_dma_copy) could be avoided with this API > but other errors mean a failure which unfortunately cannot be avoided. > > > > > > 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. > > > > > > Thanks, > > > Jiayu > > > > > > > > > > > > > > > > > > # There is already nb_desc with which a dma_queue is configured. > > So if > > > > > > the application does its accounting properly, it knows how many > > desc it > > > > > > has used up and how many completions it has processed. > > > > > > > > > > Agreed. It's just more work for the app, and for simplicity and > > > > > completeness I think we should add this API. Because there are > > > > > other options I think it should be available, but not as a > > > > > fast-path fn (though again, the difference is likely very small > > > > > for something not called for every enqueue). > > > > > > > > > > > Would like to understand more details on this API usage. > > > > > > > > > > > Adding Sunil and Jiayu on CC who are looking at this area from the > > > > > OVS and vhost sides. > > > > > > > > See above. > > > > > > > > Sunil. Jiayu, Could you share the details on the usage and why it is > > needed. > > > > > > > > > > > > > > > > > > /Bruce