From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-pl1-x629.google.com (mail-pl1-x629.google.com [IPv6:2607:f8b0:4864:20::629]) by sourceware.org (Postfix) with ESMTPS id 38FBF384CB97 for ; Thu, 15 Feb 2024 17:22:46 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 38FBF384CB97 Authentication-Results: sourceware.org; dmarc=none (p=none dis=none) header.from=rivosinc.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=rivosinc.com ARC-Filter: OpenARC Filter v1.0.0 sourceware.org 38FBF384CB97 Authentication-Results: server2.sourceware.org; arc=none smtp.remote-ip=2607:f8b0:4864:20::629 ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1708017769; cv=none; b=D38XnVo3cnn8wD4uCCjL7POSmTG/rweMd/Tn/buIrWloYSE8IRkGYYm5IlVNOCyQvFNEIH5ownap7csvahyE2xAMXZJCtC7bQmN8e3ES6T+j4zWHZOlsmAqQXtFoAAWceJ5kIItKGAdufLTeQ3dC1MkssUKes/7vdbGwpu7iYLQ= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1708017769; c=relaxed/simple; bh=Nfh7h0XhZjjHTl2ZqpPpNwlaitLKg399QwP1jq7CA8M=; h=DKIM-Signature:Date:Subject:From:To:Message-ID:Mime-Version; b=fVojILxxSXbh5e8NQ+NlraeeA4SCyo9GDzFRDcPGTQKT2+jhuiZ4f2rtAWpM8jOrUnJ00pblWuB2+6W0WlyEAvH2Svkpdtp81kFOQLGmpyAjhxQk4Gtx/jFNDagn5Ga9uOZA+pwzkop3OCdGUBkenZdjht7j26OMbWDnVrucJLQ= ARC-Authentication-Results: i=1; server2.sourceware.org Received: by mail-pl1-x629.google.com with SMTP id d9443c01a7336-1d8aadc624dso9452975ad.0 for ; Thu, 15 Feb 2024 09:22:46 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=rivosinc-com.20230601.gappssmtp.com; s=20230601; t=1708017765; x=1708622565; darn=sourceware.org; h=content-transfer-encoding:mime-version:message-id:to:from:cc :in-reply-to:subject:date:from:to:cc:subject:date:message-id :reply-to; bh=ayD05FuIA0BtzCSHOiJ5VMJDBEuyNyZYrPZ/vN7eE7Q=; b=kOApkrV9TZ2SgfhBJPtUEK13WuW3ZIJ3qWQqBhLwxAORjTEbbwBS5s7/LFs59jy/rU 4D/zt0O/a7W08gbvdkmrGqX/glW3/j7dfTyNY6a3zjzZaSF2zP7A6wCanmAPeftv7dGq 7EYr4YCwvtZ41GJj3zD2gC5f5UZMeq19zQncnKLybZpi7erfX+NX6YyceaNw7hBjueAH w+xnEpUgCWyuULK0yT5wZYjM2OzYSCxNM02azY0CmeybJbH4gpMPbN1hsoQ2s29A3D6c hcDUxCAXYtVOgvK9o7gSpm4Ccz8kySJ6UKxg11JsibdStCH/V2Y3wHn1xaLnXtlKpfXV awJg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1708017765; x=1708622565; h=content-transfer-encoding:mime-version:message-id:to:from:cc :in-reply-to:subject:date:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=ayD05FuIA0BtzCSHOiJ5VMJDBEuyNyZYrPZ/vN7eE7Q=; b=DIaY7yJZoN9/2mDpg7P7wTnmjJQ1Y4C99GBjUeHFxyXUVjlfmW5OikK8DnmsMI63hb 3s5/j6EZqKDp1stFv4EPnDhC2Mjyhpubwybxol/oCVqQpC/wUFvuNWCVWqVVTfvw0C7X QaMsFAuMhtO5NamonicL9MHCMgWh9Nrf1IEHfZ1xSDgOEiV/DSOxow9yafG2s6S9ct4K SSanTR7B1tsRRSZl8D0APHCYgVLO4XTmHIGsPnHS0B3AjUfYZaYXMjls0wGR7UbTON0R FwZD9cRndHTmcr92n+6ringICjmywwKmWTrJBbPaw5HLisOXsONNF7rjAeMH5o8mn9Qa 1PeA== X-Forwarded-Encrypted: i=1; AJvYcCW+n/mUIKFMVY1coIqzpmKS/byG+R4HhveGSzCHM1jHfGvu+ZgVTnNfTpwjf2qeeA/F03L6XSCEIfZgKqHksAXgJwz69Eg/AqYW X-Gm-Message-State: AOJu0YyMefBhhTDFMsA37g+FoxlPEPHZGGcxyTi17L+kc7g33GgdbiBl rHch/PDMPp5+7LN+s3+cmZZxx3cuTjaDMZLzBK6FZKE1gWqquoJqLM80ncDPJKQ= X-Google-Smtp-Source: AGHT+IFv1mNRJ+k9oqvRzF+//+EZIqkheE725wG8fMq4U/C43XIHjlVdmXbzEIpDtlS3IVIZBJcQQQ== X-Received: by 2002:a17:902:b289:b0:1db:335f:492 with SMTP id u9-20020a170902b28900b001db335f0492mr2328279plr.9.1708017765134; Thu, 15 Feb 2024 09:22:45 -0800 (PST) Received: from localhost ([192.184.165.199]) by smtp.gmail.com with ESMTPSA id mp14-20020a170902fd0e00b001db93340f9bsm1021819plb.205.2024.02.15.09.22.44 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 15 Feb 2024 09:22:44 -0800 (PST) Date: Thu, 15 Feb 2024 09:22:44 -0800 (PST) X-Google-Original-Date: Thu, 15 Feb 2024 09:22:42 PST (-0800) Subject: Re: [PATCH v12 0/7] RISC-V: ifunced memcpy using new kernel hwprobe interface In-Reply-To: CC: Evan Green , adhemerval.zanella@linaro.org, libc-alpha@sourceware.org, Vineet Gupta , fweimer@redhat.com, slewis@rivosinc.com, jrtc27@debian.org From: Palmer Dabbelt To: enh@google.com Message-ID: Mime-Version: 1.0 (MHng) Content-Type: text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding: 8bit X-Spam-Status: No, score=-4.9 required=5.0 tests=BAYES_00,DKIM_SIGNED,DKIM_VALID,RCVD_IN_DNSWL_NONE,SPF_HELO_NONE,SPF_PASS,TXREP,T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org List-Id: On Thu, 15 Feb 2024 09:00:03 PST (-0800), enh@google.com wrote: > On Thu, Feb 15, 2024 at 8:50 AM Palmer Dabbelt wrote: >> >> On Thu, 15 Feb 2024 07:48:03 PST (-0800), Evan Green wrote: >> > On Wed, Feb 14, 2024 at 10:16 AM Adhemerval Zanella Netto >> > wrote: >> >> >> >> >> >> >> >> On 14/02/24 11:31, Evan Green wrote: >> >> > >> >> > This series illustrates the use of a recently accepted Linux syscall that >> >> > enumerates architectural information about the RISC-V cores the system >> >> > is running on. In this series we expose a small wrapper function around >> >> > the syscall. An ifunc selector for memcpy queries it to see if unaligned >> >> > access is "fast" on this hardware. If it is, it selects a newly provided >> >> > implementation of memcpy that doesn't work hard at aligning the src and >> >> > destination buffers. >> >> > >> >> > For applications and libraries outside of glibc that want to use >> >> > __riscv_hwprobe() in ifunc selectors, this series also sends a pointer >> >> > to the riscv_hwprobe() function in as the second argument to ifunc >> >> > selectors. A new inline convenience function can help application and >> >> > library callers to check for validity and quickly probe a single key. >> >> >> >> I still think we should address Jessica Clarke remarks for the ifunc ABI [1]. >> >> I recall that Florian has tried to address the ifunc ordering and that >> >> Jessica proposed solutions was not fully sufficient to address all the >> >> ifunc corner cases. >> >> >> >> [1] https://sourceware.org/pipermail/libc-alpha/2024-January/154082.html >> > >> > I haven't invested the time yet in studying the resolver to understand >> > how feasible Jessica's suggestion is. I was sort of hoping Florian >> > would chime in with an "oh yeah let's do that" or "no, it doesn't >> > work". I suppose I still am :) >> >> The discussion's over here: >> https://inbox.sourceware.org/libc-alpha/20231017044641.pw2ccr6exvhtmhkk@google.com/ >> >> I was inclined to just ignore it: Florian explained what's going on with >> the multiple libraries constraint, so we're kind of just going around in >> circles at that point. >> >> I'm also not sure the argument makes a whole lot of sense in the first >> place. The core of the argument seems to be around binary compatibility >> with other kernels/libcs, but there's a ton of reasons why binaries >> aren't compatible between those systems. So if glibc just has a more >> complex IFUNC resolving scheme and that ends up requiring the extra >> agrument, then users of glibc have to go deal with that -- other >> systems/libcs might make different decisions, but that's just how these >> things go. > > yeah, i struggle with the portability premise too. not least because > macOS/iOS (which is obviously the most common "other platform" for me > with my Android hat on) doesn't have ifuncs at all. that's quite a big > blocker to any dream of portability. > > as i've said before, in a survey of all the open source libraries that > go into Android, there are none that don't support macOS/iOS, and so > there are none that actually rely on ifuncs. ifunc usage is limited to > libc (which is why we libc maintainers get bikeshedded by stuff like > this) and compiler-generated FMV stuff. i'd argue that "real people" > (app developers) should probably be looking at the latter anyway, and > it's our job to make that work (which happens once^Wtwice, in llvm and > gcc). > > also, the fact that Android is doing what's proposed here (with the > extra argument) means there'd be _some_ incompatibility even if glibc > and FreeBSD didn't do that. So you're already committed to that ABI? > (Android's only source incompatibility with glibc at the moment is the > lack of the single-probe helper inline, which i fear will encourage > _worse_ code, but suspect will actually be unused in practice anyway > for the same "ifuncs are 'assembler' for libc/toolchain, and > library/app developers doing stuff themselves will continue to use > regular function pointers like they do today" reasons.) > >> Looks like Maskray is proposing making glibc's IFUNC resolving. That's >> a generic glibc decision and I don't really understand this stuff well >> enough to have much of an opinion -- sure maybe the multi-library IFUNC >> resolving is overkill, but aside from doing some similar grep of all the >> sources (or trying some builds and such) I'm not sure how to tell if >> we're safe breaking the ABI there. >> >> That said, we're not comitting to ABI stability until the release. So >> if we decide to make a generic glibc change we can always go drop the >> argument, that should be easy. Maybe we even just throw out a RFC patch >> to do it, unless I'm missing something the code is the easy part here >> (we're essentially just going back to one of the early versions, from >> before we knew about this resolving order complexity). >> >> > Alternatively, patches 1-3 of this series stand on their own. If the >> > ifunc aspect of this is gated on me doing a bunch of research, it >> > might at least make sense to land the first half now, to get Linux >> > users easy access to the __riscv_hwprobe() syscall and vDSO. >> >> I'm OK with that, too. >> >> > >> > -Evan