On 6/16/22 16:07, Jon Kohler wrote: > > >> On Jun 3, 2022, at 1:00 PM, Ilya Maximets <i.maxim...@ovn.org> wrote: >> >> On 6/3/22 16:47, Jon Kohler wrote: >>> >>> >>>> On Jun 2, 2022, at 5:50 PM, Ilya Maximets <i.maxim...@ovn.org> wrote: >>>> >>>> On 6/2/22 23:13, Jon Kohler wrote: >>>>> Any takers? I’m hoping I’ve got the right mailing list, as I did see >>>>> the thread get generated on the mailing list website? >>>> >>>> Hey, Jon. >>>> >>>> Yes, it's the right mailing list, though ovs-dev and dev are >>>> the same thing, so you don't need to send to both. >>>> >>>> For the subject, you sent a patch just about a week ago. >>>> Unfortunately, patches are not moving that fast. People >>>> are busy with working on issues and doing reviews of other >>>> patches, so please, be patient. >>>> >>>> Just from the patches received last month we still have >>>> about 60 under review right now. You can see them in the >>>> patchwork here: >>>> https://urldefense.proofpoint.com/v2/url?u=https-3A__patchwork.ozlabs.org_project_openvswitch_list_&d=DwIDaQ&c=s883GpUCOChKOHiocYtGcg&r=NGPRGGo37mQiSXgHKm5rCQ&m=8oqFH3XK_nAzOxdHmUuHbWgSEPemwCFQKUdGExfEPEx3NfR3ioDpK5CZHwMdEyf_&s=Osr7hGzYKATNpHa9IvtWygokIFsGsmT4GrnDuUQ3FzY&e= >>>> >>>> >>>> And as you can see we have much older patches too. So, it >>>> will take some time until someone will get to yours. >>>> >>>> Best regards, Ilya Maximets. >>> >>> Thanks for the feedback and pointers. My apologies, I wasn’t trying to be >>> ansty :) this is my first patch to this mailing list and wanted to make >>> sure it >>> was going to the right place. >> >> No problem. :) >> >>> >>> Ok no problems, I can fully empathize with patch review backlogs :) No >>> specific rush on this one. Nice CPU win whenever someone can get >>> to it, but would definitely rather have quality over speed to make sure >>> we haven’t missed anything! :) >> >> Thanks for working on improvements! I hope, someone will get >> to this patch in the near future as it looks interesting indeed. > > Hey all, checking back on this one, its been a couple weeks and > figured I’d reach out as I saw some release work happen on the > mailing list recently, and hoping that may have freed up some cycles? > > Also, forgive the silly question, I’m not sure what this mailing lists > preference > is on touchpoint like this, or if it is better to do a resend on the patch > instead? Didn’t want to do that in case it was frowned upon.
No need to re-send. Just a ping is enough, unless the patch needs a significant re-work due to other changes. If the patch in in the patchwork, it can be picked up. Things are not moving very fast around here... > > As mentioned, no specific rush on this one, just my first patch to OVS > and want to make sure I’m doing right by the list. No problem. For the patch itself: The code looks correct to me, see some minor comments below. Best regards, Ilya Maximets. > > Thanks again, > Jon > >> >>> >>> Cheers, >>> Jon >>> >>>> >>>>> >>>>>> On May 31, 2022, at 10:03 AM, Jon Kohler <j...@nutanix.com> wrote: >>>>>> >>>>>> >>>>>> >>>>>>> On May 26, 2022, at 9:11 PM, Jon Kohler <j...@nutanix.com> wrote: >>>>>>> >>>>>>> For netdev_linux_update_via_netlink(), hint to the kernel that >>>>>>> we do not need it to gather netlink internal stats when we want >>>>>>> to update the netlink flags, as those stats are not rendered >>>>>>> within OVS. >>>>>>> >>>>>>> Background: >>>>>>> ovs-vswitchd can spend quite a bit of time blocked by the kernel >>>>>>> during netlink calls, especially systems with many cores. This >>>>>>> time is dominated by the kernel-side internal stats gathering >>>>>>> mechanism in netlink, specifically: >>>>>>> inet6_fill_link_af >>>>>>> inet6_fill_ifla6_attrs >>>>>>> __snmp6_fill_stats64 >>>>>>> >>>>>>> In Linux 4.4+, there exists a hint for netlink requests to not >>>>>>> trigger the ipv6 stats gathering mechanism, which greatly reduces >>>>>>> the amount of time that ovs-vswitchd is on CPU. >>>>>>> >>>>>>> Testing and Results: >>>>>>> Tested booting 320 VM's and measuring OVS utilization with perf >>>>>>> record, then visualized into a flamegraph using a patched version >>>>>>> of ovs 2.14.2. Calls under bridge_run() seem to get hit the worst >>>>>>> by this issue. >>>>>>> >>>>>>> Before bridge_run() == 11.3% of samples >>>>>>> After bridge_run() == 3.4% of samples >>>>>>> >>>>>>> Note that there are at least two observed netlink calls under >>>>>>> bridge_run that are still kernel stats heavy after this patch: >>>>>>> >>>>>>> Call 1: >>>>>>> bridge_run -> netdev_run -> route_table_run -> route_table_reset -> >>>>>>> ovs_router_insert -> ovs_router_insert__ -> get_src_addr -> >>>>>>> netdev_ger_addr_list -> netdev_linux_get_addr_list -> getifaddrs >>>>>>> >>>>>>> Since the actual netlink call is coming from getifaddrs() in glibc, >>>>>>> fixing would likely involve either duplicating glibc code in ovs >>>>>>> source or patch glibc. >>>>>>> >>>>>>> Call 2: >>>>>>> bridge_run -> iface_refresh_stats -> netdev_get_stats -> >>>>>>> netdev_linux_get_stats -> get_stats_via_netlink >>>>>>> >>>>>>> This does use netlink based stats; however, it isn't immediately >>>>>>> clear if just dropping the stats from inet6_fill_link_af would >>>>>>> impact anything or not. Given this call is more intermittent, its >>>>>>> of lesser concern. >>>>>>> >>>>>>> Signed-off-by: Jon Kohler <j...@nutanix.com> >>>>>>> Acked-by: Greg Smith <gasm...@nutanix.com> >>>>>> >>>>>> Gentle bump >>>>> >>>>> >>>>> >>>>>> >>>>>>> --- >>>>>>> lib/netdev-linux.c | 9 +++++++++ >>>>>>> 1 file changed, 9 insertions(+) >>>>>>> >>>>>>> diff --git a/lib/netdev-linux.c b/lib/netdev-linux.c >>>>>>> index 2766b3f2bf..f0246d3b2b 100644 >>>>>>> --- a/lib/netdev-linux.c >>>>>>> +++ b/lib/netdev-linux.c >>>>>>> @@ -247,6 +247,12 @@ enum { >>>>>>> VALID_NUMA_ID = 1 << 8, >>>>>>> }; >>>>>>> >>>>>>> +/* Linux 4.4 introduced the ability to skip the internal stats >>>>>>> gathering >>>>>>> + * that netlink does via an external filter mask that can be passed >>>>>>> into >>>>>>> + * a netlink request. >>>>>>> + */ >>>>>>> +#define RTEXT_FILTER_SKIP_STATS (1 << 3) Please, don't use tabs. :) Also, we should, probably, avoid re-defining the value if it was already defined in kernel uAPI headers. So, it's better to guard with #ifndef as we do for other similar definitions. AFAICT, kernel will just ignore unknown flag, e.g. if it's older than 4.4, is that correct? >>>>>>> + >>>>>>> /* Use one for the packet buffer and another for the aux buffer to >>>>>>> receive >>>>>>> * TSO packets. */ >>>>>>> #define IOV_STD_SIZE 1 >>>>>>> @@ -6418,6 +6424,9 @@ netdev_linux_update_via_netlink(struct >>>>>>> netdev_linux *netdev) >>>>>>> if (netdev_linux_netnsid_is_remote(netdev)) { >>>>>>> nl_msg_put_u32(&request, IFLA_IF_NETNSID, netdev->netnsid); >>>>>>> } >>>>>>> + >>>>>>> + nl_msg_put_u32(&request, IFLA_EXT_MASK, RTEXT_FILTER_SKIP_STATS); >>>>>>> + >>>>>>> error = nl_transact(NETLINK_ROUTE, &request, &reply); >>>>>>> ofpbuf_uninit(&request); >>>>>>> if (error) { >>>>>>> -- >>>>>>> 2.30.1 (Apple Git-130) >>>>> >>>>> _______________________________________________ >>>>> dev mailing list >>>>> d...@openvswitch.org >>>>> https://urldefense.proofpoint.com/v2/url?u=https-3A__mail.openvswitch.org_mailman_listinfo_ovs-2Ddev&d=DwIDaQ&c=s883GpUCOChKOHiocYtGcg&r=NGPRGGo37mQiSXgHKm5rCQ&m=8oqFH3XK_nAzOxdHmUuHbWgSEPemwCFQKUdGExfEPEx3NfR3ioDpK5CZHwMdEyf_&s=h-hQ3onb9ZZoJwMrpOdPVN0uZVoTPJtZ8ZHFKTCknZ0&e= >>> >> > _______________________________________________ dev mailing list d...@openvswitch.org https://mail.openvswitch.org/mailman/listinfo/ovs-dev