# To display the perf.data header info, please use --header/--header-only options. # # # Total Lost Samples: 0 # # Samples: 1K of event 'task-clock:ppp' # Event count (approx.): 123800000 # # Overhead Samples Command Shared Object Symbol # ........ ............ ....... .................... ............................................................................................................................................................................................................................................................................................... # 7.75% 96 osh oils-for-unix [.] MarkSweepHeap::Allocate(unsigned long, int*, int*) 3.31% 41 osh oils-for-unix [.] state::Mem::GetValue(BigStr*, runtime_asdl::scope_e) 2.99% 37 osh oils-for-unix [.] MarkSweepHeap::Sweep() 2.83% 35 osh oils-for-unix [.] state::_FrameLookup(Dict*, BigStr*, bool) 2.18% 27 osh oils-for-unix [.] Dict::hash_and_probe(BigStr*) const 2.18% 27 osh oils-for-unix [.] cmd_eval::CommandEvaluator::_DoShAssignment(syntax_asdl::command__ShAssignment*, runtime_asdl::CommandStatus*) 2.10% 26 osh oils-for-unix [.] cmd_eval::CommandEvaluator::_Execute(syntax_asdl::command_t*) 2.10% 26 osh oils-for-unix [.] state::Mem::_ResolveNameOnly(BigStr*, runtime_asdl::scope_e) 2.10% 26 osh oils-for-unix [.] state::Mem::_ResolveNameOrRef(BigStr*, runtime_asdl::scope_e, List*) 1.86% 23 osh oils-for-unix [.] word_eval::AbstractWordEvaluator::_EvalWordPart(syntax_asdl::word_part_t*, List*, int) 1.78% 22 osh oils-for-unix [.] List::reserve(int) [clone .part.0] 1.78% 22 osh oils-for-unix [.] cmd_eval::CommandEvaluator::_Dispatch(syntax_asdl::command_t*, runtime_asdl::CommandStatus*) 1.78% 22 osh oils-for-unix [.] sh_expr_eval::ArithEvaluator::Eval(syntax_asdl::arith_expr_t*) 1.45% 18 osh oils-for-unix [.] MarkSweepHeap::MaybeMarkAndPush(RawObject*) 1.45% 18 osh oils-for-unix [.] MarkSweepHeap::TraceChildren() 1.29% 16 osh oils-for-unix [.] word_eval::AbstractWordEvaluator::_EvalSimpleVarSub(syntax_asdl::SimpleVarSub*, List*, bool) 1.29% 16 osh oils-for-unix [.] word_eval::AbstractWordEvaluator::_PartValsToString(List*, syntax_asdl::CompoundWord*, int, List*) 1.21% 15 osh oils-for-unix [.] state::Mem::ScopesForReading() 1.13% 14 osh oils-for-unix [.] BigStr::hash(unsigned int (*)(char const*, int)) 1.13% 14 osh oils-for-unix [.] List::reserve(int) [clone .part.0] 1.13% 14 osh oils-for-unix [.] split::IfsSplitter::Split(BigStr*, bool) 1.13% 14 osh oils-for-unix [.] state::Mem::SetNamed(value_asdl::LeftName*, value_asdl::value_t*, runtime_asdl::scope_e, int) 1.05% 13 osh oils-for-unix [.] dev::Tracer::_ShTraceBegin() 1.05% 13 osh oils-for-unix [.] state::Mem::SetValue(value_asdl::sh_lvalue_t*, value_asdl::value_t*, runtime_asdl::scope_e, int) 1.05% 13 osh oils-for-unix [.] word_eval::AbstractWordEvaluator::EvalWordSequence2(List*, bool, bool) 1.05% 13 osh oils-for-unix [.] word_eval::AbstractWordEvaluator::_EvalWordFrame(List*, List*) 0.97% 12 osh oils-for-unix [.] bracket_osh::Test::Run(runtime_asdl::cmd_value__Argv*) 0.97% 12 osh oils-for-unix [.] executor::ShellExecutor::PopProcessSub(runtime_asdl::StatusArray*) 0.97% 12 osh oils-for-unix [.] word_::FastStrEval(syntax_asdl::CompoundWord*) 0.81% 10 osh oils-for-unix [.] Dict::find_kv_index(BigStr*) const 0.81% 10 osh oils-for-unix [.] split::_SpansToParts(BigStr*, List*>*) 0.73% 9 osh oils-for-unix [.] BigStr::replace(BigStr*, BigStr*, int) 0.73% 9 osh oils-for-unix [.] List::at(int) 0.73% 9 osh oils-for-unix [.] braces::BraceExpandWords(List*) 0.73% 9 osh oils-for-unix [.] bracket_osh::_StringWordEmitter::ReadWord(types_asdl::lex_mode_e) 0.73% 9 osh oils-for-unix [.] cmd_eval::CommandEvaluator::RunPendingTraps() 0.73% 9 osh oils-for-unix [.] sh_expr_eval::ArithEvaluator::EvalToBigInt(syntax_asdl::arith_expr_t*) 0.73% 9 osh oils-for-unix [.] word_eval::AbstractWordEvaluator::EvalRhsWord(syntax_asdl::rhs_word_t*) 0.65% 8 osh oils-for-unix [.] sh_expr_eval::_ParseOshInteger(BigStr*, syntax_asdl::loc_t*) 0.65% 8 osh oils-for-unix [.] word_eval::_ValueToPartValue(value_asdl::value_t*, bool, syntax_asdl::word_part_t*) 0.57% 7 osh libc.so.6 [.] __errno_location 0.57% 7 osh oils-for-unix [.] List*>::append(Tuple2*) 0.57% 7 osh oils-for-unix [.] List::reserve(int) [clone .part.0] 0.57% 7 osh oils-for-unix [.] match::MatchShNumberToken(BigStr*, int) 0.57% 7 osh oils-for-unix [.] trap_osh::TrapState::GetPendingTraps() 0.48% 6 osh oils-for-unix [.] BigStr::slice(int, int) 0.48% 6 osh oils-for-unix [.] List::at(int) 0.48% 6 osh oils-for-unix [.] List*>::at(int) 0.48% 6 osh oils-for-unix [.] List::append(executor::_ProcessSubFrame*) 0.48% 6 osh oils-for-unix [.] List::pop() 0.48% 6 osh oils-for-unix [.] List::reserve(int) [clone .part.0] 0.48% 6 osh oils-for-unix [.] cmd_eval::CommandEvaluator::_MaybeRunDebugTrap() 0.48% 6 osh oils-for-unix [.] executor::ShellExecutor::PushProcessSub() 0.48% 6 osh oils-for-unix [.] match::LooksLikeInteger(BigStr*) 0.48% 6 osh oils-for-unix [.] runtime_asdl::VarSubState* Alloc(bool&&, decltype(nullptr)&&, decltype(nullptr)&&) [clone .isra.0] 0.48% 6 osh oils-for-unix [.] state::ValueIsInvokableObj(value_asdl::value_t*) 0.48% 6 osh oils-for-unix [.] word_eval::AbstractWordEvaluator::_ProcessUndef(value_asdl::value_t*, syntax_asdl::Token*, runtime_asdl::VarSubState*) 0.40% 5 osh libc.so.6 [.] _IO_default_xsputn 0.40% 5 osh oils-for-unix [.] BigStr::join(List*) 0.40% 5 osh oils-for-unix [.] List::set(int, int) 0.40% 5 osh oils-for-unix [.] List* Alloc>() 0.40% 5 osh oils-for-unix [.] List::append(runtime_asdl::StatusArray*) 0.40% 5 osh oils-for-unix [.] List::at(int) 0.40% 5 osh oils-for-unix [.] consts::IfsEdge(int, int) 0.40% 5 osh oils-for-unix [.] glob_::GlobUnescape(BigStr*) 0.40% 5 osh oils-for-unix [.] keys_equal(BigStr*, BigStr*) 0.40% 5 osh oils-for-unix [.] match::BracketBinary(BigStr*) 0.40% 5 osh oils-for-unix [.] runtime_asdl::Piece* Alloc(BigStr*&, bool&, bool&&) 0.40% 5 osh oils-for-unix [.] sh_expr_eval::BoolEvaluator::EvalB(syntax_asdl::bool_expr_t*) 0.40% 5 osh oils-for-unix [.] split::SplitContext::SplitForWordEval(BigStr*, BigStr*) 0.40% 5 osh oils-for-unix [.] value_asdl::LeftName* Alloc(BigStr*&, syntax_asdl::Token*&) 0.40% 5 osh oils-for-unix [.] word_eval::AbstractWordEvaluator::EvalWordToString(syntax_asdl::word_t*, int) 0.40% 5 osh oils-for-unix [.] word_eval::AbstractWordEvaluator::_EvalWordToParts(syntax_asdl::CompoundWord*, List*, int) 0.32% 4 osh [kernel.kallsyms] [k] 0xffffffffb16e4419 0.32% 4 osh libc.so.6 [.] _IO_fflush 0.32% 4 osh oils-for-unix [.] Dict::hash_and_probe(BigStr*) const 0.32% 4 osh oils-for-unix [.] Dict::hash_and_probe(int) const 0.32% 4 osh oils-for-unix [.] List*>::reserve(int) [clone .part.0] 0.32% 4 osh oils-for-unix [.] List::at(int) 0.32% 4 osh oils-for-unix [.] List::append(mylib::BufWriter*) 0.32% 4 osh oils-for-unix [.] List::reserve(int) [clone .part.0] 0.32% 4 osh oils-for-unix [.] bracket_osh::_ThreeArgs(bracket_osh::_StringWordEmitter*) 0.32% 4 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.32% 4 osh oils-for-unix [.] lexer::LazyStr(syntax_asdl::Token*) 0.32% 4 osh oils-for-unix [.] match::BracketUnary(BigStr*) 0.32% 4 osh oils-for-unix [.] sh_expr_eval::ArithEvaluator::_ValToIntOrError(value_asdl::value_t*, syntax_asdl::arith_expr_t*) 0.32% 4 osh oils-for-unix [.] split::SplitContext::_GetSplitter(BigStr*) 0.32% 4 osh oils-for-unix [.] state::Procs::GetInvokable(BigStr*) 0.32% 4 osh oils-for-unix [.] syntax_asdl::loc__Arith* Alloc(syntax_asdl::arith_expr_t*&) 0.32% 4 osh oils-for-unix [.] ui::ctx_Location::~ctx_Location() 0.24% 3 osh [kernel.kallsyms] [k] 0xffffffffb1660137 0.24% 3 osh libc.so.6 [.] 0x0000000000047594 0.24% 3 osh libc.so.6 [.] 0x0000000000047625 0.24% 3 osh libc.so.6 [.] 0x0000000000047654 0.24% 3 osh libc.so.6 [.] 0x00000000000477e0 0.24% 3 osh libc.so.6 [.] 0x00000000001a0fa4 0.24% 3 osh oils-for-unix [.] List::pop() 0.24% 3 osh oils-for-unix [.] List* Alloc>() 0.24% 3 osh oils-for-unix [.] List* Alloc>() 0.24% 3 osh oils-for-unix [.] StringToInt64(char const*, int, int, long*) 0.24% 3 osh oils-for-unix [.] StripAny(BigStr*, StripWhere, int) 0.24% 3 osh oils-for-unix [.] cmd_eval::CommandEvaluator::_DoSimple(syntax_asdl::command__Simple*, runtime_asdl::CommandStatus*) 0.24% 3 osh oils-for-unix [.] cmd_eval::CommandEvaluator::_ExecuteList(List*) 0.24% 3 osh oils-for-unix [.] cmd_eval::CommandEvaluator::_LeafTick() 0.24% 3 osh oils-for-unix [.] consts::LookupNormalBuiltin(BigStr*) 0.24% 3 osh oils-for-unix [.] hash_key(int) 0.24% 3 osh oils-for-unix [.] mylib::BufWriter::getvalue() 0.24% 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.24% 3 osh oils-for-unix [.] sh_expr_eval::ArithEvaluator::EvalShellLhs(syntax_asdl::sh_lhs_t*, runtime_asdl::scope_e) 0.24% 3 osh oils-for-unix [.] sh_expr_eval::BoolEvaluator::_EvalCompoundWord(syntax_asdl::word_t*, int) 0.24% 3 osh oils-for-unix [.] word_eval::AbstractWordEvaluator::_DetectAssignBuiltinStr(BigStr*, List*, int) 0.24% 3 osh oils-for-unix [.] word_eval::AbstractWordEvaluator::_JoinArray(value_asdl::value_t*, bool, runtime_asdl::VarSubState*) 0.24% 3 osh oils-for-unix [.] word_eval::_BackslashEscape(BigStr*) 0.24% 3 osh oils-for-unix [.] word_eval::_MakeWordFrames(List*) 0.16% 2 osh [kernel.kallsyms] [k] 0xffffffffb06b4b12 0.16% 2 osh libc.so.6 [.] strtoimax 0.16% 2 osh libc.so.6 [.] 0x0000000000075fca 0.16% 2 osh libc.so.6 [.] 0x000000000008fa43 0.16% 2 osh libc.so.6 [.] 0x000000000019d43c 0.16% 2 osh libc.so.6 [.] 0x00000000001a0faa 0.16% 2 osh oils-for-unix [.] Dict::find_kv_index(BigStr*) const 0.16% 2 osh oils-for-unix [.] Dict::hash_and_probe(BigStr*) const 0.16% 2 osh oils-for-unix [.] Dict::reserve(int) 0.16% 2 osh oils-for-unix [.] List* Alloc>() 0.16% 2 osh oils-for-unix [.] MarkSweepHeap::MaybeCollect() 0.16% 2 osh oils-for-unix [.] cmd_eval::CommandEvaluator::_RunSimpleCommand(runtime_asdl::cmd_value_t*, runtime_asdl::CommandStatus*, int) 0.16% 2 osh oils-for-unix [.] cmd_eval::CommandEvaluator::_StrictErrExitList(List*) 0.16% 2 osh oils-for-unix [.] dev::Tracer::_RichTraceBegin(BigStr*) 0.16% 2 osh oils-for-unix [.] executor::ShellExecutor::_RunSimpleCommand(BigStr*, syntax_asdl::loc_t*, runtime_asdl::cmd_value__Argv*, runtime_asdl::CommandStatus*, int) 0.16% 2 osh oils-for-unix [.] mops::FromStr2(BigStr*, int) 0.16% 2 osh oils-for-unix [.] mylib::BufWriter::EnsureMoreSpace(int) 0.16% 2 osh oils-for-unix [.] sh_expr_eval::ArithEvaluator::StringToBigInt(BigStr*, syntax_asdl::loc_t*) 0.16% 2 osh oils-for-unix [.] sh_expr_eval::BoolEvaluator::_StringToBigIntOrError(BigStr*, syntax_asdl::loc_t*) 0.16% 2 osh oils-for-unix [.] state::ctx_ErrExit::ctx_ErrExit(state::MutableOpts*, bool, syntax_asdl::Token*) 0.16% 2 osh oils-for-unix [.] syntax_asdl::loc__Word* Alloc(syntax_asdl::word_t*&) 0.16% 2 osh oils-for-unix [.] trap_osh::TrapState::GetHook(BigStr*) 0.16% 2 osh oils-for-unix [.] vm::_Executor::RunSimpleCommand(runtime_asdl::cmd_value__Argv*, runtime_asdl::CommandStatus*, int) 0.16% 2 osh oils-for-unix [.] vm::_Executor::_RunBuiltinProc(vm::_Builtin*, runtime_asdl::cmd_value__Argv*) 0.08% 1 osh [kernel.kallsyms] [k] 0xffffffffb06b4b67 0.08% 1 osh [kernel.kallsyms] [k] 0xffffffffb06f3545 0.08% 1 osh [kernel.kallsyms] [k] 0xffffffffb07d3479 0.08% 1 osh [kernel.kallsyms] [k] 0xffffffffb0969709 0.08% 1 osh [kernel.kallsyms] [k] 0xffffffffb096c9d3 0.08% 1 osh [kernel.kallsyms] [k] 0xffffffffb097dd07 0.08% 1 osh [kernel.kallsyms] [k] 0xffffffffb099f720 0.08% 1 osh [kernel.kallsyms] [k] 0xffffffffb09a5bb5 0.08% 1 osh [kernel.kallsyms] [k] 0xffffffffb09c3a7c 0.08% 1 osh [kernel.kallsyms] [k] 0xffffffffb09c7d8d 0.08% 1 osh [kernel.kallsyms] [k] 0xffffffffb09ceb93 0.08% 1 osh [kernel.kallsyms] [k] 0xffffffffb09d6435 0.08% 1 osh [kernel.kallsyms] [k] 0xffffffffb09e949e 0.08% 1 osh [kernel.kallsyms] [k] 0xffffffffb0a52426 0.08% 1 osh [kernel.kallsyms] [k] 0xffffffffb0a651a1 0.08% 1 osh [kernel.kallsyms] [k] 0xffffffffb0a674ef 0.08% 1 osh [kernel.kallsyms] [k] 0xffffffffb0ab525a 0.08% 1 osh [kernel.kallsyms] [k] 0xffffffffb0b8175c 0.08% 1 osh [kernel.kallsyms] [k] 0xffffffffb0b84933 0.08% 1 osh [kernel.kallsyms] [k] 0xffffffffb0b89e79 0.08% 1 osh [kernel.kallsyms] [k] 0xffffffffb1145550 0.08% 1 osh [kernel.kallsyms] [k] 0xffffffffb16408dd 0.08% 1 osh [kernel.kallsyms] [k] 0xffffffffb1640992 0.08% 1 osh [kernel.kallsyms] [k] 0xffffffffb164b02b 0.08% 1 osh [kernel.kallsyms] [k] 0xffffffffb1650a44 0.08% 1 osh [kernel.kallsyms] [k] 0xffffffffb165c720 0.08% 1 osh [kernel.kallsyms] [k] 0xffffffffb1660716 0.08% 1 osh [kernel.kallsyms] [k] 0xffffffffb16d764b 0.08% 1 osh [kernel.kallsyms] [k] 0xffffffffb190410b 0.08% 1 osh ld-linux-x86-64.so.2 [.] 0x000000000000b734 0.08% 1 osh ld-linux-x86-64.so.2 [.] 0x000000000000c12d 0.08% 1 osh ld-linux-x86-64.so.2 [.] 0x000000000000c14e 0.08% 1 osh ld-linux-x86-64.so.2 [.] 0x0000000000011443 0.08% 1 osh ld-linux-x86-64.so.2 [.] 0x000000000002a866 0.08% 1 osh libc.so.6 [.] __snprintf_chk 0.08% 1 osh libc.so.6 [.] 0x000000000003d80d 0.08% 1 osh libc.so.6 [.] 0x0000000000047548 0.08% 1 osh libc.so.6 [.] 0x0000000000047561 0.08% 1 osh libc.so.6 [.] 0x0000000000047630 0.08% 1 osh libc.so.6 [.] 0x0000000000047657 0.08% 1 osh libc.so.6 [.] 0x000000000004765a 0.08% 1 osh libc.so.6 [.] 0x000000000004765d 0.08% 1 osh libc.so.6 [.] 0x0000000000047665 0.08% 1 osh libc.so.6 [.] 0x0000000000047693 0.08% 1 osh libc.so.6 [.] 0x00000000000477cf 0.08% 1 osh libc.so.6 [.] 0x00000000000477e1 0.08% 1 osh libc.so.6 [.] 0x000000000005a2d0 0.08% 1 osh libc.so.6 [.] 0x000000000005a2f2 0.08% 1 osh libc.so.6 [.] 0x000000000007505f 0.08% 1 osh libc.so.6 [.] 0x00000000000750a2 0.08% 1 osh libc.so.6 [.] 0x00000000000750d0 0.08% 1 osh libc.so.6 [.] 0x00000000000751c2 0.08% 1 osh libc.so.6 [.] 0x0000000000075243 0.08% 1 osh libc.so.6 [.] 0x0000000000075247 0.08% 1 osh libc.so.6 [.] 0x0000000000075a11 0.08% 1 osh libc.so.6 [.] 0x0000000000075cc3 0.08% 1 osh libc.so.6 [.] 0x000000000007666b 0.08% 1 osh libc.so.6 [.] 0x0000000000088417 0.08% 1 osh libc.so.6 [.] 0x000000000008e62b 0.08% 1 osh libc.so.6 [.] 0x000000000008e6b8 0.08% 1 osh libc.so.6 [.] 0x000000000008fa03 0.08% 1 osh libc.so.6 [.] 0x000000000008fa2b 0.08% 1 osh libc.so.6 [.] 0x000000000008fa5a 0.08% 1 osh libc.so.6 [.] 0x00000000000a26cc 0.08% 1 osh libc.so.6 [.] 0x00000000000a27e8 0.08% 1 osh libc.so.6 [.] 0x0000000000199a80 0.08% 1 osh libc.so.6 [.] 0x0000000000199d7d 0.08% 1 osh libc.so.6 [.] 0x0000000000199de2 0.08% 1 osh libc.so.6 [.] 0x0000000000199de5 0.08% 1 osh libc.so.6 [.] 0x000000000019d40a 0.08% 1 osh libc.so.6 [.] 0x000000000019d428 0.08% 1 osh libc.so.6 [.] 0x000000000019d42d 0.08% 1 osh libc.so.6 [.] 0x000000000019d801 0.08% 1 osh libc.so.6 [.] 0x00000000001a0f90 0.08% 1 osh libc.so.6 [.] 0x00000000001a0f94 0.08% 1 osh libstdc++.so.6.0.30 [.] std::__cxx11::collate::do_transform(char const*, char const*) const 0.08% 1 osh libtinfo.so.6.3 [.] 0x000000000000f342 0.08% 1 osh oils-for-unix [.] BigStr::replace(BigStr*, BigStr*) 0.08% 1 osh oils-for-unix [.] Dict::find_kv_index(BigStr*) const 0.08% 1 osh oils-for-unix [.] Dict::find_kv_index(BigStr*) const 0.08% 1 osh oils-for-unix [.] Dict::find_kv_index(BigStr*) const 0.08% 1 osh oils-for-unix [.] Dict::set(int, BigStr*) 0.08% 1 osh oils-for-unix [.] Dict::at(int) const 0.08% 1 osh oils-for-unix [.] List*>* NewList*>(List*, int) 0.08% 1 osh oils-for-unix [.] List*>::at(int) 0.08% 1 osh oils-for-unix [.] List::reserve(int) [clone .part.0] 0.08% 1 osh oils-for-unix [.] List* Alloc>() 0.08% 1 osh oils-for-unix [.] List* Alloc>() 0.08% 1 osh oils-for-unix [.] List* Alloc>() 0.08% 1 osh oils-for-unix [.] cmd_eval::CommandEvaluator::_DoWhileUntil(syntax_asdl::command__WhileUntil*) 0.08% 1 osh oils-for-unix [.] consts::LookupAssignBuiltin(BigStr*) 0.08% 1 osh oils-for-unix [.] dev::Tracer::OnBuiltin(int, List*) 0.08% 1 osh oils-for-unix [.] dev::Tracer::OnSimpleCommand(List*) 0.08% 1 osh oils-for-unix [.] flag_util::_CreateStrList(char const**, List*) 0.08% 1 osh oils-for-unix [.] flag_util::_DoesNotAccept(runtime_asdl::ProcArgs*) 0.08% 1 osh oils-for-unix [.] glob_::LooksLikeGlob(BigStr*) 0.08% 1 osh oils-for-unix [.] hash_key(BigStr*) 0.08% 1 osh oils-for-unix [.] hay_ysh::HayState::Resolve(BigStr*) 0.08% 1 osh oils-for-unix [.] match::BracketOther(BigStr*) 0.08% 1 osh oils-for-unix [.] mylib::BufWriter* Alloc() 0.08% 1 osh oils-for-unix [.] mylib::BufWriter::write(BigStr*) 0.08% 1 osh oils-for-unix [.] mylib::JoinBytes(List*) 0.08% 1 osh oils-for-unix [.] state::Mem::SetTokenForLine(syntax_asdl::Token*) 0.08% 1 osh oils-for-unix [.] state::MutableOpts::Push(int, bool) 0.08% 1 osh oils-for-unix [.] str_equals0(char const*, BigStr*) 0.08% 1 osh oils-for-unix [.] value_asdl::value__Str* Alloc(BigStr*&&) 0.08% 1 osh oils-for-unix [.] word_eval::_DetectMetaBuiltinStr(BigStr*) # # (Cannot load tips.txt file, please install perf!) #