We also tried to turn off the watchdog, then we got RCU stall. INFO: rcu_sched self-detected stall on CPU
Is there any system configuration that should be made before setting RTE_KNI_PREEMPT_DEFAULT to n? 2017-11-27 20:49 GMT+08:00 junlee <[email protected]>: > Hi Jay, > > Thanks. > We have read the thread before, increasing HZ to 1000 helps, but we are > looking for latency even less than 1ms. > The DPDK version is 17.05. > > The kernel preempt setting is: > CONFIG_PREEMPT_NONE=y > # CONFIG_PREEMPT_VOLUNTARY is not set > # CONFIG_PREEMPT is not set > > Seems the watchdog/x process could not get chance to run > when schedule_timeout_interruptible() is not called. > > Thanks. > BR//Wendy > > 2017-11-27 20:36 GMT+08:00 Jay Rolette <[email protected]>: > >> That shouldn't cause soft-lockups, but IIRC, there have been KNI bugs in >> that past that would. Probably worth checking whatever version of DPDK you >> are running vs. the tree for relevant fixes. >> >> Given what you are looking into, this thread may be of interest: >> >> http://dpdk.org/ml/archives/dev/2015-June/018858.html >> >> Jay >> >> On Sun, Nov 26, 2017 at 7:27 PM, junlee <[email protected]> wrote: >> >>> Hi, >>> >>> We are testing KNI performance and finds the >>> schedule_timeout_interruptible >>> causes extra latency for packets. >>> >>> We tried to set RTE_KNI_PREEMPT_DEFAULT=n to reduce the latency, but ends >>> up with CPU soft-lockup. >>> >>> Anybody knows how to make this work? >>> >>> static int >>> kni_thread_single(void *data) >>> { >>> struct kni_net *knet = data; >>> int j; >>> struct kni_dev *dev; >>> >>> while (!kthread_should_stop()) { >>> down_read(&knet->kni_list_lock); >>> for (j = 0; j < KNI_RX_LOOP_NUM; j++) { >>> list_for_each_entry(dev, &knet->kni_list_head, list) { >>> kni_net_rx(dev); >>> kni_net_poll_resp(dev); >>> } >>> } >>> up_read(&knet->kni_list_lock); >>> #ifdef RTE_KNI_PREEMPT_DEFAULT >>> /* reschedule out for a while */ >>> schedule_timeout_interruptible( >>> usecs_to_jiffies(KNI_KTHREAD_RESCHEDULE_INTERVAL)); >>> #endif >>> } >>> >>> return 0; >>> } >>> >>> Thanks. >>> >> >> >
