# To display the perf.data header info, please use --header/--header-only options. # # # Total Lost Samples: 0 # # Samples: 952 of event 'task-clock:ppp' # Event count (approx.): 95200000 # # Overhead Samples Command Shared Object Symbol # ........ ............ ....... .................... ............................................................................................................................................................................................................................................................................................... # 8.82% 84 osh oils-for-unix [.] MarkSweepHeap::Allocate(unsigned long, int*, int*) 3.99% 38 osh oils-for-unix [.] MarkSweepHeap::Sweep() 2.31% 22 osh oils-for-unix [.] Dict::hash_and_probe(BigStr*) const 2.21% 21 osh oils-for-unix [.] BigStr::hash(unsigned int (*)(char const*, int)) 2.10% 20 osh oils-for-unix [.] MarkSweepHeap::TraceChildren() 2.00% 19 osh oils-for-unix [.] List::reserve(int) [clone .part.0] 2.00% 19 osh oils-for-unix [.] MarkSweepHeap::MaybeMarkAndPush(RawObject*) 1.89% 18 osh oils-for-unix [.] List::reserve(int) [clone .part.0] 1.79% 17 osh oils-for-unix [.] cmd_eval::CommandEvaluator::_Dispatch(syntax_asdl::command_t*, runtime_asdl::CommandStatus*) 1.79% 17 osh oils-for-unix [.] cmd_eval::CommandEvaluator::_DoShAssignment(syntax_asdl::command__ShAssignment*, runtime_asdl::CommandStatus*) 1.79% 17 osh oils-for-unix [.] executor::ShellExecutor::PopProcessSub(runtime_asdl::StatusArray*) 1.68% 16 osh oils-for-unix [.] cmd_eval::CommandEvaluator::_Execute(syntax_asdl::command_t*) 1.37% 13 osh oils-for-unix [.] Dict::find_kv_index(BigStr*) const 1.37% 13 osh oils-for-unix [.] List::reserve(int) [clone .part.0] 1.37% 13 osh oils-for-unix [.] sh_expr_eval::ArithEvaluator::Eval(syntax_asdl::arith_expr_t*) 1.26% 12 osh oils-for-unix [.] dev::Tracer::_ShTraceBegin() 1.26% 12 osh oils-for-unix [.] state::Mem::_ResolveNameOrRef(BigStr*, runtime_asdl::scope_e, List*) 1.16% 11 osh oils-for-unix [.] word_::FastStrEval(syntax_asdl::CompoundWord*) 1.16% 11 osh oils-for-unix [.] word_eval::AbstractWordEvaluator::_EvalWordPart(syntax_asdl::word_part_t*, List*, int) 1.05% 10 osh oils-for-unix [.] state::Mem::ScopesForReading() 1.05% 10 osh oils-for-unix [.] word_eval::AbstractWordEvaluator::EvalWordSequence2(List*, bool, bool) 0.95% 9 osh oils-for-unix [.] state::Mem::GetValue(BigStr*, runtime_asdl::scope_e) 0.84% 8 osh libc.so.6 [.] _IO_default_xsputn 0.84% 8 osh oils-for-unix [.] List::append(runtime_asdl::StatusArray*) 0.84% 8 osh oils-for-unix [.] bracket_osh::Test::Run(runtime_asdl::cmd_value__Argv*) 0.84% 8 osh oils-for-unix [.] runtime_asdl::Piece* Alloc(BigStr*&, bool&, bool&&) 0.84% 8 osh oils-for-unix [.] sh_expr_eval::ArithEvaluator::_ValToIntOrError(value_asdl::value_t*, syntax_asdl::arith_expr_t*) 0.84% 8 osh oils-for-unix [.] split::IfsSplitterState::PushFragment(BigStr*) 0.74% 7 osh oils-for-unix [.] mylib::JoinBytes(List*) 0.74% 7 osh oils-for-unix [.] state::_FrameLookup(Dict*, BigStr*, bool) 0.74% 7 osh oils-for-unix [.] word_eval::AbstractWordEvaluator::_PartValsToString(List*, syntax_asdl::CompoundWord*, int, List*) 0.63% 6 osh oils-for-unix [.] Dict::hash_and_probe(BigStr*) const 0.63% 6 osh oils-for-unix [.] Dict::hash_and_probe(int) const 0.63% 6 osh oils-for-unix [.] List::append(executor::_ProcessSubFrame*) 0.63% 6 osh oils-for-unix [.] StringToInt64(char const*, int, int, long*) 0.63% 6 osh oils-for-unix [.] bracket_osh::_StringWordEmitter::ReadWord(types_asdl::lex_mode_e) 0.63% 6 osh oils-for-unix [.] glob_::GlobUnescape(BigStr*) 0.63% 6 osh oils-for-unix [.] keys_equal(BigStr*, BigStr*) 0.63% 6 osh oils-for-unix [.] mops::FromStr2(BigStr*, int) 0.63% 6 osh oils-for-unix [.] sh_expr_eval::ArithEvaluator::EvalToBigInt(syntax_asdl::arith_expr_t*) 0.63% 6 osh oils-for-unix [.] state::Mem::_ResolveNameOnly(BigStr*, runtime_asdl::scope_e) 0.63% 6 osh oils-for-unix [.] word_eval::AbstractWordEvaluator::EvalRhsWord(syntax_asdl::rhs_word_t*) 0.63% 6 osh oils-for-unix [.] word_eval::AbstractWordEvaluator::EvalWordToString(syntax_asdl::word_t*, int) 0.63% 6 osh oils-for-unix [.] word_eval::_ValueToPartValue(value_asdl::value_t*, bool, syntax_asdl::word_part_t*) 0.53% 5 osh libc.so.6 [.] malloc 0.53% 5 osh oils-for-unix [.] BigStr::replace(BigStr*, BigStr*, int) 0.53% 5 osh oils-for-unix [.] List::at(int) 0.53% 5 osh oils-for-unix [.] List::set(int, int) 0.53% 5 osh oils-for-unix [.] List::reserve(int) [clone .part.0] 0.53% 5 osh oils-for-unix [.] cmd_eval::CommandEvaluator::RunPendingTraps() 0.53% 5 osh oils-for-unix [.] cmd_eval::CommandEvaluator::_LeafTick() 0.53% 5 osh oils-for-unix [.] consts::LookupAssignBuiltin(BigStr*) 0.53% 5 osh oils-for-unix [.] executor::ShellExecutor::PushProcessSub() 0.53% 5 osh oils-for-unix [.] match::BracketBinary(BigStr*) 0.53% 5 osh oils-for-unix [.] sh_expr_eval::ArithEvaluator::StringToBigInt(BigStr*, syntax_asdl::loc_t*) 0.53% 5 osh oils-for-unix [.] word_eval::AbstractWordEvaluator::_EvalWordFrame(List*, List*) 0.42% 4 osh libc.so.6 [.] cfree 0.42% 4 osh libc.so.6 [.] 0x0000000000047594 0.42% 4 osh libc.so.6 [.] 0x00000000000477e0 0.42% 4 osh libc.so.6 [.] 0x0000000000075243 0.42% 4 osh libc.so.6 [.] 0x000000000008e6b8 0.42% 4 osh oils-for-unix [.] Dict::at(int) const 0.42% 4 osh oils-for-unix [.] List*>::at(int) 0.42% 4 osh oils-for-unix [.] List* Alloc>() 0.42% 4 osh oils-for-unix [.] StripAny(BigStr*, StripWhere, int) 0.42% 4 osh oils-for-unix [.] executor::ShellExecutor::_RunSimpleCommand(BigStr*, syntax_asdl::loc_t*, runtime_asdl::cmd_value__Argv*, runtime_asdl::CommandStatus*, int) 0.42% 4 osh oils-for-unix [.] match::BracketUnary(BigStr*) 0.42% 4 osh oils-for-unix [.] split::IfsSplitterState::_FlushCharBuff() 0.42% 4 osh oils-for-unix [.] word_eval::_MakeWordFrames(List*) 0.32% 3 osh [kernel.kallsyms] [k] 0xffffffff92866297 0.32% 3 osh ld-linux-x86-64.so.2 [.] 0x0000000000011429 0.32% 3 osh libc.so.6 [.] _IO_fflush 0.32% 3 osh libc.so.6 [.] strtoimax 0.32% 3 osh libc.so.6 [.] 0x000000000005a2ef 0.32% 3 osh libc.so.6 [.] 0x00000000000a2709 0.32% 3 osh libc.so.6 [.] 0x00000000001a102a 0.32% 3 osh oils-for-unix [.] BigStr::join(List*) 0.32% 3 osh oils-for-unix [.] List*>::reserve(int) [clone .part.0] 0.32% 3 osh oils-for-unix [.] List::at(int) 0.32% 3 osh oils-for-unix [.] List* Alloc>() 0.32% 3 osh oils-for-unix [.] List::at(int) 0.32% 3 osh oils-for-unix [.] List::reserve(int) [clone .part.0] 0.32% 3 osh oils-for-unix [.] MarkSweepHeap::MaybeCollect() 0.32% 3 osh oils-for-unix [.] cmd_eval::CommandEvaluator::_CheckStatus(int, runtime_asdl::CommandStatus*, syntax_asdl::command_t*, syntax_asdl::loc_t*) 0.32% 3 osh oils-for-unix [.] cmd_eval::CommandEvaluator::_DoSimple(syntax_asdl::command__Simple*, runtime_asdl::CommandStatus*) 0.32% 3 osh oils-for-unix [.] cmd_eval::CommandEvaluator::_ExecuteList(List*) 0.32% 3 osh oils-for-unix [.] cmd_eval::CommandEvaluator::_MaybeRunDebugTrap() 0.32% 3 osh oils-for-unix [.] glob_::LooksLikeGlob(BigStr*) 0.32% 3 osh oils-for-unix [.] match::MatchShNumberToken(BigStr*, int) 0.32% 3 osh oils-for-unix [.] mops::ToStr(long) 0.32% 3 osh oils-for-unix [.] runtime_asdl::cmd_value__Argv* Alloc*&, List*&, bool&, decltype(nullptr), decltype(nullptr)>(List*&, List*&, bool&, decltype(nullptr)&&, decltype(nullptr)&&) [clone .isra.0] 0.32% 3 osh oils-for-unix [.] sh_expr_eval::ArithEvaluator::EvalShellLhs(syntax_asdl::sh_lhs_t*, runtime_asdl::scope_e) 0.32% 3 osh oils-for-unix [.] sh_expr_eval::BoolEvaluator::EvalB(syntax_asdl::bool_expr_t*) 0.32% 3 osh oils-for-unix [.] state::Mem::SetNamed(value_asdl::LeftName*, value_asdl::value_t*, runtime_asdl::scope_e, int) 0.32% 3 osh oils-for-unix [.] syntax_asdl::loc__Arith* Alloc(syntax_asdl::arith_expr_t*&) 0.32% 3 osh oils-for-unix [.] trap_osh::TrapState::GetPendingTraps() 0.32% 3 osh oils-for-unix [.] value_asdl::value__Int* Alloc(long&) 0.32% 3 osh oils-for-unix [.] value_asdl::value__Str* Alloc(BigStr*&) 0.32% 3 osh oils-for-unix [.] value_asdl::value__Str* Alloc(BigStr*&&) 0.32% 3 osh oils-for-unix [.] word_eval::AbstractWordEvaluator::_EvalSimpleVarSub(syntax_asdl::SimpleVarSub*, List*, bool) 0.21% 2 osh [kernel.kallsyms] [k] 0xffffffff918b5b52 0.21% 2 osh libc.so.6 [.] __errno_location 0.21% 2 osh libc.so.6 [.] __snprintf_chk 0.21% 2 osh libc.so.6 [.] 0x0000000000047561 0.21% 2 osh libc.so.6 [.] 0x000000000004766e 0.21% 2 osh libc.so.6 [.] 0x0000000000199e62 0.21% 2 osh libc.so.6 [.] 0x000000000019d4bc 0.21% 2 osh libc.so.6 [.] 0x000000000019d4c2 0.21% 2 osh libc.so.6 [.] 0x00000000001a1024 0.21% 2 osh oils-for-unix [.] Dict::hash_and_probe(BigStr*) const 0.21% 2 osh oils-for-unix [.] List* Alloc>() 0.21% 2 osh oils-for-unix [.] List* Alloc>() 0.21% 2 osh oils-for-unix [.] List*>::at(int) 0.21% 2 osh oils-for-unix [.] List::reserve(int) [clone .part.0] 0.21% 2 osh oils-for-unix [.] List::extend(List*) 0.21% 2 osh oils-for-unix [.] List* Alloc>() 0.21% 2 osh oils-for-unix [.] bracket_osh::_WordEvaluator::EvalWordToString(syntax_asdl::word_t*, int) 0.21% 2 osh oils-for-unix [.] cmd_eval::CommandEvaluator::_EvalAndPushRedirects(List*) 0.21% 2 osh oils-for-unix [.] match::LooksLikeInteger(BigStr*) 0.21% 2 osh oils-for-unix [.] sh_expr_eval::_ParseOshInteger(BigStr*, syntax_asdl::loc_t*) 0.21% 2 osh oils-for-unix [.] split::SplitContext::_GetSplitter(BigStr*) 0.21% 2 osh oils-for-unix [.] ui::ctx_Location::~ctx_Location() 0.21% 2 osh oils-for-unix [.] value_asdl::LeftName* Alloc(BigStr*&, syntax_asdl::Token*&) 0.21% 2 osh oils-for-unix [.] vm::_Executor::RunBuiltin(int, runtime_asdl::cmd_value__Argv*) 0.21% 2 osh oils-for-unix [.] vm::_Executor::RunSimpleCommand(runtime_asdl::cmd_value__Argv*, runtime_asdl::CommandStatus*, int) 0.21% 2 osh oils-for-unix [.] word_eval::AbstractWordEvaluator::_EvalWordToParts(syntax_asdl::CompoundWord*, List*, int) 0.11% 1 osh [kernel.kallsyms] [k] 0xffffffff91974570 0.11% 1 osh [kernel.kallsyms] [k] 0xffffffff9197457c 0.11% 1 osh [kernel.kallsyms] [k] 0xffffffff919bea0c 0.11% 1 osh [kernel.kallsyms] [k] 0xffffffff919f5f4b 0.11% 1 osh [kernel.kallsyms] [k] 0xffffffff91b61aaa 0.11% 1 osh [kernel.kallsyms] [k] 0xffffffff91b6b278 0.11% 1 osh [kernel.kallsyms] [k] 0xffffffff91b6e390 0.11% 1 osh [kernel.kallsyms] [k] 0xffffffff91b6e433 0.11% 1 osh [kernel.kallsyms] [k] 0xffffffff91b7fbe3 0.11% 1 osh [kernel.kallsyms] [k] 0xffffffff91bc5967 0.11% 1 osh [kernel.kallsyms] [k] 0xffffffff91bc9c5d 0.11% 1 osh [kernel.kallsyms] [k] 0xffffffff91bd0aab 0.11% 1 osh [kernel.kallsyms] [k] 0xffffffff91bd0bd0 0.11% 1 osh [kernel.kallsyms] [k] 0xffffffff91bd2703 0.11% 1 osh [kernel.kallsyms] [k] 0xffffffff91bde9ba 0.11% 1 osh [kernel.kallsyms] [k] 0xffffffff91bf9e60 0.11% 1 osh [kernel.kallsyms] [k] 0xffffffff91c0beba 0.11% 1 osh [kernel.kallsyms] [k] 0xffffffff91c30b9e 0.11% 1 osh [kernel.kallsyms] [k] 0xffffffff91c65e38 0.11% 1 osh [kernel.kallsyms] [k] 0xffffffff91c67009 0.11% 1 osh [kernel.kallsyms] [k] 0xffffffff91c673ad 0.11% 1 osh [kernel.kallsyms] [k] 0xffffffff91c69f0f 0.11% 1 osh [kernel.kallsyms] [k] 0xffffffff91cb0d9d 0.11% 1 osh [kernel.kallsyms] [k] 0xffffffff91ceab92 0.11% 1 osh [kernel.kallsyms] [k] 0xffffffff91d6bf6a 0.11% 1 osh [kernel.kallsyms] [k] 0xffffffff91d7666a 0.11% 1 osh [kernel.kallsyms] [k] 0xffffffff91d76671 0.11% 1 osh [kernel.kallsyms] [k] 0xffffffff91d868f8 0.11% 1 osh [kernel.kallsyms] [k] 0xffffffff91fadda1 0.11% 1 osh [kernel.kallsyms] [k] 0xffffffff91fafab5 0.11% 1 osh [kernel.kallsyms] [k] 0xffffffff92853273 0.11% 1 osh [kernel.kallsyms] [k] 0xffffffff928575e5 0.11% 1 osh [kernel.kallsyms] [k] 0xffffffff9286a415 0.11% 1 osh [kernel.kallsyms] [k] 0xffffffff928ea8c9 0.11% 1 osh ld-linux-x86-64.so.2 [.] 0x000000000000b734 0.11% 1 osh ld-linux-x86-64.so.2 [.] 0x000000000000b791 0.11% 1 osh ld-linux-x86-64.so.2 [.] 0x000000000000c12d 0.11% 1 osh ld-linux-x86-64.so.2 [.] 0x000000000000c151 0.11% 1 osh ld-linux-x86-64.so.2 [.] 0x0000000000015dbd 0.11% 1 osh ld-linux-x86-64.so.2 [.] 0x0000000000018408 0.11% 1 osh ld-linux-x86-64.so.2 [.] 0x0000000000027fe4 0.11% 1 osh ld-linux-x86-64.so.2 [.] 0x00000000000283a8 0.11% 1 osh ld-linux-x86-64.so.2 [.] 0x0000000000028648 0.11% 1 osh libc.so.6 [.] _IO_file_write 0.11% 1 osh libc.so.6 [.] 0x0000000000047552 0.11% 1 osh libc.so.6 [.] 0x0000000000047589 0.11% 1 osh libc.so.6 [.] 0x000000000004763d 0.11% 1 osh libc.so.6 [.] 0x0000000000047650 0.11% 1 osh libc.so.6 [.] 0x0000000000047654 0.11% 1 osh libc.so.6 [.] 0x0000000000047657 0.11% 1 osh libc.so.6 [.] 0x0000000000047693 0.11% 1 osh libc.so.6 [.] 0x00000000000476be 0.11% 1 osh libc.so.6 [.] 0x00000000000477cf 0.11% 1 osh libc.so.6 [.] 0x00000000000477e5 0.11% 1 osh libc.so.6 [.] 0x000000000005a239 0.11% 1 osh libc.so.6 [.] 0x000000000005a2dd 0.11% 1 osh libc.so.6 [.] 0x000000000005a2e8 0.11% 1 osh libc.so.6 [.] 0x0000000000075040 0.11% 1 osh libc.so.6 [.] 0x0000000000075048 0.11% 1 osh libc.so.6 [.] 0x000000000007504d 0.11% 1 osh libc.so.6 [.] 0x00000000000750a2 0.11% 1 osh libc.so.6 [.] 0x00000000000750cc 0.11% 1 osh libc.so.6 [.] 0x0000000000075188 0.11% 1 osh libc.so.6 [.] 0x0000000000075247 0.11% 1 osh libc.so.6 [.] 0x000000000007537d 0.11% 1 osh libc.so.6 [.] 0x0000000000075ac6 0.11% 1 osh libc.so.6 [.] 0x0000000000075c0b 0.11% 1 osh libc.so.6 [.] 0x0000000000075f46 0.11% 1 osh libc.so.6 [.] 0x000000000007666b 0.11% 1 osh libc.so.6 [.] 0x000000000008842d 0.11% 1 osh libc.so.6 [.] 0x000000000008848a 0.11% 1 osh libc.so.6 [.] 0x00000000000884ae 0.11% 1 osh libc.so.6 [.] 0x000000000008e5e0 0.11% 1 osh libc.so.6 [.] 0x000000000008e633 0.11% 1 osh libc.so.6 [.] 0x000000000008fa12 0.11% 1 osh libc.so.6 [.] 0x000000000008fa48 0.11% 1 osh libc.so.6 [.] 0x000000000008fa5a 0.11% 1 osh libc.so.6 [.] 0x00000000000a2726 0.11% 1 osh libc.so.6 [.] 0x00000000000a273f 0.11% 1 osh libc.so.6 [.] 0x00000000000a2a0a 0.11% 1 osh libc.so.6 [.] 0x0000000000199e51 0.11% 1 osh libc.so.6 [.] 0x000000000019d480 0.11% 1 osh libc.so.6 [.] 0x000000000019d494 0.11% 1 osh libc.so.6 [.] 0x000000000019d4a8 0.11% 1 osh libc.so.6 [.] 0x000000000019d4ad 0.11% 1 osh libc.so.6 [.] 0x000000000019d4b6 0.11% 1 osh libc.so.6 [.] 0x00000000001a1004 0.11% 1 osh libc.so.6 [.] 0x00000000001a1014 0.11% 1 osh libc.so.6 [.] 0x00000000001a102d 0.11% 1 osh libc.so.6 [.] 0x00000000001a1118 0.11% 1 osh libstdc++.so.6.0.30 [.] std::__timepunct::__timepunct(std::__timepunct_cache*, unsigned long) 0.11% 1 osh oils-for-unix [.] BigStr::slice(int) 0.11% 1 osh oils-for-unix [.] Dict* Alloc>() 0.11% 1 osh oils-for-unix [.] Dict::find_kv_index(BigStr*) const 0.11% 1 osh oils-for-unix [.] Dict::find_kv_index(BigStr*) const 0.11% 1 osh oils-for-unix [.] Dict::reserve(int) 0.11% 1 osh oils-for-unix [.] List* Alloc>() 0.11% 1 osh oils-for-unix [.] List* Alloc>() 0.11% 1 osh oils-for-unix [.] List::at(int) 0.11% 1 osh oils-for-unix [.] List::pop() [clone .isra.0] 0.11% 1 osh oils-for-unix [.] List::at(int) 0.11% 1 osh oils-for-unix [.] MarkSweepHeap::Collect() 0.11% 1 osh oils-for-unix [.] braces::BraceExpandWords(List*) 0.11% 1 osh oils-for-unix [.] bracket_osh::_ThreeArgs(bracket_osh::_StringWordEmitter*) 0.11% 1 osh oils-for-unix [.] cmd_eval::CommandEvaluator::_EvalCondition(syntax_asdl::condition_t*, syntax_asdl::Token*) 0.11% 1 osh oils-for-unix [.] cmd_eval::CommandEvaluator::_RunSimpleCommand(runtime_asdl::cmd_value_t*, runtime_asdl::CommandStatus*, int) 0.11% 1 osh oils-for-unix [.] consts::BoolArgType(unsigned short) 0.11% 1 osh oils-for-unix [.] consts::LookupNormalBuiltin(BigStr*) 0.11% 1 osh oils-for-unix [.] consts::LookupSpecialBuiltin(BigStr*) 0.11% 1 osh oils-for-unix [.] dev::Tracer::OnBuiltin(int, List*) 0.11% 1 osh oils-for-unix [.] dev::Tracer::OnShAssignment(value_asdl::sh_lvalue_t*, syntax_asdl::assign_op_e, value_asdl::value_t*, int, runtime_asdl::scope_e) 0.11% 1 osh oils-for-unix [.] dev::Tracer::OnSimpleCommand(List*) 0.11% 1 osh oils-for-unix [.] dev::Tracer::_RichTraceBegin(BigStr*) 0.11% 1 osh oils-for-unix [.] flag_util::_CreateStrList(char const**, List*) 0.11% 1 osh oils-for-unix [.] glob_::GlobUnescapeBackslash(BigStr*) 0.11% 1 osh oils-for-unix [.] hash_key(BigStr*) 0.11% 1 osh oils-for-unix [.] hash_key(int) 0.11% 1 osh oils-for-unix [.] memset@plt 0.11% 1 osh oils-for-unix [.] pyos::FlushStdout() 0.11% 1 osh oils-for-unix [.] runtime_asdl::VarSubState* Alloc(bool&&, decltype(nullptr)&&, decltype(nullptr)&&) [clone .isra.0] 0.11% 1 osh oils-for-unix [.] sh_expr_eval::BoolEvaluator::_StringToBigIntOrError(BigStr*, syntax_asdl::loc_t*) 0.11% 1 osh oils-for-unix [.] state::Mem::SetValue(value_asdl::sh_lvalue_t*, value_asdl::value_t*, runtime_asdl::scope_e, int) 0.11% 1 osh oils-for-unix [.] state::MutableOpts::Pop(int) 0.11% 1 osh oils-for-unix [.] state::MutableOpts::Push(int, bool) 0.11% 1 osh oils-for-unix [.] state::ctx_ErrExit::ctx_ErrExit(state::MutableOpts*, bool, syntax_asdl::Token*) 0.11% 1 osh oils-for-unix [.] vm::ctx_FlushStdout::~ctx_FlushStdout() # # (Cannot load tips.txt file, please install perf!) #