Received: by 2002:a25:e7d8:0:0:0:0:0 with SMTP id e207csp683084ybh; Wed, 11 Mar 2020 08:45:16 -0700 (PDT) X-Google-Smtp-Source: ADFU+vsFIQNEBoD+O1OYsZYVwz4X/Hh5d9Q92KKjb097G6x0ncT6nvxr0A6QpY8WaCWGYY3qkkaC X-Received: by 2002:a9d:70c5:: with SMTP id w5mr2946660otj.58.1583941515714; Wed, 11 Mar 2020 08:45:15 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1583941515; cv=none; d=google.com; s=arc-20160816; b=TFSvy0pZQ6//YC61QjtGZx/3q1BSTgXnGTiYF8FDiAZjLab0BwE+yfbegHzoIEW0RV 9q8xGrZpUfNUPeM2VsruIxNL/tJqC4VPFnSrW+r3G0jkx54X1VjgoXgF0LcGMI76NP8J rUMULDfAOpyxHIii1916J7R6UMdtB/lXrZcLwwm3M8KqbPEbLGdaEWYM9m90/FBs6QtI H0/KhBc/XKYkfEv6HEnVRcE2QUjU951W46FO4Gxaq0l8XbV/m0gpfLjgd9IqqKZAOJLO VtkMyQjZl45t+jyLYHSzmgBjAIfZg8rPMsbya4wOqv+KBF4VplPrlQm+OY33ZCK8uwIC TH2Q== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding :content-language:in-reply-to:mime-version:user-agent:date :message-id:from:references:cc:to:subject; bh=S7LZXxWKBPko9nm0cTJJh4ha9OtBYxt4j61Xu2ZPP+g=; b=C+C4pNoYV/HuVY+4e2xvbxKSSzxdN3MQJ+qnUon+jQYW3hphr56xhX1+ONwzXSnQMT zlEym11xFhZJvVnvecxu4r4xUI/ZcQ3FfumQNVO+m3fI+hHOQe9pAYBQvXqfihcX27G9 Gzn8Ihhw6GfZBpdud9xUC02q+0GKGT5t53jmXEt3xx4fTX3riVeyMldL0KPFSQaXJiU1 wJHSlMbbAFalDpCoc5QkItfhO6FXFZCHjrVLuDRe3w5vSQd4f+PySXRTOKE+d2Nuf7As k83Dpga2CGgsx64/wxs0nmPQUTv0SC4NWnDIEVKhLMV/k0l5ruHeYYQ46dk6f1TN8jxH +isA== 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=intel.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id k22si1327250otn.272.2020.03.11.08.45.02; Wed, 11 Mar 2020 08:45:15 -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=intel.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1730062AbgCKPoY (ORCPT + 99 others); Wed, 11 Mar 2020 11:44:24 -0400 Received: from mga07.intel.com ([134.134.136.100]:13577 "EHLO mga07.intel.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1729927AbgCKPoY (ORCPT ); Wed, 11 Mar 2020 11:44:24 -0400 X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from fmsmga002.fm.intel.com ([10.253.24.26]) by orsmga105.jf.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 11 Mar 2020 08:44:23 -0700 X-IronPort-AV: E=Sophos;i="5.70,541,1574150400"; d="scan'208";a="277419617" Received: from jkbowlin-mobl.amr.corp.intel.com (HELO [10.251.23.31]) ([10.251.23.31]) by fmsmga002-auth.fm.intel.com with ESMTP/TLS/DHE-RSA-AES256-SHA; 11 Mar 2020 08:44:21 -0700 Subject: Re: [PATCH V1 09/13] selftests/resctrl: Modularize fill_buf for new CAT test case To: Sai Praneeth Prakhya , shuah@kernel.org, linux-kselftest@vger.kernel.org Cc: tglx@linutronix.de, mingo@redhat.com, bp@alien8.de, tony.luck@intel.com, babu.moger@amd.com, james.morse@arm.com, ravi.v.shankar@intel.com, fenghua.yu@intel.com, x86@kernel.org, linux-kernel@vger.kernel.org References: <43b368952bb006ee973311d9c9ae0eb53d8e7f60.1583657204.git.sai.praneeth.prakhya@intel.com> <4c84be1d-8839-2c85-b294-7e3c454240bb@intel.com> <7a1f93d4516a7de99c5dbc4afd6279d6fe7aa126.camel@intel.com> From: Reinette Chatre Message-ID: <50cb755f-e112-5d71-11fa-a7cbc951d91e@intel.com> Date: Wed, 11 Mar 2020 08:44:20 -0700 User-Agent: Mozilla/5.0 (Windows NT 6.3; WOW64; rv:68.0) Gecko/20100101 Thunderbird/68.5.0 MIME-Version: 1.0 In-Reply-To: <7a1f93d4516a7de99c5dbc4afd6279d6fe7aa126.camel@intel.com> Content-Type: text/plain; charset=utf-8 Content-Language: en-US Content-Transfer-Encoding: 7bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Hi Sai, On 3/10/2020 6:04 PM, Sai Praneeth Prakhya wrote: > On Tue, 2020-03-10 at 14:59 -0700, Reinette Chatre wrote: >> On 3/6/2020 7:40 PM, Sai Praneeth Prakhya wrote: >>> Currently fill_buf (in-built benchmark) runs as a separate process and it >>> runs indefinitely looping around given buffer either reading it or writing >>> to it. But, some future test cases might want to start and stop looping >>> around the buffer as they see fit. So, modularize fill_buf to support this >>> use case. >>> >>> Signed-off-by: Sai Praneeth Prakhya >>> --- >>> tools/testing/selftests/resctrl/fill_buf.c | 66 ++++++++++++++++++++----- >>> ----- >>> 1 file changed, 44 insertions(+), 22 deletions(-) >>> >>> diff --git a/tools/testing/selftests/resctrl/fill_buf.c >>> b/tools/testing/selftests/resctrl/fill_buf.c >>> index 9ede7b63f059..204ae8870a32 100644 >>> --- a/tools/testing/selftests/resctrl/fill_buf.c >>> +++ b/tools/testing/selftests/resctrl/fill_buf.c >>> @@ -23,7 +23,7 @@ >>> #define PAGE_SIZE (4 * 1024) >>> #define MB (1024 * 1024) >>> >>> -static unsigned char *startptr; >>> +static unsigned char *startptr, *endptr; > > [Snipped.. assuming code over here might not be needed for discussion] > >>> +static int use_buffer_forever(int op, char *resctrl_val) >>> +{ >>> + int ret; >>> + >>> if (op == 0) >>> - ret = fill_cache_read(start_ptr, end_ptr, resctrl_val); >>> + ret = fill_cache_read(resctrl_val); >>> else >>> - ret = fill_cache_write(start_ptr, end_ptr, resctrl_val); >>> + ret = fill_cache_write(resctrl_val); >>> >>> if (ret) { >>> printf("\n Errror in fill cache read/write...\n"); >>> return -1; >>> } >>> >>> + return 0; >>> +} >>> + >>> +static int >>> +fill_cache(unsigned long long buf_size, int malloc_and_init, int >>> memflush, >>> + int op, char *resctrl_val) >>> +{ >>> + int ret; >>> + >>> + ret = init_buffer(buf_size, malloc_and_init, memflush); >>> + if (ret) >>> + return ret; >>> + >>> + ret = use_buffer_forever(op, resctrl_val); >>> + if (ret) >>> + return ret; >> >> Should buffer be freed on this error path? > > Yes, that's right.. my bad. Will fix it. But the right fix is, > use_buffer_forever() should not return at all. It's meant to loop around the > buffer _forever_. > >> I think the asymmetrical nature of the memory allocation and release >> creates traps like this. >> >> It may be less error prone to have the pointer returned by init_buffer >> and the acted on and released within fill_cache(), passed to >> "use_buffer_forever()" as a parameter. The buffer size is known here, >> there is no need to keep an "end pointer" around. > > The main reason for having "startptr" as a global variable is to free memory > when fill_buf is killed. fill_buf runs as a separate process (for test cases > like MBM, MBA and CQM) and when user issues Ctrl_c or when the test kills > benchmark_pid (i.e. fill_buf), the buffer is freed (please see > ctrl_handler()). I see. Got it, thanks. > > So, I thought, as "startptr" is anyways global, why pass it around as an > argument? While making this change I thought it's natural to make "endptr" > global as well because the function didn't really look good to just take > endptr as an argument without startptr. Maintaining the end pointer is unusual. The start of the buffer and the size are known properties that the end of the buffer can be computed from. Not a problem, it just seems inconsistent that some of the buffer functions operate on the start pointer and size while others operate on the start pointer and end pointer. > I do agree that asymmetrical nature of the memory allocation and release might > create traps, I will try to overcome this for CAT test case (other test cases > will not need it). Thank you very much Reinette