[lkml]   [2021]   [May]   [2]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
Messages in this thread
    SubjectRe: Candidate Linux ABI for Intel AMX and hypothetical new related features
    On Fri, Apr 23, 2021 at 3:58 PM Borislav Petkov <> wrote:
    > On Fri, Apr 23, 2021 at 03:35:30PM -0400, Len Brown wrote:
    > > Yes. If a library decides to execute AMX instructions on behalf
    > > of a task, the kernel will allocate an 8KB context switch buffer
    > > on behalf of that task.
    > Again, the library should ask the kernel first whether it supports AMX.
    > And the process should decide whether to use AMX - not the library on
    > its own, on behalf of the process.
    > > Granted, if you find a reason to dislike AMX, the mechanisms to disable
    > > it today are on a system-wide basis, not on a process or task basis.
    > Again, I don't dislike the feature. I don't want libraries jumping on
    > new features without asking the process or the kernel first especially
    > when those features have performance implications and need kernel
    > support.

    Here is how it works:

    1. The kernel boots and sees the feature in CPUID.

    2. If the kernel supports that feature, it sets XCR0[feature].

    For some features, there may be a bunch of kernel support,
    while simple features may require only state save/restore.

    2a. If the kernel doesn't support the feature, XCR0[feature] remains cleared.

    3. user-space sees the feature in CPUID

    4. user-space sees for the feature via xgetbv[XCR0]

    5. If the feature is enabled in XCR0, the user happily uses it.

    For AMX, Linux implements "transparent first use"
    so that it doesn't have to allocate 8KB context switch
    buffers for tasks that don't actually use AMX.
    It does this by arming XFD for all tasks, and taking a #NM
    to allocate a context switch buffer only for those tasks
    that actually execute AMX instructions.

    5a. If the feature is not enabled in XCR0, and the tasks uses
    those instructions anway, the hardware delivers a #UD
    and the kernel kills the process with a signal.

    So you already have what you want, WRT user-space being
    required to ask the kernel if the feature is supported.
    When the kernel sets XCR0[feature], it tells user-space
    that the kernel supports the feature; and there is no
    way that user space can use the feature if the kernel
    did not set that bit.

    System calls before (and after) using a feature are not necessary,
    and would only degrade performance over the existing ABI.

    Regarding performance implications...
    The system administrator is empowered to enable or disable
    a feature in BIOS (clears CPUID bit) or in the kernel
    (clears XCR0 bit) if they don't like it.
    Yes, this is a per-system decision, rather than a per-process
    or a per-thread decision.

    So the only thing you don't have that you asked for is a
    way for the main process to control what instructions are
    used by the libraries that it links with. That one is above
    my pay grade. Does the application have a *choice*
    of which libraries they link with?

    Len Brown, Intel Open Source Technology Center

     \ /
      Last update: 2021-05-02 17:28    [W:24.813 / U:0.004 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site