[dpdk-dev] [PATCH] Adding RTE_KNI_PREEMPT configuration option

Marc Sune marc.sune at bisdn.de
Tue Feb 10 13:21:55 CET 2015


On 10/02/15 13:02, Bruce Richardson wrote:
> On Tue, Feb 10, 2015 at 12:59:29PM +0100, Marc Sune wrote:
>> This patch of Nov 2014 hasn't been yet ACKed/NACKed. Could someone please
>> give some quick feedback?
>>
>> Thanks
>> marc
>>
> Idea is good, any chance it could be added as a run-time rather than
> compile-time option?

It is also an option. I wasn't really thinking someone would want to 
change this behaviour at runtime. If we think it is worth, I can have a 
closer look on it. Any other opinions on this?

If we would go for a runtime flag, we would either have to add a config 
parameter to rte_kni_init() or add a specific call to turn on/off this 
knob, depending on whether it is sufficient to change this behaviour at 
bootstrapping time, or we want to also change it during 'operation'. In 
either case we would require some communication, probably via ioctl(), 
from user-space to kernel space.

Thanks
Marc

>
> /Bruce
>
>> On 07/11/14 12:00, Marc Sune wrote:
>>> This patch introduces CONFIG_RTE_KNI_PREEMPT flag. When set to 'no', KNI
>>> kernel thread(s) do not call schedule_timeout_interruptible(), which improves
>>> overall KNI performance at the expense of CPU cycles (polling).
>>>
>>> Default values is 'yes', maintaining the same behaviour as of now.
>>>
>>> Signed-off-by: Marc Sune <marc.sune at bisdn.de>
>>> ---
>>>   config/common_linuxapp                 |    1 +
>>>   lib/librte_eal/linuxapp/kni/kni_misc.c |    4 ++++
>>>   2 files changed, 5 insertions(+)
>>>
>>> diff --git a/config/common_linuxapp b/config/common_linuxapp
>>> index 57b61c9..24b529d 100644
>>> --- a/config/common_linuxapp
>>> +++ b/config/common_linuxapp
>>> @@ -380,6 +380,7 @@ CONFIG_RTE_LIBRTE_PIPELINE=y
>>>   # Compile librte_kni
>>>   #
>>>   CONFIG_RTE_LIBRTE_KNI=y
>>> +CONFIG_RTE_KNI_PREEMPT=y
>>>   CONFIG_RTE_KNI_KO_DEBUG=n
>>>   CONFIG_RTE_KNI_VHOST=n
>>>   CONFIG_RTE_KNI_VHOST_MAX_CACHE_SIZE=1024
>>> diff --git a/lib/librte_eal/linuxapp/kni/kni_misc.c b/lib/librte_eal/linuxapp/kni/kni_misc.c
>>> index ba77776..e7e6c27 100644
>>> --- a/lib/librte_eal/linuxapp/kni/kni_misc.c
>>> +++ b/lib/librte_eal/linuxapp/kni/kni_misc.c
>>> @@ -229,9 +229,11 @@ kni_thread_single(void *unused)
>>>   			}
>>>   		}
>>>   		up_read(&kni_list_lock);
>>> +#ifdef RTE_KNI_PREEMPT
>>>   		/* reschedule out for a while */
>>>   		schedule_timeout_interruptible(usecs_to_jiffies( \
>>>   				KNI_KTHREAD_RESCHEDULE_INTERVAL));
>>> +#endif
>>>   	}
>>>   	return 0;
>>> @@ -252,8 +254,10 @@ kni_thread_multiple(void *param)
>>>   #endif
>>>   			kni_net_poll_resp(dev);
>>>   		}
>>> +#ifdef RTE_KNI_PREEMPT
>>>   		schedule_timeout_interruptible(usecs_to_jiffies( \
>>>   				KNI_KTHREAD_RESCHEDULE_INTERVAL));
>>> +#endif
>>>   	}
>>>   	return 0;



More information about the dev mailing list