From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from dpdk.org (dpdk.org [92.243.14.124]) by inbox.dpdk.org (Postfix) with ESMTP id 07A33A0577; Tue, 14 Apr 2020 01:20:25 +0200 (CEST) Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id 070391C05C; Tue, 14 Apr 2020 01:20:25 +0200 (CEST) Received: from relay5-d.mail.gandi.net (relay5-d.mail.gandi.net [217.70.183.197]) by dpdk.org (Postfix) with ESMTP id 4150E1C038 for ; Tue, 14 Apr 2020 01:20:23 +0200 (CEST) X-Originating-IP: 90.177.210.238 Received: from [192.168.1.113] (238.210.broadband10.iol.cz [90.177.210.238]) (Authenticated sender: i.maximets@ovn.org) by relay5-d.mail.gandi.net (Postfix) with ESMTPSA id 329251C0003; Mon, 13 Apr 2020 23:20:21 +0000 (UTC) To: Ravi Kerur , Tonghao Zhang Cc: i.maximets@ovn.org, dev@dpdk.org References: From: Ilya Maximets Message-ID: Date: Tue, 14 Apr 2020 01:20:21 +0200 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Thunderbird/68.6.0 MIME-Version: 1.0 In-Reply-To: Content-Type: text/plain; charset=utf-8 Content-Language: en-US Content-Transfer-Encoding: 7bit Subject: Re: [dpdk-dev] [ovs-dev] OvS DPDK crash when HPET timer enabled X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Sender: "dev" On 4/13/20 5:27 PM, Ravi Kerur wrote: > On Sun, Apr 12, 2020 at 5:05 AM Tonghao Zhang > wrote: > >> On Sun, Apr 12, 2020 at 7:57 AM Ravi Kerur 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: >>> . >>> Find the GDB manual and other documentation resources online at: >>> . >>> 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. 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
, >>> argc=14, argv=0x7fff61ae5088, init=0x560fc6e12570 <__libc_csu_init>, >>> fini=, rtld_fini=, >>> 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 >>> dev@openvswitch.org >>> https://mail.openvswitch.org/mailman/listinfo/ovs-dev >> >> >> >> -- >> Best regards, Tonghao >> > _______________________________________________ > dev mailing list > dev@openvswitch.org > https://mail.openvswitch.org/mailman/listinfo/ovs-dev >