Received: by 2002:a05:6a10:206:0:0:0:0 with SMTP id 6csp713432pxj; Fri, 14 May 2021 13:55:52 -0700 (PDT) X-Google-Smtp-Source: ABdhPJws1JMuAC7riIY7JqcPghKSyVNJkRvL5F9Ve41lF8Qyc3mGuxaAcU110QixYHbtd5+QYgSN X-Received: by 2002:a05:6e02:13e1:: with SMTP id w1mr45257866ilj.181.1621025752774; Fri, 14 May 2021 13:55:52 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1621025752; cv=none; d=google.com; s=arc-20160816; b=Ren9XYr1t6KeCT7v9IWdhX9iOSzQuriyRyr2N5Hbo8XLdlf2b2JKqjxZ9BGOv+IHxg o/GeWOJg9TC8FN/AKkF6MaGg4/71KIkw8Eepx2OkIF5I1t/5dxITwTZxSXp1whayeqy5 VJmpcTjIhq1Wxi/Y/gvNLwhHy1MgpzJrbOHaeVCtDOYyJK0sHlbkAOL2ovUk80P19BnI UQynLViccoCoAsoInE6rFIgYFrz7xkdyHiLfrv5cxIa7JohbKCs+iZWlHeNqxaJRbcsA gwGujjheoSO9FU75E43CA+AO0S01hG2ngdWp/gPC7PTt3jeXCGNoe0/EVX/nnWz1c4rp LIQQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :message-id:date:subject:cc:to:from:dkim-signature; bh=kGPUAlw4/NntaQGdwm7VBM5DLZuAhk2I6Wah2FPTVwM=; b=x15a/5TV3kCU5eqACq3f3ujdwCGnrGFXRJQ2K3fvVOjIc2/TYSpaXxphOqMEJOxQAz sldKxuDL8ZZkJvlOvSBGPn5UHNPwd7f+l81CuN8wXxbyO5tnhcr4CMmbJhdgL41pIDFf Rc3RmN70V/pRO745+9x1PW6tr52pnWkSZd50Q6YlyWHQdVq3HYYeuth6K+4s1eBhxMzY ySxOLeBcKYJxOCAYENA6VCKr4EhovVRjN7/o9zDvL8W8+lyTRlJExSoeTnwWpgi9EBdZ oFYnEwyqm3tPrJ+L7sbL/84rNwX59YvGMhsut1f4RTvfsLuL6cWAQo6G5syA75q/vPJy iCwA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@redhat.com header.s=mimecast20190719 header.b=D6ltIMfk; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=redhat.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id o14si7097767jap.110.2021.05.14.13.55.39; Fri, 14 May 2021 13:55:52 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; dkim=pass header.i=@redhat.com header.s=mimecast20190719 header.b=D6ltIMfk; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=redhat.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231860AbhENUww (ORCPT + 99 others); Fri, 14 May 2021 16:52:52 -0400 Received: from us-smtp-delivery-124.mimecast.com ([170.10.133.124]:50757 "EHLO us-smtp-delivery-124.mimecast.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231865AbhENUwu (ORCPT ); Fri, 14 May 2021 16:52:50 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1621025498; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding; bh=kGPUAlw4/NntaQGdwm7VBM5DLZuAhk2I6Wah2FPTVwM=; b=D6ltIMfkmpLS86f4TfQXin0Atb3DHT7JlEKfk/A3NsmEoqvyhqb8ESL2LwU5BrwVrE99XD uqJzgL4clfu+12SaEfiCln+ijusMYni05gB/4gmlJdGhEaPDHg9prjaAw8sknCWAQNZ8Gq PLWzSHKyI01+52MyHu0mBKxv/R+M49g= Received: from mimecast-mx01.redhat.com (mimecast-mx01.redhat.com [209.132.183.4]) (Using TLS) by relay.mimecast.com with ESMTP id us-mta-182-Yf_vVNr-PWqvE5345fg2PA-1; Fri, 14 May 2021 16:51:36 -0400 X-MC-Unique: Yf_vVNr-PWqvE5345fg2PA-1 Received: from smtp.corp.redhat.com (int-mx08.intmail.prod.int.phx2.redhat.com [10.5.11.23]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx01.redhat.com (Postfix) with ESMTPS id 9AF3CFC9A; Fri, 14 May 2021 20:51:35 +0000 (UTC) Received: from x1.bristot.me.homenet.telecomitalia.it (ovpn-113-210.rdu2.redhat.com [10.10.113.210]) by smtp.corp.redhat.com (Postfix) with ESMTP id 61B0E1971B; Fri, 14 May 2021 20:51:25 +0000 (UTC) From: Daniel Bristot de Oliveira To: linux-kernel@vger.kernel.org Cc: Phil Auld , Sebastian Andrzej Siewior , Kate Carcia , Daniel Bristot de Oliveira , Jonathan Corbet , Steven Rostedt , Ingo Molnar , Peter Zijlstra , Thomas Gleixner , Alexandre Chartre , Clark Willaims , John Kacur , Juri Lelli , linux-doc@vger.kernel.org Subject: [PATCH V3 0/9] hwlat improvements and osnoise/timerlat tracers Date: Fri, 14 May 2021 22:51:09 +0200 Message-Id: MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Scanned-By: MIMEDefang 2.84 on 10.5.11.23 Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org This series proposes a set of improvements and new features for the tracing subsystem to facilitate the debugging of low latency deployments. Currently, hwlat runs on a single CPU at a time, migrating across a set of CPUs in a round-robin fashion. This series improves hwlat to allow hwlat to run on multiple CPUs in parallel, increasing the chances of detecting a hardware latency, at the cost of using more CPU time. It also proposes a new tracer named osnoise, that aims to help users of isolcpus= (or a similar method) to measure how much noise the OS and the hardware add to the isolated application. The osnoise tracer bases on the hwlat detector code. The difference is that, instead of sampling with interrupts disabled, the osnoise tracer samples the CPU with interrupts and preemption enabled. In this way, the sampling thread will suffer any source of noise from the OS. The detection and classification of the type of noise are then made by observing the entry points of NMIs, IRQs, SoftIRQs, and threads. If none of these sources of noise is detected, the tool associates the noise with the hardware. The tool periodically prints a status, printing the total noise of the period, the max single noise observed, the percentage of CPU available for the task, along with the counters of each source of the noise. To debug the sources of noise, the tracer also adds a set of tracepoints that print any NMI, IRQ, SofIRQ, and thread occurrence. These tracepoints print the starting time and the noise's net duration at the end of the noise. In this way, it reduces the number of tracepoints (one instead of two) and the need to manually accounting the contribution of each noise independently. Finaly, the timerlat tracer aims to help the preemptive kernel developers to find sources of wakeup latencies of real-time threads. The tracer creates a per-cpu kernel thread with real-time priority. The tracer thread sets a periodic timer to wakeup itself, and goes to sleep waiting for the timer to fire. At the wakeup, the thread then computes a wakeup latency value as the difference between the current time and the absolute time that the timer was set to expire. The tracer prints two lines at every activation. The first is the timer latency observed at the hardirq context before the activation of the thread. The second is the timer latency observed by the thread, which is the same level that cyclictest reports. The ACTIVATION ID field serves to relate the irq execution to its respective thread execution. The tracer is build on top of osnoise tracer, and the osnoise: events can be used to trace the source of interference from NMI, IRQs and other threads. It also enables the capture of the stacktrace at the IRQ context, which helps to identify the code path that can cause thread delay. Changes from v2: - osnoise sample reports in nanoseconds (as all other osnoise tracepoints) (Bristot) - Remove divisions from osnoise main loop (Bristot) - Make the tracers work well when starting via kernel-cmdline (Red Hat's performance team need) - Rename main/interrupt functions (Bristot) - Fix timerlat reset (Juri Lelli) - Fix timerlat start (Juri Lelli) Changes from v1: - Remove `` from RST (Corbet) - Add RST files to the index (Corbet) - Fix text and typos (Rostedt) - Remove the cpus from hwlat (Rostedt) - Remove the disable_migrate/fallback to mode none on hwlat (Rostedt) - Add a generic way to read/write u64 and use it on hwlat/osnoise/timerlat (Rostedt) - Make osnoise/timerlat to work properly with trace-cmd/tracer instances (Rostedt) - osnoise using the tracing_threshold (Rostedt) - Rearrange tracepoint structure to avoid "holes" (Rostedt) Daniel Bristot de Oliveira (8): tracing/hwlat: Fix Clark's email tracing/hwlat: Implement the mode config option tracing/hwlat: Switch disable_migrate to mode none tracing/hwlat: Implement the per-cpu mode tracing/trace: Add a generic function to read/write u64 values from tracefs trace/hwlat: Use the generic function to read/write width and window tracing: Add osnoise tracer tracing: Add timerlat tracer Steven Rostedt (1): tracing: Add __print_ns_to_secs() and __print_ns_without_secs() helpers Documentation/trace/hwlat_detector.rst | 13 +- Documentation/trace/index.rst | 2 + Documentation/trace/osnoise-tracer.rst | 152 ++ Documentation/trace/timerlat-tracer.rst | 158 ++ include/linux/ftrace_irq.h | 13 + include/trace/events/osnoise.h | 142 ++ include/trace/trace_events.h | 25 + kernel/trace/Kconfig | 62 + kernel/trace/Makefile | 1 + kernel/trace/trace.c | 87 + kernel/trace/trace.h | 30 +- kernel/trace/trace_entries.h | 41 + kernel/trace/trace_hwlat.c | 410 +++-- kernel/trace/trace_osnoise.c | 2126 +++++++++++++++++++++++ kernel/trace/trace_output.c | 119 +- 15 files changed, 3234 insertions(+), 147 deletions(-) create mode 100644 Documentation/trace/osnoise-tracer.rst create mode 100644 Documentation/trace/timerlat-tracer.rst create mode 100644 include/trace/events/osnoise.h create mode 100644 kernel/trace/trace_osnoise.c -- 2.26.3