Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1754204AbcK1GeD (ORCPT ); Mon, 28 Nov 2016 01:34:03 -0500 Received: from szxga02-in.huawei.com ([119.145.14.65]:46138 "EHLO szxga02-in.huawei.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1750878AbcK1Gdz (ORCPT ); Mon, 28 Nov 2016 01:33:55 -0500 Subject: Re: [PATCH v3 14/30] perf clang: Support compile IR to BPF object and add testcase To: Alexei Starovoitov References: <20161126070354.141764-1-wangnan0@huawei.com> <20161126070354.141764-15-wangnan0@huawei.com> <20161126172548.GF83987@ast-mbp.thefacebook.com> CC: , , , , , , , Jiri Olsa From: "Wangnan (F)" Message-ID: <583BCF93.5000302@huawei.com> Date: Mon, 28 Nov 2016 14:32:51 +0800 User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:38.0) Gecko/20100101 Thunderbird/38.5.0 MIME-Version: 1.0 In-Reply-To: <20161126172548.GF83987@ast-mbp.thefacebook.com> Content-Type: text/plain; charset="utf-8"; format=flowed Content-Transfer-Encoding: 7bit X-Originating-IP: [10.111.66.109] X-CFilter-Loop: Reflected Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 1932 Lines: 50 On 2016/11/27 1:25, Alexei Starovoitov wrote: > On Sat, Nov 26, 2016 at 07:03:38AM +0000, Wang Nan wrote: >> getBPFObjectFromModule() is introduced to compile LLVM IR(Module) >> to BPF object. Add new testcase for it. >> >> Test result: >> $ ./buildperf/perf test -v clang >> 51: Test builtin clang support : >> 51.1: Test builtin clang compile C source to IR : >> --- start --- >> test child forked, pid 21822 >> test child finished with 0 >> ---- end ---- >> Test builtin clang support subtest 0: Ok >> 51.2: Test builtin clang compile C source to ELF object : >> --- start --- >> test child forked, pid 21823 >> test child finished with 0 >> ---- end ---- >> Test builtin clang support subtest 1: Ok >> >> Signed-off-by: Wang Nan > ... >> + legacy::PassManager PM; >> + if (TargetMachine->addPassesToEmitFile(PM, ostream, >> + TargetMachine::CGFT_ObjectFile)) { >> + llvm::errs() << "TargetMachine can't emit a file of this type\n"; >> + return std::unique_ptr>(nullptr);; >> + } >> + PM.run(*Module); > I'm pretty sure you want to add FunctionInlingPass as well otherwise > I think llvm won't be doing much inlining and only very very simple > programs will compile fine. See what we did on bcc side. Thank you for your information. I though inlining should be done during C to IR phase, and we have use -O2 for it. Let me check it. > Also did you consider skipping elf generation and using in memory > instead ? That will improve compile/run time. > Maybe in future work? Current design reuse libelf and bpf-loader for loading BPF code. Skipping ELF generation make compiling faster, but require another loader to be coexist with bpf-loader.c, or we need a new libbpf. In my current experience, outputting ELF is not so slow for both server and smartphone. Thank you.