Received: by 2002:a25:ad19:0:0:0:0:0 with SMTP id y25csp2958240ybi; Thu, 18 Jul 2019 18:06:54 -0700 (PDT) X-Google-Smtp-Source: APXvYqxd0QJ7L9N89N/VMxGmSfh1EKSN7Uzr0Zu1hxPcO4z0VSOEazdLDtHc0zN5Dc/6juOmCSbp X-Received: by 2002:a63:5402:: with SMTP id i2mr23879372pgb.414.1563498414631; Thu, 18 Jul 2019 18:06:54 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1563498414; cv=none; d=google.com; s=arc-20160816; b=tsHuBgLacvi+FjueWorv4ZKcCI6iSUNdv4KAGWVJLHvYCMwT19nTCgP+HGbaOe645o h/2P7sVPPeFGX1csENh/uGBWRVn2MF1kWs8hkRy8cI896eQVuG4NkVbLjTEEkXLFhvZ4 Tfr6YyMccwHy0qY6SzjuouqwSIz+pnrUFj70ndHHMYXxM8Jfan/rV1GNcGUtYWtoMgAN wd7VU6r5hNGc5sCJ4uiR+LF1RUD4JOf/pF4Sa377GIeb3e+7oRLRXhtMcTx0DKoPr/3a xbsit8CuJpU2mMh1iTNS0cE0sZRSTOPA2X4+LRh/CnO6XqBcYqdCvQ50CLoDllb0bIgS HvjA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:message-id:date:subject:cc:to:from; bh=d3rODNYxuy5WSNSg2yOMOvh6Io0aB+kYlsQ525KJnc0=; b=EwZJlgjwxCoHbz7558R+kFk5Yt/rjJ2Qsf6x5/W2G+0g+rnaPxa9W8FuDVgi4vgLtt 8A7IY2ZIEmrVgP8zosyqhp0fpjXJLgBEg+MPqP+LI/BhbmVPUMIuzLTgswLhhPJR013W wtgIGe16y2+0AloDJ37sZqnIx9TtV/oSDrypqkWSjLoYz7Qj4UpS4VTeXBCMn1ZweYyx jPs45UbQYn33wnwdHc66ebtZlh8+cc4QPlKNI1vByMsvvmYjvWf6CSm6KRLc+pmsZ5Vv CKoQqqmtFlcpNCd46zzWe7S9ChF1XgkSnJbOZE7yY/V5EtZ9Df9p3px9QSrf+5mxXkOO dV5Q== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=QUARANTINE sp=NONE dis=NONE) header.from=vmware.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id h16si406006pjt.12.2019.07.18.18.06.39; Thu, 18 Jul 2019 18:06:54 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=QUARANTINE sp=NONE dis=NONE) header.from=vmware.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726135AbfGSBDu (ORCPT + 99 others); Thu, 18 Jul 2019 21:03:50 -0400 Received: from mail-pl1-f193.google.com ([209.85.214.193]:38416 "EHLO mail-pl1-f193.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1725992AbfGSBDu (ORCPT ); Thu, 18 Jul 2019 21:03:50 -0400 Received: by mail-pl1-f193.google.com with SMTP id az7so14735218plb.5 for ; Thu, 18 Jul 2019 18:03:50 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id; bh=d3rODNYxuy5WSNSg2yOMOvh6Io0aB+kYlsQ525KJnc0=; b=VniQ51CkLGNon56YgITDV/olp4AWOFIA6rzhpqBDYGzue81zg1RfpFXwtVN9A8bnsN axZ1YX+54woQfvdxS4kqHJZdo/UEEtgdXbrq7s5ct7W7aDvTBmTf1ko+L5ShlB/SLLkq f67vqQWc2kQcbQX1Y/mQgCjuIr5K8q2MWIA6eN6W46fYRO56JBmxCE91dI4qGyslPCtu cSZ+fQAtu5jV4Mc7zZAbiLseZc5CeyDdhGW1klz67TI1ZqH5iI/HXyHL+pgPikwzYDKM 0xZ+gjhX/XFishj9flq3E7OZKgtC669YLj54pIA/XqZ1zjDffQrkqr4oLSem6JxYYnJx P6fA== X-Gm-Message-State: APjAAAXznEitaKSbmKIkMEbl0DWZm6GLo/ypog2st82AtD/AOx2IIgg4 7/C6+90Hz3F7gd3KDeERJ5Bv1bovJcc= X-Received: by 2002:a17:902:2f84:: with SMTP id t4mr48549709plb.57.1563498229683; Thu, 18 Jul 2019 18:03:49 -0700 (PDT) Received: from sc2-haas01-esx0118.eng.vmware.com ([66.170.99.1]) by smtp.gmail.com with ESMTPSA id q144sm28887612pfc.103.2019.07.18.18.03.48 (version=TLS1_3 cipher=AEAD-AES256-GCM-SHA384 bits=256/256); Thu, 18 Jul 2019 18:03:49 -0700 (PDT) From: Nadav Amit To: Peter Zijlstra Cc: Andy Lutomirski , x86@kernel.org, linux-kernel@vger.kernel.org, Dave Hansen , Thomas Gleixner , Ingo Molnar , Nadav Amit Subject: [RFC 0/7] x86/percpu: Use segment qualifiers Date: Thu, 18 Jul 2019 10:41:03 -0700 Message-Id: <20190718174110.4635-1-namit@vmware.com> X-Mailer: git-send-email 2.17.1 Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org GCC 6+ supports segment qualifiers. Using them allows to implement several optimizations: 1. Avoid unnecessary instructions when an operation is carried on read/written per-cpu value, and instead allow the compiler to set instructions that access per-cpu value directly. 2. Make this_cpu_ptr() more efficient and allow its value to be cached, since preemption must be disabled when this_cpu_ptr() is used. 3. Provide better alternative for this_cpu_read_stable() that caches values more efficiently using alias attribute to const variable. 4. Allow the compiler to perform other optimizations (e.g. CSE). 5. Use rip-relative addressing in per_cpu_read_stable(), which make it PIE-ready. "size" and Peter's compare do not seem to show the impact on code size reduction correctly. Summing the code size according to nm on defconfig shows a minor reduction from 11349763 to 11339840 (0.09%). Nadav Amit (7): compiler: Report x86 segment support x86/percpu: Use compiler segment prefix qualifier x86/percpu: Use C for percpu accesses when possible x86: Fix possible caching of current_task percpu: Assume preemption is disabled on per_cpu_ptr() x86/percpu: Optimized arch_raw_cpu_ptr() x86/current: Aggressive caching of current arch/x86/include/asm/current.h | 30 +++ arch/x86/include/asm/fpu/internal.h | 7 +- arch/x86/include/asm/percpu.h | 293 +++++++++++++++++++------ arch/x86/include/asm/preempt.h | 3 +- arch/x86/include/asm/resctrl_sched.h | 14 +- arch/x86/kernel/cpu/Makefile | 1 + arch/x86/kernel/cpu/common.c | 7 +- arch/x86/kernel/cpu/current.c | 16 ++ arch/x86/kernel/cpu/resctrl/rdtgroup.c | 4 +- arch/x86/kernel/process_32.c | 4 +- arch/x86/kernel/process_64.c | 4 +- include/asm-generic/percpu.h | 12 + include/linux/compiler-gcc.h | 4 + include/linux/compiler.h | 2 +- include/linux/percpu-defs.h | 33 ++- 15 files changed, 346 insertions(+), 88 deletions(-) create mode 100644 arch/x86/kernel/cpu/current.c -- 2.17.1