[dpdk-dev] eventdev: method for finding out unlink status

Elo, Matias (Nokia - FI/Espoo) matias.elo at nokia.com
Mon Jul 30 15:36:35 CEST 2018


>> For this "runtime scale down" use-case the missing information is being
>> able to identify when an unlink is complete. After that (and ensuring the
>> port buffer is empty) the application can be guaranteed that there are no
>> more events going to be sent to that port, and the application can take
>> the worker lcore out of its polling-loop and put it to sleep.
>> 
>> As mentioned before, I think an "unlinks_in_progress()" function is perhaps
>> the easiest way to achieve this functionality, as it allows relatively simple
>> tracking of unlinks() using an atomic counter in sw. (Implementation details
>> become complex when we have a separate core running event/sw, separate cores
>> polling, and a control-plane thread calling unlink...)
>> 
>> I think the end result we're hoping for is something like pseudo code below,
>> (keep in mind that the event/sw has a service-core thread running it, so no
>> application code there):
>> 
>> int worker_poll = 1;
>> 
>> worker() {
>>  while(worker_poll) {
>>     // eventdev_dequeue_burst() etc
>>  }
>>  go_to_sleep(1);
>> }
>> 
>> control_plane_scale_down() {
>>  unlink(evdev, worker, queue_id);
>>  while(unlinks_in_progress(evdev) > 0)
>>      usleep(100);
>> 
>>  /* here we know that the unlink is complete.
>>   * so we can now stop the worker from polling */
>>  worker_poll = 0;
>> }
> 
> 
> Make sense. Instead of rte_event_is_unlink_in_progress(), How about
> adding a callback in rte_event_port_unlink() which will be called on 
> unlink completion. It will reduce the need for ONE more API.
> 
> Anyway it RC2 now, so we can not accept a new feature. So we will have
> time for deprecation notice.
> 

Both solutions should work but I would perhaps favor Harry's approach as it
requires less code in the application side and doesn't break backward
compatibility.



More information about the dev mailing list