Received: by 10.213.65.68 with SMTP id h4csp1374700imn; Mon, 19 Mar 2018 02:18:05 -0700 (PDT) X-Google-Smtp-Source: AG47ELuFNgcBTXFd/2YMs6a/9aGythW/H0bu6zMpo+GDVngCeXomiMIXWqCN5s+UJrp/Qwij74L9 X-Received: by 10.99.103.69 with SMTP id b66mr8587712pgc.233.1521451085854; Mon, 19 Mar 2018 02:18:05 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1521451085; cv=none; d=google.com; s=arc-20160816; b=q6auzAp4feMdJIdBdwr5Omm/YSxGE+1OlQqrjwjOUFj1BdMt+hYjYbQb3r2dt1nt2M +Ov5+WndSdWo8t9mu1+9aYLcMlQdz1IHQBshyFc3IgN3a4hljxal4cvcTNEXpQ+Y21LD 0vHVzv9It3yf5kRGCbOTtfw7UFBHRERNWJe6MbqGZ9ncJzAbu19t1cU8L59eHOT3vk8i anTEgciWrOxP7J7zZZzQn22S89sjSled/FzAcO/GnpphfnFDeAW7xGLUXLjW+H7sRUT/ /gcSW98hI43becovS0+HJOLleAhIm/mkQwxScqryZyNajPKQomkN2qdJnIXNHqfPfud0 aNpw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:message-id:content-language :content-transfer-encoding:in-reply-to:mime-version:user-agent:date :from:references:cc:to:subject:arc-authentication-results; bh=QVcPoatk5YOfEgWQu8uUkz9O/VMUlZwFK2l/dsQdQLg=; b=D4AS+lCAHroPBOEnQfHj81X/ByEv4PeW7JJzwAnsfmFn9sfvap+EXG/I21lHZ2uJfe lJziGk7PIvwyoJ9Ak8vxzEA8G55pwSpw5VkVcuYsf3ryTJzZHLhy8v68C0y9934otkVG 9XIC2vu5djmBFMXTUiGnH7EJRp9JT7WCCdgEygopfE0j1be8e4Mv15ePV52RUn5meDv4 OtdScUq/8cHBhxBKzTrZbU3zc84H7c1uMG18oPaqdVKpN9QC2p8VHhC/HwOaWCvFCKcG rGhoZj+iOiADSA1QyuppnJZCFWkK1ajxlFr8OfbcfdPDsFuWkeSoLBWBZ8LB7WGYx8iW JmmA== 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=NONE sp=NONE dis=NONE) header.from=ibm.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id g2-v6si3013613pll.94.2018.03.19.02.17.51; Mon, 19 Mar 2018 02:18:05 -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=NONE sp=NONE dis=NONE) header.from=ibm.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S932632AbeCSJQ3 (ORCPT + 99 others); Mon, 19 Mar 2018 05:16:29 -0400 Received: from mx0a-001b2d01.pphosted.com ([148.163.156.1]:58524 "EHLO mx0a-001b2d01.pphosted.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S932594AbeCSJQZ (ORCPT ); Mon, 19 Mar 2018 05:16:25 -0400 Received: from pps.filterd (m0098396.ppops.net [127.0.0.1]) by mx0a-001b2d01.pphosted.com (8.16.0.22/8.16.0.22) with SMTP id w2J9ETWP094081 for ; Mon, 19 Mar 2018 05:16:24 -0400 Received: from e06smtp12.uk.ibm.com (e06smtp12.uk.ibm.com [195.75.94.108]) by mx0a-001b2d01.pphosted.com with ESMTP id 2gtadag2sj-1 (version=TLSv1.2 cipher=AES256-SHA256 bits=256 verify=NOT) for ; Mon, 19 Mar 2018 05:16:24 -0400 Received: from localhost by e06smtp12.uk.ibm.com with IBM ESMTP SMTP Gateway: Authorized Use Only! Violators will be prosecuted for from ; Mon, 19 Mar 2018 09:16:21 -0000 Received: from b06cxnps3074.portsmouth.uk.ibm.com (9.149.109.194) by e06smtp12.uk.ibm.com (192.168.101.142) with IBM ESMTP SMTP Gateway: Authorized Use Only! Violators will be prosecuted; Mon, 19 Mar 2018 09:16:12 -0000 Received: from d06av26.portsmouth.uk.ibm.com (d06av26.portsmouth.uk.ibm.com [9.149.105.62]) by b06cxnps3074.portsmouth.uk.ibm.com (8.14.9/8.14.9/NCO v10.0) with ESMTP id w2J9GBN864291064; Mon, 19 Mar 2018 09:16:11 GMT Received: from d06av26.portsmouth.uk.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id DC13CAE04D; Mon, 19 Mar 2018 09:06:33 +0000 (GMT) Received: from d06av26.portsmouth.uk.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 02A34AE051; Mon, 19 Mar 2018 09:06:28 +0000 (GMT) Received: from [9.124.31.209] (unknown [9.124.31.209]) by d06av26.portsmouth.uk.ibm.com (Postfix) with ESMTP; Mon, 19 Mar 2018 09:06:27 +0000 (GMT) Subject: Re: [PATCH 6/8] trace_uprobe/sdt: Fix multiple update of same reference counter To: Oleg Nesterov Cc: mhiramat@kernel.org, peterz@infradead.org, srikar@linux.vnet.ibm.com, acme@kernel.org, ananth@linux.vnet.ibm.com, akpm@linux-foundation.org, alexander.shishkin@linux.intel.com, alexis.berlemont@gmail.com, corbet@lwn.net, dan.j.williams@intel.com, gregkh@linuxfoundation.org, huawei.libin@huawei.com, hughd@google.com, jack@suse.cz, jglisse@redhat.com, jolsa@redhat.com, kan.liang@intel.com, kirill.shutemov@linux.intel.com, kjlx@templeofstupid.com, kstewart@linuxfoundation.org, linux-doc@vger.kernel.org, linux-kernel@vger.kernel.org, linux-mm@kvack.org, mhocko@suse.com, milian.wolff@kdab.com, mingo@redhat.com, namhyung@kernel.org, naveen.n.rao@linux.vnet.ibm.com, pc@us.ibm.com, pombredanne@nexb.com, rostedt@goodmis.org, tglx@linutronix.de, tmricht@linux.vnet.ibm.com, willy@infradead.org, yao.jin@linux.intel.com, fengguang.wu@intel.com, Ravi Bangoria References: <20180313125603.19819-1-ravi.bangoria@linux.vnet.ibm.com> <20180313125603.19819-7-ravi.bangoria@linux.vnet.ibm.com> <20180315144959.GB19643@redhat.com> <20180316175030.GA28770@redhat.com> From: Ravi Bangoria Date: Mon, 19 Mar 2018 14:48:35 +0530 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101 Thunderbird/52.6.0 MIME-Version: 1.0 In-Reply-To: <20180316175030.GA28770@redhat.com> Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit Content-Language: en-US X-TM-AS-GCONF: 00 x-cbid: 18031909-0008-0000-0000-000004DFBFEA X-IBM-AV-DETECTION: SAVI=unused REMOTE=unused XFE=unused x-cbparentid: 18031909-0009-0000-0000-00001E72D62E Message-Id: <4b337afd-fc5e-6110-888b-d4fa36a797ee@linux.vnet.ibm.com> X-Proofpoint-Virus-Version: vendor=fsecure engine=2.50.10432:,, definitions=2018-03-19_05:,, signatures=0 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 priorityscore=1501 malwarescore=0 suspectscore=0 phishscore=0 bulkscore=0 spamscore=0 clxscore=1015 lowpriorityscore=0 impostorscore=0 adultscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.0.1-1709140000 definitions=main-1803190113 Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Hi Oleg, On 03/16/2018 11:20 PM, Oleg Nesterov wrote: > On 03/16, Ravi Bangoria wrote: >> On 03/15/2018 08:19 PM, Oleg Nesterov wrote: >>> On 03/13, Ravi Bangoria wrote: >>>> For tiny binaries/libraries, different mmap regions points to the >>>> same file portion. In such cases, we may increment reference counter >>>> multiple times. >>> Yes, >>> >>>> But while de-registration, reference counter will get >>>> decremented only by once >>> could you explain why this happens? sdt_increment_ref_ctr() and >>> sdt_decrement_ref_ctr() look symmetrical, _decrement_ should see >>> the same mappings? > ... > >>     # strace -o out python >>       mmap(NULL, 2738968, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x7fff92460000 >>       mmap(0x7fff926a0000, 327680, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x230000) = 0x7fff926a0000 >>       mprotect(0x7fff926a0000, 65536, PROT_READ) = 0 > Ah, in this case everything is clear, thanks. > > I was confused by the changelog, I misinterpreted it as if inc/dec are not > balanced in case of multiple mappings even if the application doesn't play > with mmap/mprotect/etc. > > And it seems that you are trying to confuse yourself, not only me ;) Just > suppose that an application does mmap+munmap in a loop and the mapped region > contains uprobe but not the counter. this is fine because ... > > And this all makes me think that we should do something else. Ideally, > install_breakpoint() and remove_breakpoint() should inc/dec the counter > if they do not fail... The whole point of adding this logic in trace_uprobe is we wanted to decouple the counter inc/dec logic from uprobe patching. If user is just doing mmap+munmap region in a loop which contains uprobe, the instruction will be patched by the core uprobe infrastructure. Whenever application mmap the region that holds to counter, it will be incremented. Our initial design was to increment counter in install_breakpoint() but uprobed instruction gets patched in a very early stage of binary loading and vma that holds the counter may not be mapped yet. > > Btw, why do we need a counter, not a boolean? Who else can modify it? > Or different uprobes can share the same counter? Yes, multiple SDT markers can share the counter. Ex, there can be multiple implementation of same function and thus each individual implementation may contain marker which share the same counter. From mysql,   # readelf -n /usr/lib64/mysql/libmysqlclient.so.18.0.0 | grep -A2 Provider     Provider: mysql     Name: net__write__start     Location: 0x000000000003caa0, ..., Semaphore: 0x0000000000333532   --     Provider: mysql     Name: net__write__start     Location: 0x000000000003cd5c, ..., Semaphore: 0x0000000000333532 Here, both the markers has same name, but different location. Also they share the counter (semaphore). Apart from that, counter allows multiple tracers to trace on a single marker, which is difficult with boolean flag. Thanks, Ravi