From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mx0a-00069f02.pphosted.com (mx0a-00069f02.pphosted.com [205.220.165.32]) by sourceware.org (Postfix) with ESMTPS id AE8083858405 for ; Mon, 15 Nov 2021 18:14:07 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org AE8083858405 Received: from pps.filterd (m0246627.ppops.net [127.0.0.1]) by mx0b-00069f02.pphosted.com (8.16.1.2/8.16.1.2) with SMTP id 1AFH3Idj005215 for ; Mon, 15 Nov 2021 18:14:06 GMT Received: from userp3030.oracle.com (userp3030.oracle.com [156.151.31.80]) by mx0b-00069f02.pphosted.com with ESMTP id 3cbfjxmfv2-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK) for ; Mon, 15 Nov 2021 18:14:02 +0000 Received: from pps.filterd (userp3030.oracle.com [127.0.0.1]) by userp3030.oracle.com (8.16.1.2/8.16.1.2) with SMTP id 1AFHwAUJ033819 for ; Mon, 15 Nov 2021 18:13:59 GMT Received: from nam12-dm6-obe.outbound.protection.outlook.com (mail-dm6nam12lp2172.outbound.protection.outlook.com [104.47.59.172]) by userp3030.oracle.com with ESMTP id 3ca2fuyc1f-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK) for ; Mon, 15 Nov 2021 18:13:58 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=RB1uu0hHsdIp+xD8NBZxlMb0vsufi+S/fZVe0vUTlyIXUzsaadbrYqfZEHxwMeHN4ck3khBEImx2Wjk0m/ZW8TKVRSHWPu7WRvDi1FKWIpCDFE0b6P70FydwOdxOQV+R+vF3NS4bIeadZw573lT7YsVofle6/cBv7RBLf9YjGY7I/GGHybN3dgHPznH/ebxZT2ox4x7RO57S+Ly9VgzhIe69+63kgQohdL60BsqXpH4Hv37DL34+5F9iHlMPlyMJ7j6hlxyOMchIqPvTJHtqk0ZAYjXQN+FEPfC6WsNyIfg4CkxD1PYimq1h6SoLJAMCoaXnj0X3NoBSHFWqONVyYQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=S9BfqZPgMZojGg3hP7ikHSU9nyiUQxbvOx7TJr31DeM=; b=gL8vISfniaFAzfBHxjQ4PSifNpqM91iwhbkjXH6CdUdouUby5W0S9wuFozZti8YcAcRx3fa9TydSTVIR17EiwsG8lvoUkAwzSaEcRobVl86j+IJTqYn7Usp5HiAQ3Dh/06RCK47AOrk8gb8CVeHWW31kUbSGjE7tbNhH5KweuNjCBDsoASjxVcrzFXq8HqQvU0rML8RH1GWabZtxa8O/KeZomRt7t8B/HCwZvD5OK6uWCw5WyXjCY9GjFwILp/kY+IguoCuHesbfjvT8irqbHREooJQnCFfvhfzE3AHpIEiTumkNP01Kobh5RZJnMmhnVzBAC/Ru3OEE5i2bnnaG7A== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=oracle.com; dmarc=pass action=none header.from=oracle.com; dkim=pass header.d=oracle.com; arc=none Received: from SA2PR10MB4636.namprd10.prod.outlook.com (2603:10b6:806:11e::10) by SA1PR10MB5759.namprd10.prod.outlook.com (2603:10b6:806:23e::21) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4690.26; Mon, 15 Nov 2021 18:13:56 +0000 Received: from SA2PR10MB4636.namprd10.prod.outlook.com ([fe80::3ca6:97ce:728b:92cd]) by SA2PR10MB4636.namprd10.prod.outlook.com ([fe80::3ca6:97ce:728b:92cd%9]) with mapi id 15.20.4690.027; Mon, 15 Nov 2021 18:13:56 +0000 Subject: Ping: [PATCH V4] gprofng: a new GNU profiler References: <7dadb881-ab4b-de4a-0453-6d8661a8cd83@oracle.com> From: Vladimir Mezentsev To: binutils@sourceware.org X-Forwarded-Message-Id: <7dadb881-ab4b-de4a-0453-6d8661a8cd83@oracle.com> Message-ID: <66b88418-d278-9c4f-e606-7c41d8673425@oracle.com> Date: Mon, 15 Nov 2021 10:13:51 -0800 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101 Thunderbird/78.14.0 In-Reply-To: <7dadb881-ab4b-de4a-0453-6d8661a8cd83@oracle.com> Content-Language: en-US X-ClientProxiedBy: SN7PR04CA0218.namprd04.prod.outlook.com (2603:10b6:806:127::13) To SA2PR10MB4636.namprd10.prod.outlook.com (2603:10b6:806:11e::10) MIME-Version: 1.0 Received: from [IPv6:2606:b400:400:7446:8000::70b] (2606:b400:8301:1010::16aa) by SN7PR04CA0218.namprd04.prod.outlook.com (2603:10b6:806:127::13) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4690.26 via Frontend Transport; Mon, 15 Nov 2021 18:13:56 +0000 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 3f110b20-59ca-49fc-18db-08d9a863b05c X-MS-TrafficTypeDiagnostic: SA1PR10MB5759: X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:10000; X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: Fe6axUx/Bq/NMLiEFH9PtA9sU2lfmjIOSMJr9VZqwShr4hHDGxGQm5KyU1Fwji7PWZJ8qRkET1BDZWy5+PZ9TMZ9/DL6pNLnUvKXHNikmXUGi3KpISBUarygHtzHX6pImRfG5xz/XvGH4ilw84Fu0+2poCTajapf6i5xSiOlPGHKQth9EB2vunIJkCRpl6mmdABo7qw+W6V/WF+uRF8BFcQiKPAIjp4J2whXdJqKXYF3+9sfBE/c7mArzy1y3GQSsnqe3GPr0+NA2wtJCIbTAp5b91aEDKt2IfwwezVCoWAZIA6N5s4fySDkLR2iqc2A1grmVUwbKntZ3P8Kibgb4KJeXAExm7a481I2+iavXa1Y38Oi7TGeCZuiW9TSTjqeX6HHFa3dWbelsFcHcTcr4PrHqSMAVE9vgj3DsIKykyvTW8VxNvC5o1f//H/6O7jAa2KYeOOmvQ+7xipOp2FvN0eCjLaRTdMpZbjwkYg6RxB+IDWYFqhWPoHj1i4UgmrDfwUKEGtADGIbhdkOQIXNLWC34DKLD5QIZBBaha1yB4CcFsJlf1YzdGbmilun5cUSBloe2MQWGsoCrJcT4xgdUj5gfrgFVIvvCN/74Y+wnoAOCOrv6sb/d+i3I0KHMXxCNEnSC56pMwUYWoAD2ARV04IZAoxNuhQy9965VzcTfanYjYmqSanfqWxIo0Uq9lLfegBsBntNGennxODFbKXWa7Fmdhl4gXpqkUBoKi2mVjGY4HRpudgqeowWqcIM9leU6jKS4dIbas2+IkD0aLHSaOaCcXTw3JHrFWOAyr2sHVRBVfdoZVNvd2g9RnVSruxa X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:SA2PR10MB4636.namprd10.prod.outlook.com; PTR:; CAT:NONE; SFS:(366004)(30864003)(6666004)(8676002)(316002)(86362001)(83380400001)(38100700002)(8936002)(186003)(6916009)(33964004)(508600001)(66946007)(31696002)(6486002)(31686004)(5660300002)(2906002)(66556008)(44832011)(66476007)(2616005)(36756003)(166002)(966005)(45980500001)(43740500002); DIR:OUT; SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?NHo1WXNOL0VyaUMzNktBV3VWOXA0QlBWVzFJQk1rWTVpcjVHQjV5cDBBQ2Rj?= =?utf-8?B?MjhzSWp0L1dQQTRHOXZrOTkvZTI0U2hkcStxbStaNnUwaUpIV0pETkhmWHgr?= =?utf-8?B?SnNjbWhMa043cG9SQ2YwS3l2Q1NLY2VjK3FxNEV2V2RsL1c1NXJJY2hGcVRv?= =?utf-8?B?K2ltRTEvb0diNG1DSllQSnU3eFVRZVpmN3JCSVdOckEyd0hhVHgyZ1hJamNk?= =?utf-8?B?RzBEYjU5QnVmSHh2aGZSWHB3UUNGNXI4NlYxdytSb2dubng4M3B3L2NUOXYz?= =?utf-8?B?TWFwOFJqOVl5aEtsem1pVlBLVTVWc1NUSmFMTWl0Zks1YkdWNnBlYlZESitx?= =?utf-8?B?REVJWEdBVCt2WjBuUkEvT2pNM0F6Ymdmb24vUkxqOEpGeVV3SGFTRVFZQWM5?= =?utf-8?B?cEhoNVZBT2crUVBubnNCOGRndmpjNWtON3puZGVuUS9mdzZJUXRWL3FKWXFG?= =?utf-8?B?R2ZRc3I3Tmh5UCtzVjVPVEluQy9PYVFQQ2pqZHl5cjNMNmtvQTRqdUh0SHN2?= =?utf-8?B?dE5LMDlPRk9JSXp1S0owR3dMckxCa0JXeG5xZXJsMk45cUZwRm81TjhhTjhT?= =?utf-8?B?Nkc4OXFQMG5FdDYzK2YvUHJabXhpZ3JsOVhCL3lWMW95QzQyVE43eDN4L1lC?= =?utf-8?B?MEhFREQzNzh5VEN3MS91R0NYWmRVK3JJem5ORUV1aDZRR1hLOS9FWFhDeE12?= =?utf-8?B?MFNvUzlybW9SemJNbUVJSHoxNjQ2M1p1b244MHBScnBzVHlUcHhVcjBIN1Jl?= =?utf-8?B?SzVXVEFEMmlqLzQ4RkxnVHpYcm93SzJ2ZVI5cXhWV0UyUFdnRDVSOFp4aE5R?= =?utf-8?B?MitydTJRNWgrR1kvSUFyZGZQU2RXTnBuZzRHNkNEOXZxQnl6RzQ4akwzMlgr?= =?utf-8?B?VW1YNG01TzBna3F4S2VkckZpUEFDdjdRaFpjZE1MUnR0Qy9maXhmeEVkbURw?= =?utf-8?B?Ky95Mk44eGVKalhlMWhaYytlOERib1ZEZWQ1WXhkc0tLSnYyeWEwSzN1UDNB?= =?utf-8?B?dW5ZRnllZDRGb3kwd3V6b3p2dmxzQWoxUHpEMk1WaVFyeE84SDlsSHZGWjdL?= =?utf-8?B?bmZ4a0RsWE1HQ2F4NEc5NW4zV093L1BlL0xTeVFQci9jZ2hsN0tKNGNrWlVC?= =?utf-8?B?dkJCK2NkbTNSZXpMMFZCUnpYaUx2MURnSEZja0dkZ0FOSWtMNXdYNmVJQTM1?= =?utf-8?B?OGJVMkVTdFJQMEEwMXlzaVo5OVJWL2l0WEdiYkd3aXRwQktJRnI2YXNPNVVT?= =?utf-8?B?QlRKdVNzdCtQZDI4dDUxTTZmRFJWVzN3Q1NaRU9VQlhDdThlU2ZoMTQ2Ujg3?= =?utf-8?B?cDB3MC9VN0s3T01xYS9vWDU5cVJmbVl6OElFWXZPQVBJNnFJazJ5WUZPRnRw?= =?utf-8?B?UjRodzRpWURjVDVaNTRuYUpzY21GSzRWbk1SbWRuOUhpeW9abGRaNWhYQ1li?= =?utf-8?B?bWxGYk9xSjdOTEFrQ29SMlpXYXR0eHRpYkN6MVVPKzZTbGR1dXpuTE0vTGNr?= =?utf-8?B?NXRhR0tWZFJoZW4wc3JqZWZMNFZWdmNCVWJSYXltRW55V1U4RENQTnBFc05w?= =?utf-8?B?VmxnZVdlYXBhZUhTN3FyZnRRMDhtQTQrZWUrbjBkcjBWbUROM2JRSnl2LzFU?= =?utf-8?B?aCtrSE5wVUt1MjhQVVg2TnNaRTNyYU4zMjlISzhjZmVNbkduMDI1VUNaeng5?= =?utf-8?B?eGdsbWU1WjdvV2lyWnpaNmZiYlJxdTdFWUxLNktuNVExTzJpcE5ib1FCL1Nr?= =?utf-8?B?VjJqS3Y4N0wrU3NwT2tFMW02bmVUcERDdm42Z2FPYUpTOHBJWVIwS01VUTl4?= =?utf-8?B?Z2xnZkdWeTJTYnlUSU9jU09aTVBhc0tuSCtnMTUrMnlzaE4zdjQ5bjNYTEpw?= =?utf-8?B?WjhQTVI5L3cwL2h3bEk0UGxrbEpRWjdXVkxiaSs0d1UvUXMxeUhKRFJXeGJU?= =?utf-8?B?T1YrdENZVStsTzhDSHozS1J4N3g0VDI1QTNtQk0yc0ZtaDVHUDAxZTVDd2VI?= =?utf-8?B?UzNzTWJrNVp1K210YVc1S2ZacmNwZ0F1Q1E3RFkwdjRwVURBb25Na3VRVyto?= =?utf-8?B?T3kxaStheWVGWCtPWXJMWXdtV0VEQVpwaGp1SGswNkhWYzNFdExia3hRc00v?= =?utf-8?B?Uk5zZWoyOE16VWNVSnBnREhXQysrUFRHMndSSUs2UUFCZDRpS1dsSHVMdkdT?= =?utf-8?B?elpTb0lEeENuTFB2c3lQenM3TTRYalNwYnUrY0VMMDJsQW4vMFQyMlY0YXNq?= =?utf-8?B?bzB6bWJzdXlBSnM3Rm1IZ0ZNLzNEQWpaUEdjcVRnWlFHalYybm9HQ1UzMGFW?= =?utf-8?Q?6NIVAlJEb2KwtTsW9e?= X-OriginatorOrg: oracle.com X-MS-Exchange-CrossTenant-Network-Message-Id: 3f110b20-59ca-49fc-18db-08d9a863b05c X-MS-Exchange-CrossTenant-AuthSource: SA2PR10MB4636.namprd10.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 15 Nov 2021 18:13:56.5581 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 4e2c6054-71cb-48f1-bd6c-3a9705aca71b X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: zbHOq5HXYpQgnxgU0dCr+TJ5w4NaOi2bAVvt+ZpIieJChB489oPKIGR+qgZIeUTtGYGX1+AiMqpGs4+Z6fb4fw/Q2SGWMOmLDbTYen/O/Vc= X-MS-Exchange-Transport-CrossTenantHeadersStamped: SA1PR10MB5759 X-Proofpoint-Virus-Version: vendor=nai engine=6300 definitions=10169 signatures=668683 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 spamscore=0 phishscore=0 bulkscore=0 adultscore=0 mlxlogscore=999 malwarescore=0 mlxscore=0 suspectscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2110150000 definitions=main-2111150091 X-Proofpoint-ORIG-GUID: iagezxx2Xi0GKwwnfqYkyoFwBnTSZ2XF X-Proofpoint-GUID: iagezxx2Xi0GKwwnfqYkyoFwBnTSZ2XF X-Spam-Status: No, score=-3.1 required=5.0 tests=BAYES_00, BODY_8BITS, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, HTML_MESSAGE, MSGID_FROM_MTA_HEADER, RCVD_IN_DNSWL_LOW, RCVD_IN_MSPIKE_H4, RCVD_IN_MSPIKE_WL, SPF_HELO_NONE, SPF_NONE, TXREP autolearn=ham autolearn_force=no version=3.4.4 X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on server2.sourceware.org Content-Type: text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding: 8bit X-Content-Filtered-By: Mailman/MimeDel 2.1.29 X-BeenThere: binutils@sourceware.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Binutils mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 15 Nov 2021 18:14:11 -0000 Any suggestions, recomendations to make the gprofng sources public ? We need a code review. Thank you, -Vladimir -------- Forwarded Message -------- Subject: [PATCH V4] gprofng: a new GNU profiler Date: Wed, 3 Nov 2021 11:05:16 -0700 From: Vladimir Mezentsev To: binutils@sourceware.org Hi people! Here is a slightly updated patch for the gprofng utility. We have fixed some issues we have noticed while testing and added first support for hardware event counter profiling on Arm. We think gprofng will be a good addition to binutils and hope that we can move forward. In particular we'd like to ask for the review process to start. This is a high level description of the various components in gprofng with the purpose of helping reviewers: gprofng tools:     gprofng         - the driver program     gp-collect-app  - create experiment with program performance data     gp-display-text - print an ASCII report from one or more performance experiments     gp-display-html - generate an HTML based directory structure from an experiment     gp-archive      - archive the binaries and sources for experiment     gp-display-src  - print a source or dissasembly listing for the load object     lib/libgprofng.so - read experiments.                         libgprofng.so is linked with each gprofng tools. gprofng collector libraries:     lib/libgp-collector.so - gprofng collector library     lib/libgp-heap.so      - Heap tracing library     lib/libgp-iotrace.so   - I/O tracing library     lib/libgp-sync.so      - Synchronization tracing library gprofng source tree:     gprofng/doc/*          - gprofng documentation     gprofng/libcollector/* - sources of libgp-collector.so, libgp-heap.so,                              libgp-iotrace.so and libgp-sync.so     gprofng/src/*          - sources of all gprofng tools and libgprofng.so     gprofng/common/*       - these files are common components used                              when building the gprofng libraries Known problems ============== - To convert cycles to time, we need the frequency the core is running at.   On Arm we read the cntrfrq_e10 register, but this sometimes returns an   incorrect value. For the time being, it may be safest to ignore the   cycles derived timings on Arm. - The support for hardware event counters on recent processors is limited.   You can use the “gprofng collect app -h” command to check for support.   In case a specific processor is not supported, a warning message will be   printed.  Otherwise a list with the supported events is printed. How to get gprofng ================== Due to the size of the contribution, we thought it would be better to submit it in the form of a git branch, instead of a regular emailed patch series. Repository:https://www.github.com/oracle/binutils-gdb Branch:     oracle/gprofng-v4 Build gprofng ============= For x86_64/i686, gprofng should be built twice to support profiling for both 32-bit and 64-bit applications:   PREFIX=   configure --enable-shared --prefix=$PREFIX --libdir=$PREFIX/lib64 && make && make install   configure --enable-shared --prefix=$PREFIX CC='gcc -m32' CXX='g++ -m32' \          --target=i686-pc-linux-gnu --disable-gprofng-tools && make && make install For ARM:   configure --enable-shared --prefix=$PREFIX && make install To support java profiling, configure the build with -with-jdk=PATH_TO_JDK in case javac is not in your PATH. 11/02/2021: Changes from V3 of the patch ============================================ - First support for hardware event counter profiling on Arm. - Fixed a problem with dlopen() for libc on Arm. - Fixed several bugs and implemented some small changes in the output 09/01/2021: Changes from V2 of the patch ========================================  - Renamed experiment.h to gp-experiment.h to fixe a problem on Windows that Hannes    Domani reported.  - Fixed a regression in the build on Arm.  - Improved the gprofng testsuite. 08/25/2021: Changes from V1 of the patch ======================================== Addressed all of Joseph Myers's remarks about gprofng Makefiles and configure scripts:  - Report an error when bison is absent, or a version of bison is too old.  - Added preload_libdirs in ${prefix}/etc/gprofng.rc to configure the location of the    gprofng libraries (this was hard-coded previously). We also took note of Jim Wilson's comment about the naming of files in src/machinemodels. In particular, file m5.ermm and the suggestion to make it clear this is for a SPARC processor. For example sparc-m5.ermm. This is going to be part of a bigger overhaul of the naming convention for these files. The most obvious choice is to include the product name, but we definitely appreciate any suggestions this group may have. A new GNU profiler ============================== In this submission we are contributing a new profiler to the GNU binary utilities, called gprofng (for GNU profiler, next generation). Why a new profiler? =================== The GNU profiler, gprof, works well enough in many cases. However, it hasn't aged well and it is not that very well suited for profiling modern-world applications. Examples of its limitations are lack of support for profiling multithreaded programs, and shared objects. Both are ubiquitous nowadays. Main characteristics of gprofng =============================== gprofng supports profiling C, C++ and Java programs. Unlike the old gprof, it doesn't require to build annotated versions of the programs. Profiling "production" binaries should work just fine. Another distinguishing feature of gprofng is the support for various filters that allow the user to easily drill deeper into an area of interest. The profiler is commanded through a driver program called `gprofng'. This driver supports the following sub-commands: gprofng collect app EXECUTABLE This runs EXECUTABLE and collects application performance data. gprofng display text EXPERIMENT This runs a client command-line interface that provides access to the collected performance data stored in the experiment directory. gprofng display html EXPERIMENT This generates an HTML report from the collected performance data stored in the experiment directory. gprofng display src OBJECT-FILE This displays source (if available) or disassembly interleaved with the source code. gprofng archive EXPERIMENT Archive the associated application binaries, load objects and source files in an existing experiment directory to make it self contained. There is also an extensive graphical user interface (written in Java) that displays and analyzes gprofng collected data in a very sophisticated way. We plan to release this GUI as a separate project. While WIP, we would like to share some screenshots of the current development version. These show the following: pic1.png - a flame graph: https://jemarch.net/gprofng-pics/pic1.png pic2.png - color coded call stacks as a function of time ("the timeline"): https://jemarch.net/gprofng-pics/pic2.png pic3.png - zoom in on the timeline and adapt colors to identify details: https://jemarch.net/gprofng-pics/pic3.png pic4.png - compare two mulithreaded profiles: https://jemarch.net/gprofng-pics/pic4.png Notes on the implementation =========================== - The gp-display-html tool is written in Perl. All other components are written in C/C++. - gprofng sources are mostly contained in a new top-level directory gprofng/. - The libcollector.h, libfcollector.h, and collectorAPI.h header files are header files are distributed in the top-level include/ directory. - Currently gprofng supports profiling programs in GNU/Linux systems running on x86_64 and aarch64 hardware. It is possible to add support for additional architectures. - The tools come with a set of man pages. They are generated upon installation and can be found in the installation directory under share/man/man1. Platform support ================ The basic profiling features are supported on most processors from Intel. Regarding AMD we did not yet test on their recent EPYC processors, but do not expect serious issues for the callstack sampling. We also support the Arm processors as used in systems from Ampere. Hardware event counters are very processor specific. While gprofng supports using such counters, we currently lack support for recent Intel and AMD processors, like the EPYC architecture in case of the latter. If a particular processor is not supported, but a hardware event counter experiment is requested, a warning message will be issued before gprofng terminates. This code has been developed and tested on Oracle Linux 8 with the latest GNU toolchain from the sourceware git repos. Structure of the patch series ============================= The first patch is preparatory and makes the x86 disassembler in opcodes to be thread-safe. This is so it can be used by gprofng. The second patch is the implementation of gprofng proper. This includes source code for the libraries (libcollector, libgprofng) and the utilities (gp-collect, etc). In this patch there are also updates to the corresponding build machinery (e.g. configure.ac, Makefile.def, plus binutils/MAINTAINERS to cover gprofng) The third patch adds a testsuite in gprofng/testsuite. The fourth patch adds a Texinfo manual for gprofng. The manual is still WIP but already provides a tutorial-like introduction to the tools. Limitations =========== The gp-display-html tool is present, and can be executed, but it is not functional yet. Full support for this tool is expected to be delivered in a future patch. Requirements =========== In order to successfully build gprofng, the following versions of external components are required: - Bison 3.7.5, or higher - Texinfo 6.7, or higher - Java include files (--with-jdk=PATH) if java profiling should be enabled Maintenance =========== We are of course volunteering to maintain gprofng once it is incorporated into the main binutils distribution. We suggest having feedback and discussion in this mail thread.