Mark Robert Miller created LUCENE-10099:
-------------------------------------------
Summary: Add -Ptests.asyncprofile option.
Key: LUCENE-10099
URL: https://issues.apache.org/jira/browse/LUCENE-10099
Project: Lucene - Core
Issue Type: Test
Components: modules/test-framework
Reporter: Mark Robert Miller
Assignee: Mark Robert Miller
Man, I don't even remember the last time I contributed an issue to Lucene that
was for Lucene. Feels like it has to be near a decade.
I recently finished some work that took quite an investment around automated
performance aids. It wasn't giving me that feeling of satisfaction I faintly
remember though. Yesterday, I was mostly feeling nostalgic about past times
when I would bring up some nasty inefficiency or ugly problem and not hear
about how it doesn't likely matter or doesn't sound right or 'meh' - I'd hear
"omg, you're right, this must be fixed" and then "you're an idiot, it's even
worse than that".
So new little project for today - the first of two things I'd like to
contribute - async profiler support for the tests.profile option.
I have a rough draft, it works roughly as tests.profile but instead of:
{noformat}
PROFILE SUMMARY from 174 events (total: 174)
tests.profile.mode=cpu
tests.profile.count=10
tests.profile.stacksize=1
tests.profile.linenumbers=false
PERCENT CPU SAMPLES STACK
5.17% 9 java.util.zip.Inflater#inflateBytesBytes()
3.45% 6 java.io.FileInputStream#open0()
2.30% 4 java.io.UnixFileSystem#getBooleanAttributes0()
2.30% 4 java.io.RandomAccessFile#readBytes()
1.72% 3 java.io.UnixFileSystem#normalize()
1.72% 3
org.apache.lucene.util.automaton.RunAutomaton#<init>()
1.72% 3 java.util.Arrays#fill()
1.15% 2
java.lang.invoke.DirectMethodHandle$Holder#invokeStatic()
1.15% 2 java.lang.StringLatin1#charAt()
1.15% 2 java.io.DataOutputStream#writeUTF()
{noformat}
you get more like:
{noformat}
PROFILE SUMMARY from 368675 events (total: 368675)
tests.profile.mode=cpu
tests.profile.count=10
tests.profile.stacksize=1
tests.profile.linenumbers=false
PERCENT CPU SAMPLES STACK
3.89% 14353 #SymbolTable::lookup_dynamic()
1.67% 6171 #Interpreter()
1.40% 5175 #InstanceKlass::find_method_index()
1.34% 4958 #__tls_get_addr()
1.13% 4177 #I2C/C2I adapters()
1.09% 4022 #resource_allocate_bytes()
0.69% 2528 #ValueStack::values_do()
0.62% 2298 #no_Java_frame()
0.62% 2281 #ScopeDesc::decode_body()
0.55% 2017 #Dictionary::find()
{noformat}
as well as these additional files shown below. Sampling was a bit intense I
guess, sorry for the slow load on the flame graph ;)
Summary
https://elated-banach-e02e8b.netlify.app/asyncprofiler/hotspot-pid-686723-id-0-20210912-162040.txt
Results Tree
https://elated-banach-e02e8b.netlify.app/asyncprofiler/tree-hotspot-pid-686723-id-0-20210912-162044.html
Results Flame Graph
https://elated-banach-e02e8b.netlify.app/asyncprofiler/flame-hotspot-pid-686723-id-0-20210912-162040.html
--
This message was sent by Atlassian Jira
(v8.3.4#803005)
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]