On Sun, Apr 12, 2020 at 7:57 AM Ravi Kerur <[email protected]> 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

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
> [email protected]
> https://mail.openvswitch.org/mailman/listinfo/ovs-dev



-- 
Best regards, Tonghao
_______________________________________________
dev mailing list
[email protected]
https://mail.openvswitch.org/mailman/listinfo/ovs-dev

Reply via email to