From patchwork Wed Sep 11 21:04:04 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Isaku Yamahata X-Patchwork-Id: 1161282 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=pass (mailfrom) smtp.mailfrom=sourceware.org (client-ip=209.132.180.131; helo=sourceware.org; envelope-from=libc-alpha-return-105152-incoming=patchwork.ozlabs.org@sourceware.org; receiver=) Authentication-Results: ozlabs.org; dmarc=fail (p=none dis=none) header.from=gmail.com Authentication-Results: ozlabs.org; dkim=pass (1024-bit key; secure) header.d=sourceware.org header.i=@sourceware.org header.b="f0eZuSQc"; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="F3Ywmdqj"; dkim-atps=neutral Received: from sourceware.org (server1.sourceware.org [209.132.180.131]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 46TDw325nYz9sDB for ; Thu, 12 Sep 2019 07:06:11 +1000 (AEST) DomainKey-Signature: a=rsa-sha1; c=nofws; d=sourceware.org; h=list-id :list-unsubscribe:list-subscribe:list-archive:list-post :list-help:sender:from:to:cc:subject:date:message-id:in-reply-to :references:in-reply-to:references; q=dns; s=default; b=us97RVRp JX2vKJLt0L8a/fSCgTx6bu7AA60EUEuv5DlEUJLHdJo+kht/gEt6uR8ev7QzpeUY AxmIVRcIf6oma+VYRfIHgA2x25Xq1TWTNJ/h9KYsC25oWkZe2d2apquz92ohK3Fa MQFw7J8/fQZWTr1Boooui8ANZpOLijXVOMw= DKIM-Signature: v=1; a=rsa-sha1; c=relaxed; d=sourceware.org; h=list-id :list-unsubscribe:list-subscribe:list-archive:list-post :list-help:sender:from:to:cc:subject:date:message-id:in-reply-to :references:in-reply-to:references; s=default; bh=P29L2CFvRd6Xh8 pANcxsgGDHI4c=; b=f0eZuSQc8nA8NiODQf/g8v/cPVtW4IuHYoVzq8MLytdr/K uHs6H/MlpJzRDTexvVBlk5rHYN3L/gnV16bB+haTvpNWPvpWynJ0vtVSw6YjpciN vJFa1+joj2ksWMI/5ZhDkexTUeFSI0quAFO4CPhD6DrXA1eGpmRRAy9fi4vs8= Received: (qmail 95155 invoked by alias); 11 Sep 2019 21:05:17 -0000 Mailing-List: contact libc-alpha-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Unsubscribe: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: libc-alpha-owner@sourceware.org Delivered-To: mailing list libc-alpha@sourceware.org Received: (qmail 95025 invoked by uid 89); 11 Sep 2019 21:05:16 -0000 Authentication-Results: sourceware.org; auth=none X-Spam-SWARE-Status: No, score=-25.6 required=5.0 tests=AWL, BAYES_00, FREEMAIL_FROM, GIT_PATCH_0, GIT_PATCH_1, GIT_PATCH_2, GIT_PATCH_3, RCVD_IN_DNSWL_NONE, SPF_PASS autolearn=ham version=3.3.1 spammy= X-HELO: mail-pl1-f194.google.com DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:from:to:cc:subject:date:message-id:in-reply-to:references :in-reply-to:references; bh=Cz+BB6Ru1KR7uXNQtlYe0CiVADtlBqmsgPe/iu4m3Oc=; b=F3Ywmdqj0NQ9Ua9iKli8fEav4aN+P9xp3iy5Ysy7yijgUpUxZ9mKoOg4MBZnjLOS0V 29bfhN2jTqlJy5gg8Wfpk6P5Q502q14YRjqk7XWFc9QxbZ4hejEntsD/bUSlOKDaYmkR zyw8eW6bWFalxOZ6cNWwCn+SwOH7hsz3JIWAlfHvspbAkqeqLsEyW9aVNFb3fJrnm4j7 CxNBY0jFoYPKUUr/fyZHyyXrVViyFFf5ZC22kRIDX02wdrKPwPM6WSyoL0dputmNtsTQ 1KH2Et/FEBcrMJ+GGhxxmGDUXib5oEGDN/z9ULEu25tgGf4QSjb4cdSDbXV+5WX+2bAV gdAw== From: Isaku Yamahata To: libc-alpha@sourceware.org Cc: isaku.yamahata@intel.com, Isaku Yamahata Subject: [RFC PATCH 06/11] elf/rtld: introduce runtime option to disable HP_TIMING_INLINE Date: Wed, 11 Sep 2019 14:04:04 -0700 Message-Id: In-Reply-To: References: In-Reply-To: References: This patch introduce runtime option, __hp_timing_disabled with weak symbol to disable rtld profiling with HP_TIMING_INLINE. Because some LibOS doesn't suport rdtsc/rdtscp (e.g. SGX enclave), this allows LibOS to disable HP_TIMING profiling on startup. The impact on traditional runtime is "if (__hp_timing_disabled)". Signed-off-by: Isaku Yamahata --- elf/Versions | 1 + elf/rtld.c | 20 +++++++++++++++++++- 2 files changed, 20 insertions(+), 1 deletion(-) diff --git a/elf/Versions b/elf/Versions index 619676afef..d7d12d7aba 100644 --- a/elf/Versions +++ b/elf/Versions @@ -83,5 +83,6 @@ ld { __libos_release; __libos_version; __libos_abi; # stub symbols for libos support __libos_map_library; + __hp_timing_disabled; } } diff --git a/elf/rtld.c b/elf/rtld.c index c9490ff694..8d759dfa8c 100644 --- a/elf/rtld.c +++ b/elf/rtld.c @@ -46,6 +46,8 @@ #include +#include "libos.h" + /* Only enables rtld profiling for architectures which provides non generic hp-timing support. The generic support requires either syscall (clock_gettime), which will incur in extra overhead on loading time. @@ -58,9 +60,18 @@ # define RTLD_TIMING_SET(var, value) (var) = (value) # define RTLD_TIMING_REF(var) &(var) +bool __hp_timing_disabled __attribute__((weak))= false; +# define HP_TIMING_DISABLED __hp_timing_disabled +LIBOS_NOTES("variables", LIBOS_NOTE_VARIABLE, + __hp_timing_disabled, 1, "__hp_timing_disabled"); + static inline void rtld_timer_start (hp_timing_t *var) { + if (HP_TIMING_DISABLED) { + memset(var, 0, sizeof(*var)); + return; + } HP_TIMING_NOW (*var); } @@ -68,6 +79,8 @@ static inline void rtld_timer_stop (hp_timing_t *var, hp_timing_t start) { hp_timing_t stop; + if (HP_TIMING_DISABLED) + return; HP_TIMING_NOW (stop); HP_TIMING_DIFF (*var, start, stop); } @@ -76,6 +89,8 @@ static inline void rtld_timer_accum (hp_timing_t *sum, hp_timing_t start) { hp_timing_t stop; + if (HP_TIMING_DISABLED) + return; rtld_timer_stop (&stop, start); HP_TIMING_ACCUM_NT(*sum, stop); } @@ -87,6 +102,7 @@ rtld_timer_accum (hp_timing_t *sum, hp_timing_t start) # define rtld_timer_start(var) # define rtld_timer_stop(var, start) # define rtld_timer_accum(sum, start) +# define HP_TIMING_DISABLED false #endif /* Avoid PLT use for our local calls at startup. */ @@ -2748,6 +2764,8 @@ static void print_statistics_item (const char *title, hp_timing_t time, hp_timing_t total) { + if (HP_TIMING_DISABLED) + return; char cycles[HP_TIMING_PRINT_SIZE]; HP_TIMING_PRINT (cycles, sizeof (cycles), time); @@ -2779,7 +2797,7 @@ __attribute ((noinline)) print_statistics (const hp_timing_t *rtld_total_timep) { #if HP_TIMING_INLINE - { + if (!HP_TIMING_DISABLED) { char cycles[HP_TIMING_PRINT_SIZE]; HP_TIMING_PRINT (cycles, sizeof (cycles), *rtld_total_timep); _dl_debug_printf ("\nruntime linker statistics:\n"