Hi Tonghao, Thanks, your patch works fine with HPET initialization. I will look into DPDK discussion which got started with your patch.
Thanks, Ravi On Mon, Apr 13, 2020 at 5:33 PM Tonghao Zhang <xiangxia.m....@gmail.com> wrote: > On Tue, Apr 14, 2020 at 7:20 AM Ilya Maximets <i.maxim...@ovn.org> wrote: > > > > On 4/13/20 5:27 PM, Ravi Kerur wrote: > > > On Sun, Apr 12, 2020 at 5:05 AM Tonghao Zhang < > xiangxia.m....@gmail.com> > > > wrote: > > > > > >> On Sun, Apr 12, 2020 at 7:57 AM Ravi Kerur <rke...@gmail.com> wrote: > > >>> > > >>> Hello OvS DPDK team, > > >>> > > >>> I am using OvS 2.13.90 and DPDK 19.11 and wanted to use HPET timer > > >> instead > > >>> of invariant TSC. > > >>> > > >>> Enabled CONFIG_RTE_LIBEAL_USE_HPET=y in DPDK > > >>> > > >>> Kernel has > > >>> CONFIG_HPET_TIMER=y > > >>> CONFIG_HPET_EMULATE_RTC=y > > >>> CONFIG_HPET=y > > >>> CONFIG_HPET_MMAP=y > > >>> CONFIG_HPET_MMAP_DEFAULT=y > > >>> > > >>> cat /sys/devices/system/clocksource/clocksource0/current_clocksource > > >>> tsc > > >>> # cat > /sys/devices/system/clocksource/clocksource0/available_clocksource > > >>> tsc hpet acpi_pm > > >>> > > >>> OvS crashes at > > >>> > > >>> gdb ovsdb-server /core > > >>> GNU gdb (Ubuntu 8.1-0ubuntu3) 8.1.0.20180409-git > > >>> Copyright (C) 2018 Free Software Foundation, Inc. > > >>> License GPLv3+: GNU GPL version 3 or later < > > >> http://gnu.org/licenses/gpl.html > > >>>> > > >>> This is free software: you are free to change and redistribute it. > > >>> There is NO WARRANTY, to the extent permitted by law. Type "show > > >> copying" > > >>> and "show warranty" for details. > > >>> This GDB was configured as "x86_64-linux-gnu". > > >>> Type "show configuration" for configuration details. > > >>> For bug reporting instructions, please see: > > >>> <http://www.gnu.org/software/gdb/bugs/>. > > >>> Find the GDB manual and other documentation resources online at: > > >>> <http://www.gnu.org/software/gdb/documentation/>. > > >>> For help, type "help". > > >>> Type "apropos word" to search for commands related to "word"... > > >>> Reading symbols from ovsdb-server...done. > > >>> [New LWP 9729] > > >>> [Thread debugging using libthread_db enabled] > > >>> Using host libthread_db library > > >> "/lib/x86_64-linux-gnu/libthread_db.so.1". > > >>> Core was generated by `ovsdb-server > /usr/local/etc/openvswitch/conf.db > > >>> -vconsole:emer -vsyslog:err -vf'. > > >>> Program terminated with signal SIGSEGV, Segmentation fault. > > >>> #0 0x0000560fc6db8ac1 in rte_get_hpet_cycles () > > >> Hi, > > >> This is a bug on dpdk, NOT ovs. > > >> I guess that your kernel does't support getentropy which supported in > > >> 3.17 and your cpu don't support rdseed. > > >> and that cause a dpdk bug. To workaround, you change: Not tested, hope > > >> it's useful for you > > >> > > >> > > > You are correct CPU doesn't support RDSEED instruction but RDRAND is > > > supported. > > > > > > It's a RT kernel based on 4.19 + RT patches. > > > > > > Setting CONFIG_RTE_LIBEAL_USE_HPET=n which is the default,'Invariant > TSC' > > > will be used. However, I want to use HPET so should I check with DPDK > dev? > > > > Yes. This is a pure DPDK bug. There is no way to fix it from the OVS > side. > > Adding dpdk-dev in CC, moving ovs-dev to BCC to avoid cross posting. > Hi Ilya > I sent a patch to dpdk, but not applied. If applied, I feedback to this > thread. > > Actually, looking at the code in DPDK, it's really old. I'm wondering > if it > > ever worked? Looks like no-one ever tested this configuration. > > > > Best regards, Ilya Maximets. > > > > > > > > Thanks, > > > Ravi > > > > > > > > > > > >> diff --git a/lib/librte_eal/linux/eal_timer.c > > >> b/lib/librte_eal/linux/eal_timer.c > > >> index a904a8297cd2..4067e46da534 100644 > > >> --- a/lib/librte_eal/linux/eal_timer.c > > >> +++ b/lib/librte_eal/linux/eal_timer.c > > >> @@ -26,7 +26,7 @@ > > >> #include "eal_private.h" > > >> #include "eal_internal_cfg.h" > > >> > > >> -enum timer_source eal_timer_source = EAL_TIMER_HPET; > > >> +enum timer_source eal_timer_source = EAL_TIMER_TSC; > > >> > > >> #ifdef RTE_LIBEAL_USE_HPET > > >> > > >> > > >>> (gdb) bt > > >>> #0 0x0000560fc6db8ac1 in rte_get_hpet_cycles () > > >>> #1 0x0000560fc6c482b0 in rte_rand_init () > > >>> #2 0x0000560fc6e125bd in __libc_csu_init () > > >>> #3 0x00007f5e1f930b28 in __libc_start_main (main=0x560fc6c45940 > <main>, > > >>> argc=14, argv=0x7fff61ae5088, init=0x560fc6e12570 <__libc_csu_init>, > > >>> fini=<optimized out>, rtld_fini=<optimized out>, > > >>> stack_end=0x7fff61ae5078) at ../csu/libc-start.c:266 > > >>> #4 0x0000560fc6c485da in _start () > > >>> (gdb) quit > > >>> > > >>> RTE_INIT(rte_rand_init) > > >>> { > > >>> ... > > >>> } > > >>> > > >>> rte_rand_init is defined as initializer, following diffs won't help, > > >>> > > >>> diff --git a/lib/dpdk.c b/lib/dpdk.c > > >>> index 31450d470..f3d3989c8 100644 > > >>> --- a/lib/dpdk.c > > >>> +++ b/lib/dpdk.c > > >>> @@ -405,6 +405,12 @@ dpdk_init__(const struct smap *ovs_other_config) > > >>> if (result < 0) { > > >>> VLOG_EMER("Unable to initialize DPDK: %s", > > >>> ovs_strerror(rte_errno)); > > >>> return false; > > >>> + } else { > > >>> +#ifdef RTE_LIBEAL_USE_HPET > > >>> + if (rte_eal_hpet_init(1) < 0) { > > >>> + VLOG_ERR("HPET is not enabled, using TSC as default > > >> timer\n"); > > >>> + } > > >>> +#endif > > >>> } > > >>> > > >>> if (VLOG_IS_DBG_ENABLED()) { > > >>> > > >>> Kindly let me know your inputs on how to overcome this issue. > > >>> > > >>> Thanks, > > >>> Ravi > > >>> _______________________________________________ > > >>> dev mailing list > > >>> d...@openvswitch.org > > >>> https://mail.openvswitch.org/mailman/listinfo/ovs-dev > > >> > > >> > > >> > > >> -- > > >> Best regards, Tonghao > > >> > > > _______________________________________________ > > > dev mailing list > > > d...@openvswitch.org > > > https://mail.openvswitch.org/mailman/listinfo/ovs-dev > > > > > > > > -- > Best regards, Tonghao >