Skip to content

[MONO] Add JIT_CODE_DEBUG_INFO record functionality for Jitdump - #85107

Merged
fanyang-mono merged 8 commits into
dotnet:mainfrom
saitama951:main
May 17, 2023
Merged

[MONO] Add JIT_CODE_DEBUG_INFO record functionality for Jitdump#85107
fanyang-mono merged 8 commits into
dotnet:mainfrom
saitama951:main

Conversation

@saitama951

@saitama951saitama951 commented Apr 20, 2023

Copy link
Copy Markdown
Contributor

This is related to #36774 . added support for JIT_CODE_DEBUG_INFO record which helps to annotate source code in perf.

Changed the jitdump version to 1 as the perf sources expect version 1

https://github.com/torvalds/linux/blob/master/tools/perf/util/jitdump.h#L25

Example use:-
MONO_ENV_OPTIONS="--jitdump" perf record -k 1 dotnet <path/to/binary>
perf inject --jit -i perf.data -o perf.jit.data
perf report -i perf.jit.data

cc: @fanyang-mono

@ghostghost added area-Codegen-JIT-mono community-contribution Indicates that the PR has been added by a community member labels Apr 20, 2023
record.code_index = ++code_index;

// TODO: write debugInfo and unwindInfo immediately before the JitCodeLoadRecord (while lock is held).
DebugEntry ent;

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This should follow the mono coding conventions, see the rest of the file for examples.

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

done. let me know if there is anything else

@saitama951saitama951 left a comment

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

changed the style to adhere to the mono coding conventions

record.code_index = ++code_index;

// TODO: write debugInfo and unwindInfo immediately before the JitCodeLoadRecord (while lock is held).
DebugEntry ent;

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

done. let me know if there is anything else

@saitama951
saitama951 requested a review from vargazApril 21, 2023 04:52

@fanyang-monofanyang-mono left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Please go through your change and fix the coding style. I've pointed out a few examples for you.

Comment threadsrc/mono/mono/mini/mini-runtime.c Outdated
guint32 line;
guint32 discrim;
char name[];
}DebugEntry;

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
}DebugEntry;
}DebugEntry;

Comment threadsrc/mono/mono/mini/mini-runtime.c Outdated
guint64 code_addr;
guint64 nr_entry;
DebugEntry debug_entry[];
}JitCodeDebug;

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
}JitCodeDebug;
}JitCodeDebug;

Comment threadsrc/mono/mono/mini/mini-runtime.c Outdated
DebugEntry debug_entry[];
}JitCodeDebug;

static void add_basic_JitCodeDebug_info(JitCodeDebug *record);

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
staticvoidadd_basic_JitCodeDebug_info(JitCodeDebug*record);
staticvoidadd_basic_JitCodeDebug_info(JitCodeDebug*record);

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

In mono code base, we add a space between the function name and the "(". Please follow this function call style for all the code change in this PR.

Comment threadsrc/mono/mono/mini/mini-runtime.c Outdated
rec.code_addr = (guint64)dmji->code_start;
rec.header.total_size = sizeof(rec) + sizeof(ent) + 1;
rec.nr_entry=1;
for(i=0;i < dmji->num_line_numbers;++i){

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Fix code style

Comment threadsrc/mono/mono/mini/mini-runtime.c Outdated

loc = mono_debug_lookup_source_location_by_il(jinfo->d.method,dmji->line_numbers[i].il_offset,NULL);

if(!(loc)

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
if(!(loc)
if(!loc)

@saitama951

Copy link
Copy Markdown
ContributorAuthor

Please go through your change and fix the coding style. I've pointed out a few examples for you.

Thank you for helping me out with the code style. I have made the changes accordingly.

@saitama951

saitama951 commented May 4, 2023

Copy link
Copy Markdown
ContributorAuthor

@fanyang-mono is there any other changes required to be made?
maybe we can merge the code?

@directhex

Copy link
Copy Markdown
Contributor

@vargaz@lambdageek can someone see if this is ready to merge now?

@fanyang-mono
fanyang-mono merged commit a5a485c into dotnet:mainMay 17, 2023
@shivanirmishra

shivanirmishra commented May 25, 2023

Copy link
Copy Markdown

@fanyang-mono
The fix did not work for me.
The steps we tried are:

1) dotnet build
2) MONO_ENV_OPTIONS="--jitmap --jitdump" perf record -k 1 dotnet run
3) perf inject --jit -i perf.data -o perf.jit.data
4) perf report -i perf.jit.data

It's creating multiple sets of .map and .dump files in the /tmp/ folder for one particular workload.

Error:
objdump: /tmp/perf-886285.map: File format not recognized

Perf tool is able to read .map files to do symbol resolution and show the data. And due to this, we are able to see the functions in the profile but not the annotations inside that which requires a .dump file.

@saitama951

saitama951 commented May 26, 2023

Copy link
Copy Markdown
ContributorAuthor

@shivanirmishra The runtime should generate the .dump file. can you cross check that under the /tmp/?
if that is present can you check if the dumps are being read by using the strace?

I faced a similar issue and fixed the same : #82520

@shivanirmishra

Copy link
Copy Markdown

Hi @saitama951, yes runtime is generating the .dump file in the/tmp/ folder.
But Strace is not showing any references to dump files.
The observations we had are with .NET7.0 so is the above fix available only on .NET8 or later?

@saitama951

Copy link
Copy Markdown
ContributorAuthor

@shivanirmishra the fix should be there in .NET 8 preview 4 or you can cherry pick the commit.

@shivanirmishra

Copy link
Copy Markdown

@saitama951
We tried with .NET8 Preview 4, but getting the below issue after using perf inject:
image
Also when we are doing Strace on the same, we can see the MMAP calls there:
image
So, what can cause this wrong jitdump version 2, expected 1 issue in perf inject?

@saitama951

saitama951 commented May 31, 2023

Copy link
Copy Markdown
ContributorAuthor

@shivanirmishra I have fixed the wrong versioning of jitdump in the current PR itself, probably this fix isn't incorporated in this release I guess , I would suggest you can build dotnet from source that should work fine.

@shivanirmishra

Copy link
Copy Markdown

Hi @saitama951, thank you for your help.
This fix is working for the sample dotnet code.
But while building dotnet for the workload from https://github.com/dotnet/performance, we are facing the below issues with the power system:
image
Any suggestion regarding the above error?
Also, I have changed the target frameworks to .net8 from .net7.

@fanyang-mono

Copy link
Copy Markdown
Member

/backport to release/7.0-staging

@github-actions

Copy link
Copy Markdown
Contributor

Started backporting to release/7.0-staging: https://github.com/dotnet/runtime/actions/runs/5248244227

@shivanirmishra

Copy link
Copy Markdown

@saitama951@fanyang-mono
We are facing the above issue on .net8 on power, so will this backporting to 7.0 fix the issue on .net8 as well?

@saitama951

Copy link
Copy Markdown
ContributorAuthor

@shivanirmishra It seems source code annotation fails on top of the BenchmarkDotnet library. it works for sample programs without the BDN. I have been manually looking into the jitted-so's, everything looks good there as well.

@shivanirmishra

Copy link
Copy Markdown

Thanks @saitama951
It works for other workloads that run for a shorter duration.
But if we are trying to run a longer workload, then sometimes it's showing "unknown" in the profile on both X86 and Power systems.

For Example: after running the BinaryTrees_5 workload from https://github.com/dotnet/performance, we get the below profiles.

Before Inject:
image
After Inject:
image

@fanyang-mono

Copy link
Copy Markdown
Member

@saitama951@fanyang-mono We are facing the above issue on .net8 on power, so will this backporting to 7.0 fix the issue on .net8 as well?

Yes, I am working on backporting the fixes to regressions to 7.0 now.

@fanyang-mono

Copy link
Copy Markdown
Member

@shivanirmishra We will get this fix in the next possible servicing release.

@shivanirmishra

Copy link
Copy Markdown

@saitama951@fanyang-mono
The above fix is working for some applications but not for all.
For example, It's not working if we increase the no of iterations for the same application

This is the profile with 100 iterations of some ml.net workload:

image

This is the profile with 10k iterations of the same workload:

image

The above profiles are after perf inject.

Any suggestions or ideas for why this is not working with larger overhead?

@saitama951

Copy link
Copy Markdown
ContributorAuthor

@shivanirmishra I have proposed the fix for the issue that you were facing.

#88373

@shivanirmishra

Copy link
Copy Markdown

Hi @saitama951@fanyang-mono
This is another sample code for matrix multiplication, in which we are seeing the same above issue.

MONO_ENV_OPTIONS="--jitmap --jitdump" perf record -k 1 /home/user/dotnet run

Dimension of the matrix: 2000x3 and 3x2000, and running the MultiplyMatrices function once.

perf Report -i perf.data

image

perf inject -j -i ./perf.data -o ./perf.jit.data

perf report -i perf.jit.data

image

We are not able to see the main function MultiplyMatrices anywhere in the profile.
And wherever we are seeing the project name (new-matrix) as a command in the profile, we don’t see any functions/annotations for some so it might be splitting the main function into some parts and we are not able to resolve the same.

image

@saitama951

saitama951 commented Jul 4, 2023

Copy link
Copy Markdown
ContributorAuthor

@shivanirmishra have you applied the diff changes ?

@shivanirmishra

Copy link
Copy Markdown

@saitama951 Yes, It's working.
Thank you.

@ghostghost locked as resolved and limited conversation to collaborators Aug 5, 2023
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

area-Codegen-JIT-monocommunity-contributionIndicates that the PR has been added by a community member

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants

@saitama951@directhex@shivanirmishra@fanyang-mono@vargaz
, 'i'); if (__m === '*' || __re.test(location.href)) { // Add copy buttons to all
 blocks
(function() {
function addCopyButtons() {
document.querySelectorAll('pre code').forEach(function(codeBlock) {
if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;
codeBlock.parentElement.setAttribute('data-copy-added', 'true');
var btn = document.createElement('button');
btn.textContent = 'Copy';
btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';
btn.onmouseover = function() { this.style.opacity = '1'; };
btn.onmouseout = function() { this.style.opacity = '0.7'; };
btn.onclick = function() {
navigator.clipboard.writeText(codeBlock.textContent).then(function() {
btn.textContent = 'Copied!';
setTimeout(function() { btn.textContent = 'Copy'; }, 1500);
});
};
codeBlock.parentElement.style.position = 'relative';
codeBlock.parentElement.appendChild(btn);
});
}
addCopyButtons();
// Re-run on dynamic content
var observer = new MutationObserver(addCopyButtons);
observer.observe(document.body, { childList: true, subtree: true });
})();
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
[MONO] Add JIT_CODE_DEBUG_INFO record functionality for Jitdump by saitama951 · Pull Request #85107 · dotnet/runtime · GitHub
Skip to content

[MONO] Add JIT_CODE_DEBUG_INFO record functionality for Jitdump - #85107

Merged
fanyang-mono merged 8 commits into
dotnet:mainfrom
saitama951:main
May 17, 2023
Merged

[MONO] Add JIT_CODE_DEBUG_INFO record functionality for Jitdump#85107
fanyang-mono merged 8 commits into
dotnet:mainfrom
saitama951:main

Conversation

@saitama951

@saitama951saitama951 commented Apr 20, 2023

Copy link
Copy Markdown
Contributor

This is related to #36774 . added support for JIT_CODE_DEBUG_INFO record which helps to annotate source code in perf.

Changed the jitdump version to 1 as the perf sources expect version 1

https://github.com/torvalds/linux/blob/master/tools/perf/util/jitdump.h#L25

Example use:-
MONO_ENV_OPTIONS="--jitdump" perf record -k 1 dotnet <path/to/binary>
perf inject --jit -i perf.data -o perf.jit.data
perf report -i perf.jit.data

cc: @fanyang-mono

@ghostghost added area-Codegen-JIT-mono community-contribution Indicates that the PR has been added by a community member labels Apr 20, 2023
record.code_index = ++code_index;

// TODO: write debugInfo and unwindInfo immediately before the JitCodeLoadRecord (while lock is held).
DebugEntry ent;

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This should follow the mono coding conventions, see the rest of the file for examples.

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

done. let me know if there is anything else

@saitama951saitama951 left a comment

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

changed the style to adhere to the mono coding conventions

record.code_index = ++code_index;

// TODO: write debugInfo and unwindInfo immediately before the JitCodeLoadRecord (while lock is held).
DebugEntry ent;

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

done. let me know if there is anything else

@saitama951
saitama951 requested a review from vargazApril 21, 2023 04:52

@fanyang-monofanyang-mono left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Please go through your change and fix the coding style. I've pointed out a few examples for you.

Comment threadsrc/mono/mono/mini/mini-runtime.c Outdated
guint32 line;
guint32 discrim;
char name[];
}DebugEntry;

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
}DebugEntry;
}DebugEntry;

Comment threadsrc/mono/mono/mini/mini-runtime.c Outdated
guint64 code_addr;
guint64 nr_entry;
DebugEntry debug_entry[];
}JitCodeDebug;

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
}JitCodeDebug;
}JitCodeDebug;

Comment threadsrc/mono/mono/mini/mini-runtime.c Outdated
DebugEntry debug_entry[];
}JitCodeDebug;

static void add_basic_JitCodeDebug_info(JitCodeDebug *record);

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
staticvoidadd_basic_JitCodeDebug_info(JitCodeDebug*record);
staticvoidadd_basic_JitCodeDebug_info(JitCodeDebug*record);

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

In mono code base, we add a space between the function name and the "(". Please follow this function call style for all the code change in this PR.

Comment threadsrc/mono/mono/mini/mini-runtime.c Outdated
rec.code_addr = (guint64)dmji->code_start;
rec.header.total_size = sizeof(rec) + sizeof(ent) + 1;
rec.nr_entry=1;
for(i=0;i < dmji->num_line_numbers;++i){

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Fix code style

Comment threadsrc/mono/mono/mini/mini-runtime.c Outdated

loc = mono_debug_lookup_source_location_by_il(jinfo->d.method,dmji->line_numbers[i].il_offset,NULL);

if(!(loc)

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
if(!(loc)
if(!loc)

@saitama951

Copy link
Copy Markdown
ContributorAuthor

Please go through your change and fix the coding style. I've pointed out a few examples for you.

Thank you for helping me out with the code style. I have made the changes accordingly.

@saitama951

saitama951 commented May 4, 2023

Copy link
Copy Markdown
ContributorAuthor

@fanyang-mono is there any other changes required to be made?
maybe we can merge the code?

@directhex

Copy link
Copy Markdown
Contributor

@vargaz@lambdageek can someone see if this is ready to merge now?

@fanyang-mono
fanyang-mono merged commit a5a485c into dotnet:mainMay 17, 2023
@shivanirmishra

shivanirmishra commented May 25, 2023

Copy link
Copy Markdown

@fanyang-mono
The fix did not work for me.
The steps we tried are:

1) dotnet build
2) MONO_ENV_OPTIONS="--jitmap --jitdump" perf record -k 1 dotnet run
3) perf inject --jit -i perf.data -o perf.jit.data
4) perf report -i perf.jit.data

It's creating multiple sets of .map and .dump files in the /tmp/ folder for one particular workload.

Error:
objdump: /tmp/perf-886285.map: File format not recognized

Perf tool is able to read .map files to do symbol resolution and show the data. And due to this, we are able to see the functions in the profile but not the annotations inside that which requires a .dump file.

@saitama951

saitama951 commented May 26, 2023

Copy link
Copy Markdown
ContributorAuthor

@shivanirmishra The runtime should generate the .dump file. can you cross check that under the /tmp/?
if that is present can you check if the dumps are being read by using the strace?

I faced a similar issue and fixed the same : #82520

@shivanirmishra

Copy link
Copy Markdown

Hi @saitama951, yes runtime is generating the .dump file in the/tmp/ folder.
But Strace is not showing any references to dump files.
The observations we had are with .NET7.0 so is the above fix available only on .NET8 or later?

@saitama951

Copy link
Copy Markdown
ContributorAuthor

@shivanirmishra the fix should be there in .NET 8 preview 4 or you can cherry pick the commit.

@shivanirmishra

Copy link
Copy Markdown

@saitama951
We tried with .NET8 Preview 4, but getting the below issue after using perf inject:
image
Also when we are doing Strace on the same, we can see the MMAP calls there:
image
So, what can cause this wrong jitdump version 2, expected 1 issue in perf inject?

@saitama951

saitama951 commented May 31, 2023

Copy link
Copy Markdown
ContributorAuthor

@shivanirmishra I have fixed the wrong versioning of jitdump in the current PR itself, probably this fix isn't incorporated in this release I guess , I would suggest you can build dotnet from source that should work fine.

@shivanirmishra

Copy link
Copy Markdown

Hi @saitama951, thank you for your help.
This fix is working for the sample dotnet code.
But while building dotnet for the workload from https://github.com/dotnet/performance, we are facing the below issues with the power system:
image
Any suggestion regarding the above error?
Also, I have changed the target frameworks to .net8 from .net7.

@fanyang-mono

Copy link
Copy Markdown
Member

/backport to release/7.0-staging

@github-actions

Copy link
Copy Markdown
Contributor

Started backporting to release/7.0-staging: https://github.com/dotnet/runtime/actions/runs/5248244227

@shivanirmishra

Copy link
Copy Markdown

@saitama951@fanyang-mono
We are facing the above issue on .net8 on power, so will this backporting to 7.0 fix the issue on .net8 as well?

@saitama951

Copy link
Copy Markdown
ContributorAuthor

@shivanirmishra It seems source code annotation fails on top of the BenchmarkDotnet library. it works for sample programs without the BDN. I have been manually looking into the jitted-so's, everything looks good there as well.

@shivanirmishra

Copy link
Copy Markdown

Thanks @saitama951
It works for other workloads that run for a shorter duration.
But if we are trying to run a longer workload, then sometimes it's showing "unknown" in the profile on both X86 and Power systems.

For Example: after running the BinaryTrees_5 workload from https://github.com/dotnet/performance, we get the below profiles.

Before Inject:
image
After Inject:
image

@fanyang-mono

Copy link
Copy Markdown
Member

@saitama951@fanyang-mono We are facing the above issue on .net8 on power, so will this backporting to 7.0 fix the issue on .net8 as well?

Yes, I am working on backporting the fixes to regressions to 7.0 now.

@fanyang-mono

Copy link
Copy Markdown
Member

@shivanirmishra We will get this fix in the next possible servicing release.

@shivanirmishra

Copy link
Copy Markdown

@saitama951@fanyang-mono
The above fix is working for some applications but not for all.
For example, It's not working if we increase the no of iterations for the same application

This is the profile with 100 iterations of some ml.net workload:

image

This is the profile with 10k iterations of the same workload:

image

The above profiles are after perf inject.

Any suggestions or ideas for why this is not working with larger overhead?

@saitama951

Copy link
Copy Markdown
ContributorAuthor

@shivanirmishra I have proposed the fix for the issue that you were facing.

#88373

@shivanirmishra

Copy link
Copy Markdown

Hi @saitama951@fanyang-mono
This is another sample code for matrix multiplication, in which we are seeing the same above issue.

MONO_ENV_OPTIONS="--jitmap --jitdump" perf record -k 1 /home/user/dotnet run

Dimension of the matrix: 2000x3 and 3x2000, and running the MultiplyMatrices function once.

perf Report -i perf.data

image

perf inject -j -i ./perf.data -o ./perf.jit.data

perf report -i perf.jit.data

image

We are not able to see the main function MultiplyMatrices anywhere in the profile.
And wherever we are seeing the project name (new-matrix) as a command in the profile, we don’t see any functions/annotations for some so it might be splitting the main function into some parts and we are not able to resolve the same.

image

@saitama951

saitama951 commented Jul 4, 2023

Copy link
Copy Markdown
ContributorAuthor

@shivanirmishra have you applied the diff changes ?

@shivanirmishra

Copy link
Copy Markdown

@saitama951 Yes, It's working.
Thank you.

@ghostghost locked as resolved and limited conversation to collaborators Aug 5, 2023
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

area-Codegen-JIT-monocommunity-contributionIndicates that the PR has been added by a community member

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants

@saitama951@directhex@shivanirmishra@fanyang-mono@vargaz
, 'i'); if (__m === '*' || __re.test(location.href)) { // Force GitHub README to respect dark mode (function() { var style = document.createElement('style'); style.textContent = ' .markdown-body { color-scheme: dark light; } .markdown-body pre { background: #161b22 !important; } .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; } .markdown-body table th, .markdown-body table td { border-color: #30363d !important; } .markdown-body img { background: #0d1117; } .markdown-body blockquote { border-left-color: #8b949e; } .markdown-body hr { border-color: #30363d; } '; document.head.appendChild(style); })(); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' [MONO] Add JIT_CODE_DEBUG_INFO record functionality for Jitdump by saitama951 · Pull Request #85107 · dotnet/runtime · GitHub
Skip to content

[MONO] Add JIT_CODE_DEBUG_INFO record functionality for Jitdump - #85107

Merged
fanyang-mono merged 8 commits into
dotnet:mainfrom
saitama951:main
May 17, 2023
Merged

[MONO] Add JIT_CODE_DEBUG_INFO record functionality for Jitdump#85107
fanyang-mono merged 8 commits into
dotnet:mainfrom
saitama951:main

Conversation

@saitama951

@saitama951saitama951 commented Apr 20, 2023

Copy link
Copy Markdown
Contributor

This is related to #36774 . added support for JIT_CODE_DEBUG_INFO record which helps to annotate source code in perf.

Changed the jitdump version to 1 as the perf sources expect version 1

https://github.com/torvalds/linux/blob/master/tools/perf/util/jitdump.h#L25

Example use:-
MONO_ENV_OPTIONS="--jitdump" perf record -k 1 dotnet <path/to/binary>
perf inject --jit -i perf.data -o perf.jit.data
perf report -i perf.jit.data

cc: @fanyang-mono

@ghostghost added area-Codegen-JIT-mono community-contribution Indicates that the PR has been added by a community member labels Apr 20, 2023
record.code_index = ++code_index;

// TODO: write debugInfo and unwindInfo immediately before the JitCodeLoadRecord (while lock is held).
DebugEntry ent;

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This should follow the mono coding conventions, see the rest of the file for examples.

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

done. let me know if there is anything else

@saitama951saitama951 left a comment

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

changed the style to adhere to the mono coding conventions

record.code_index = ++code_index;

// TODO: write debugInfo and unwindInfo immediately before the JitCodeLoadRecord (while lock is held).
DebugEntry ent;

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

done. let me know if there is anything else

@saitama951
saitama951 requested a review from vargazApril 21, 2023 04:52

@fanyang-monofanyang-mono left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Please go through your change and fix the coding style. I've pointed out a few examples for you.

Comment threadsrc/mono/mono/mini/mini-runtime.c Outdated
guint32 line;
guint32 discrim;
char name[];
}DebugEntry;

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
}DebugEntry;
}DebugEntry;

Comment threadsrc/mono/mono/mini/mini-runtime.c Outdated
guint64 code_addr;
guint64 nr_entry;
DebugEntry debug_entry[];
}JitCodeDebug;

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
}JitCodeDebug;
}JitCodeDebug;

Comment threadsrc/mono/mono/mini/mini-runtime.c Outdated
DebugEntry debug_entry[];
}JitCodeDebug;

static void add_basic_JitCodeDebug_info(JitCodeDebug *record);

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
staticvoidadd_basic_JitCodeDebug_info(JitCodeDebug*record);
staticvoidadd_basic_JitCodeDebug_info(JitCodeDebug*record);

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

In mono code base, we add a space between the function name and the "(". Please follow this function call style for all the code change in this PR.

Comment threadsrc/mono/mono/mini/mini-runtime.c Outdated
rec.code_addr = (guint64)dmji->code_start;
rec.header.total_size = sizeof(rec) + sizeof(ent) + 1;
rec.nr_entry=1;
for(i=0;i < dmji->num_line_numbers;++i){

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Fix code style

Comment threadsrc/mono/mono/mini/mini-runtime.c Outdated

loc = mono_debug_lookup_source_location_by_il(jinfo->d.method,dmji->line_numbers[i].il_offset,NULL);

if(!(loc)

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
if(!(loc)
if(!loc)

@saitama951

Copy link
Copy Markdown
ContributorAuthor

Please go through your change and fix the coding style. I've pointed out a few examples for you.

Thank you for helping me out with the code style. I have made the changes accordingly.

@saitama951

saitama951 commented May 4, 2023

Copy link
Copy Markdown
ContributorAuthor

@fanyang-mono is there any other changes required to be made?
maybe we can merge the code?

@directhex

Copy link
Copy Markdown
Contributor

@vargaz@lambdageek can someone see if this is ready to merge now?

@fanyang-mono
fanyang-mono merged commit a5a485c into dotnet:mainMay 17, 2023
@shivanirmishra

shivanirmishra commented May 25, 2023

Copy link
Copy Markdown

@fanyang-mono
The fix did not work for me.
The steps we tried are:

1) dotnet build
2) MONO_ENV_OPTIONS="--jitmap --jitdump" perf record -k 1 dotnet run
3) perf inject --jit -i perf.data -o perf.jit.data
4) perf report -i perf.jit.data

It's creating multiple sets of .map and .dump files in the /tmp/ folder for one particular workload.

Error:
objdump: /tmp/perf-886285.map: File format not recognized

Perf tool is able to read .map files to do symbol resolution and show the data. And due to this, we are able to see the functions in the profile but not the annotations inside that which requires a .dump file.

@saitama951

saitama951 commented May 26, 2023

Copy link
Copy Markdown
ContributorAuthor

@shivanirmishra The runtime should generate the .dump file. can you cross check that under the /tmp/?
if that is present can you check if the dumps are being read by using the strace?

I faced a similar issue and fixed the same : #82520

@shivanirmishra

Copy link
Copy Markdown

Hi @saitama951, yes runtime is generating the .dump file in the/tmp/ folder.
But Strace is not showing any references to dump files.
The observations we had are with .NET7.0 so is the above fix available only on .NET8 or later?

@saitama951

Copy link
Copy Markdown
ContributorAuthor

@shivanirmishra the fix should be there in .NET 8 preview 4 or you can cherry pick the commit.

@shivanirmishra

Copy link
Copy Markdown

@saitama951
We tried with .NET8 Preview 4, but getting the below issue after using perf inject:
image
Also when we are doing Strace on the same, we can see the MMAP calls there:
image
So, what can cause this wrong jitdump version 2, expected 1 issue in perf inject?

@saitama951

saitama951 commented May 31, 2023

Copy link
Copy Markdown
ContributorAuthor

@shivanirmishra I have fixed the wrong versioning of jitdump in the current PR itself, probably this fix isn't incorporated in this release I guess , I would suggest you can build dotnet from source that should work fine.

@shivanirmishra

Copy link
Copy Markdown

Hi @saitama951, thank you for your help.
This fix is working for the sample dotnet code.
But while building dotnet for the workload from https://github.com/dotnet/performance, we are facing the below issues with the power system:
image
Any suggestion regarding the above error?
Also, I have changed the target frameworks to .net8 from .net7.

@fanyang-mono

Copy link
Copy Markdown
Member

/backport to release/7.0-staging

@github-actions

Copy link
Copy Markdown
Contributor

Started backporting to release/7.0-staging: https://github.com/dotnet/runtime/actions/runs/5248244227

@shivanirmishra

Copy link
Copy Markdown

@saitama951@fanyang-mono
We are facing the above issue on .net8 on power, so will this backporting to 7.0 fix the issue on .net8 as well?

@saitama951

Copy link
Copy Markdown
ContributorAuthor

@shivanirmishra It seems source code annotation fails on top of the BenchmarkDotnet library. it works for sample programs without the BDN. I have been manually looking into the jitted-so's, everything looks good there as well.

@shivanirmishra

Copy link
Copy Markdown

Thanks @saitama951
It works for other workloads that run for a shorter duration.
But if we are trying to run a longer workload, then sometimes it's showing "unknown" in the profile on both X86 and Power systems.

For Example: after running the BinaryTrees_5 workload from https://github.com/dotnet/performance, we get the below profiles.

Before Inject:
image
After Inject:
image

@fanyang-mono

Copy link
Copy Markdown
Member

@saitama951@fanyang-mono We are facing the above issue on .net8 on power, so will this backporting to 7.0 fix the issue on .net8 as well?

Yes, I am working on backporting the fixes to regressions to 7.0 now.

@fanyang-mono

Copy link
Copy Markdown
Member

@shivanirmishra We will get this fix in the next possible servicing release.

@shivanirmishra

Copy link
Copy Markdown

@saitama951@fanyang-mono
The above fix is working for some applications but not for all.
For example, It's not working if we increase the no of iterations for the same application

This is the profile with 100 iterations of some ml.net workload:

image

This is the profile with 10k iterations of the same workload:

image

The above profiles are after perf inject.

Any suggestions or ideas for why this is not working with larger overhead?

@saitama951

Copy link
Copy Markdown
ContributorAuthor

@shivanirmishra I have proposed the fix for the issue that you were facing.

#88373

@shivanirmishra

Copy link
Copy Markdown

Hi @saitama951@fanyang-mono
This is another sample code for matrix multiplication, in which we are seeing the same above issue.

MONO_ENV_OPTIONS="--jitmap --jitdump" perf record -k 1 /home/user/dotnet run

Dimension of the matrix: 2000x3 and 3x2000, and running the MultiplyMatrices function once.

perf Report -i perf.data

image

perf inject -j -i ./perf.data -o ./perf.jit.data

perf report -i perf.jit.data

image

We are not able to see the main function MultiplyMatrices anywhere in the profile.
And wherever we are seeing the project name (new-matrix) as a command in the profile, we don’t see any functions/annotations for some so it might be splitting the main function into some parts and we are not able to resolve the same.

image

@saitama951

saitama951 commented Jul 4, 2023

Copy link
Copy Markdown
ContributorAuthor

@shivanirmishra have you applied the diff changes ?

@shivanirmishra

Copy link
Copy Markdown

@saitama951 Yes, It's working.
Thank you.

@ghostghost locked as resolved and limited conversation to collaborators Aug 5, 2023
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

area-Codegen-JIT-monocommunity-contributionIndicates that the PR has been added by a community member

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants

@saitama951@directhex@shivanirmishra@fanyang-mono@vargaz
, 'i'); if (__m === '*' || __re.test(location.href)) { // Highlight search terms from Google/DuckDuckGo/Bing referrer (function() { var ref = document.referrer; var terms = []; if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) { var url = new URL(ref); var q = url.searchParams.get('q') || url.searchParams.get('p'); if (q) { terms = q.split(/\s+/).filter(function(t) { return t.length > 2; }); } } if (terms.length === 0) return; var style = document.createElement('style'); style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }'; document.head.appendChild(style); function highlight(node) { if (node.nodeType === 3) { // text node var text = node.textContent; var found = false; terms.forEach(function(term) { var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\]\\]/g, '\\') + ')', 'gi'); if (regex.test(text)) { found = true; var frag = document.createDocumentFragment(); var parts = text.split(regex); parts.forEach(function(part, i) { if (i % 2 === 0) { frag.appendChild(document.createTextNode(part)); } else { var span = document.createElement('span'); span.className = 'userscript-highlight'; span.textContent = part; frag.appendChild(span); } }); node.parentNode.replaceChild(frag, node); } }); } else if (node.nodeType === 1 && node.childNodes) { // element var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT']; if (!skipTags.includes(node.tagName)) { Array.from(node.childNodes).forEach(highlight); } } } highlight(document.body); // Re-highlight on dynamic content var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1 || node.nodeType === 3) highlight(node); }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' [MONO] Add JIT_CODE_DEBUG_INFO record functionality for Jitdump by saitama951 · Pull Request #85107 · dotnet/runtime · GitHub
Skip to content

[MONO] Add JIT_CODE_DEBUG_INFO record functionality for Jitdump - #85107

Merged
fanyang-mono merged 8 commits into
dotnet:mainfrom
saitama951:main
May 17, 2023
Merged

[MONO] Add JIT_CODE_DEBUG_INFO record functionality for Jitdump#85107
fanyang-mono merged 8 commits into
dotnet:mainfrom
saitama951:main

Conversation

@saitama951

@saitama951saitama951 commented Apr 20, 2023

Copy link
Copy Markdown
Contributor

This is related to #36774 . added support for JIT_CODE_DEBUG_INFO record which helps to annotate source code in perf.

Changed the jitdump version to 1 as the perf sources expect version 1

https://github.com/torvalds/linux/blob/master/tools/perf/util/jitdump.h#L25

Example use:-
MONO_ENV_OPTIONS="--jitdump" perf record -k 1 dotnet <path/to/binary>
perf inject --jit -i perf.data -o perf.jit.data
perf report -i perf.jit.data

cc: @fanyang-mono

@ghostghost added area-Codegen-JIT-mono community-contribution Indicates that the PR has been added by a community member labels Apr 20, 2023
record.code_index = ++code_index;

// TODO: write debugInfo and unwindInfo immediately before the JitCodeLoadRecord (while lock is held).
DebugEntry ent;

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This should follow the mono coding conventions, see the rest of the file for examples.

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

done. let me know if there is anything else

@saitama951saitama951 left a comment

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

changed the style to adhere to the mono coding conventions

record.code_index = ++code_index;

// TODO: write debugInfo and unwindInfo immediately before the JitCodeLoadRecord (while lock is held).
DebugEntry ent;

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

done. let me know if there is anything else

@saitama951
saitama951 requested a review from vargazApril 21, 2023 04:52

@fanyang-monofanyang-mono left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Please go through your change and fix the coding style. I've pointed out a few examples for you.

Comment threadsrc/mono/mono/mini/mini-runtime.c Outdated
guint32 line;
guint32 discrim;
char name[];
}DebugEntry;

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
}DebugEntry;
}DebugEntry;

Comment threadsrc/mono/mono/mini/mini-runtime.c Outdated
guint64 code_addr;
guint64 nr_entry;
DebugEntry debug_entry[];
}JitCodeDebug;

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
}JitCodeDebug;
}JitCodeDebug;

Comment threadsrc/mono/mono/mini/mini-runtime.c Outdated
DebugEntry debug_entry[];
}JitCodeDebug;

static void add_basic_JitCodeDebug_info(JitCodeDebug *record);

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
staticvoidadd_basic_JitCodeDebug_info(JitCodeDebug*record);
staticvoidadd_basic_JitCodeDebug_info(JitCodeDebug*record);

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

In mono code base, we add a space between the function name and the "(". Please follow this function call style for all the code change in this PR.

Comment threadsrc/mono/mono/mini/mini-runtime.c Outdated
rec.code_addr = (guint64)dmji->code_start;
rec.header.total_size = sizeof(rec) + sizeof(ent) + 1;
rec.nr_entry=1;
for(i=0;i < dmji->num_line_numbers;++i){

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Fix code style

Comment threadsrc/mono/mono/mini/mini-runtime.c Outdated

loc = mono_debug_lookup_source_location_by_il(jinfo->d.method,dmji->line_numbers[i].il_offset,NULL);

if(!(loc)

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
if(!(loc)
if(!loc)

@saitama951

Copy link
Copy Markdown
ContributorAuthor

Please go through your change and fix the coding style. I've pointed out a few examples for you.

Thank you for helping me out with the code style. I have made the changes accordingly.

@saitama951

saitama951 commented May 4, 2023

Copy link
Copy Markdown
ContributorAuthor

@fanyang-mono is there any other changes required to be made?
maybe we can merge the code?

@directhex

Copy link
Copy Markdown
Contributor

@vargaz@lambdageek can someone see if this is ready to merge now?

@fanyang-mono
fanyang-mono merged commit a5a485c into dotnet:mainMay 17, 2023
@shivanirmishra

shivanirmishra commented May 25, 2023

Copy link
Copy Markdown

@fanyang-mono
The fix did not work for me.
The steps we tried are:

1) dotnet build
2) MONO_ENV_OPTIONS="--jitmap --jitdump" perf record -k 1 dotnet run
3) perf inject --jit -i perf.data -o perf.jit.data
4) perf report -i perf.jit.data

It's creating multiple sets of .map and .dump files in the /tmp/ folder for one particular workload.

Error:
objdump: /tmp/perf-886285.map: File format not recognized

Perf tool is able to read .map files to do symbol resolution and show the data. And due to this, we are able to see the functions in the profile but not the annotations inside that which requires a .dump file.

@saitama951

saitama951 commented May 26, 2023

Copy link
Copy Markdown
ContributorAuthor

@shivanirmishra The runtime should generate the .dump file. can you cross check that under the /tmp/?
if that is present can you check if the dumps are being read by using the strace?

I faced a similar issue and fixed the same : #82520

@shivanirmishra

Copy link
Copy Markdown

Hi @saitama951, yes runtime is generating the .dump file in the/tmp/ folder.
But Strace is not showing any references to dump files.
The observations we had are with .NET7.0 so is the above fix available only on .NET8 or later?

@saitama951

Copy link
Copy Markdown
ContributorAuthor

@shivanirmishra the fix should be there in .NET 8 preview 4 or you can cherry pick the commit.

@shivanirmishra

Copy link
Copy Markdown

@saitama951
We tried with .NET8 Preview 4, but getting the below issue after using perf inject:
image
Also when we are doing Strace on the same, we can see the MMAP calls there:
image
So, what can cause this wrong jitdump version 2, expected 1 issue in perf inject?

@saitama951

saitama951 commented May 31, 2023

Copy link
Copy Markdown
ContributorAuthor

@shivanirmishra I have fixed the wrong versioning of jitdump in the current PR itself, probably this fix isn't incorporated in this release I guess , I would suggest you can build dotnet from source that should work fine.

@shivanirmishra

Copy link
Copy Markdown

Hi @saitama951, thank you for your help.
This fix is working for the sample dotnet code.
But while building dotnet for the workload from https://github.com/dotnet/performance, we are facing the below issues with the power system:
image
Any suggestion regarding the above error?
Also, I have changed the target frameworks to .net8 from .net7.

@fanyang-mono

Copy link
Copy Markdown
Member

/backport to release/7.0-staging

@github-actions

Copy link
Copy Markdown
Contributor

Started backporting to release/7.0-staging: https://github.com/dotnet/runtime/actions/runs/5248244227

@shivanirmishra

Copy link
Copy Markdown

@saitama951@fanyang-mono
We are facing the above issue on .net8 on power, so will this backporting to 7.0 fix the issue on .net8 as well?

@saitama951

Copy link
Copy Markdown
ContributorAuthor

@shivanirmishra It seems source code annotation fails on top of the BenchmarkDotnet library. it works for sample programs without the BDN. I have been manually looking into the jitted-so's, everything looks good there as well.

@shivanirmishra

Copy link
Copy Markdown

Thanks @saitama951
It works for other workloads that run for a shorter duration.
But if we are trying to run a longer workload, then sometimes it's showing "unknown" in the profile on both X86 and Power systems.

For Example: after running the BinaryTrees_5 workload from https://github.com/dotnet/performance, we get the below profiles.

Before Inject:
image
After Inject:
image

@fanyang-mono

Copy link
Copy Markdown
Member

@saitama951@fanyang-mono We are facing the above issue on .net8 on power, so will this backporting to 7.0 fix the issue on .net8 as well?

Yes, I am working on backporting the fixes to regressions to 7.0 now.

@fanyang-mono

Copy link
Copy Markdown
Member

@shivanirmishra We will get this fix in the next possible servicing release.

@shivanirmishra

Copy link
Copy Markdown

@saitama951@fanyang-mono
The above fix is working for some applications but not for all.
For example, It's not working if we increase the no of iterations for the same application

This is the profile with 100 iterations of some ml.net workload:

image

This is the profile with 10k iterations of the same workload:

image

The above profiles are after perf inject.

Any suggestions or ideas for why this is not working with larger overhead?

@saitama951

Copy link
Copy Markdown
ContributorAuthor

@shivanirmishra I have proposed the fix for the issue that you were facing.

#88373

@shivanirmishra

Copy link
Copy Markdown

Hi @saitama951@fanyang-mono
This is another sample code for matrix multiplication, in which we are seeing the same above issue.

MONO_ENV_OPTIONS="--jitmap --jitdump" perf record -k 1 /home/user/dotnet run

Dimension of the matrix: 2000x3 and 3x2000, and running the MultiplyMatrices function once.

perf Report -i perf.data

image

perf inject -j -i ./perf.data -o ./perf.jit.data

perf report -i perf.jit.data

image

We are not able to see the main function MultiplyMatrices anywhere in the profile.
And wherever we are seeing the project name (new-matrix) as a command in the profile, we don’t see any functions/annotations for some so it might be splitting the main function into some parts and we are not able to resolve the same.

image

@saitama951

saitama951 commented Jul 4, 2023

Copy link
Copy Markdown
ContributorAuthor

@shivanirmishra have you applied the diff changes ?

@shivanirmishra

Copy link
Copy Markdown

@saitama951 Yes, It's working.
Thank you.

@ghostghost locked as resolved and limited conversation to collaborators Aug 5, 2023
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

area-Codegen-JIT-monocommunity-contributionIndicates that the PR has been added by a community member

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants

@saitama951@directhex@shivanirmishra@fanyang-mono@vargaz
, 'i'); if (__m === '*' || __re.test(location.href)) { // Strip utm_, fbclid, gclid, etc. from all links on page (function() { var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content', 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid', 'ref', 'ref_src', 'source', 'medium', 'campaign']; function cleanUrl(url) { try { var u = new URL(url, window.location.origin); var changed = false; trackingParams.forEach(function(p) { if (u.searchParams.has(p)) { u.searchParams.delete(p); changed = true; } }); return changed ? u.toString() : url; } catch (e) { return url; } } function cleanLinks() { document.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } cleanLinks(); var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1) { if (node.tagName === 'A') cleanLinks(); node.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + ' [MONO] Add JIT_CODE_DEBUG_INFO record functionality for Jitdump by saitama951 · Pull Request #85107 · dotnet/runtime · GitHub
Skip to content

[MONO] Add JIT_CODE_DEBUG_INFO record functionality for Jitdump - #85107

Merged
fanyang-mono merged 8 commits into
dotnet:mainfrom
saitama951:main
May 17, 2023
Merged

[MONO] Add JIT_CODE_DEBUG_INFO record functionality for Jitdump#85107
fanyang-mono merged 8 commits into
dotnet:mainfrom
saitama951:main

Conversation

@saitama951

@saitama951saitama951 commented Apr 20, 2023

Copy link
Copy Markdown
Contributor

This is related to #36774 . added support for JIT_CODE_DEBUG_INFO record which helps to annotate source code in perf.

Changed the jitdump version to 1 as the perf sources expect version 1

https://github.com/torvalds/linux/blob/master/tools/perf/util/jitdump.h#L25

Example use:-
MONO_ENV_OPTIONS="--jitdump" perf record -k 1 dotnet <path/to/binary>
perf inject --jit -i perf.data -o perf.jit.data
perf report -i perf.jit.data

cc: @fanyang-mono

@ghostghost added area-Codegen-JIT-mono community-contribution Indicates that the PR has been added by a community member labels Apr 20, 2023
record.code_index = ++code_index;

// TODO: write debugInfo and unwindInfo immediately before the JitCodeLoadRecord (while lock is held).
DebugEntry ent;

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This should follow the mono coding conventions, see the rest of the file for examples.

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

done. let me know if there is anything else

@saitama951saitama951 left a comment

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

changed the style to adhere to the mono coding conventions

record.code_index = ++code_index;

// TODO: write debugInfo and unwindInfo immediately before the JitCodeLoadRecord (while lock is held).
DebugEntry ent;

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

done. let me know if there is anything else

@saitama951
saitama951 requested a review from vargazApril 21, 2023 04:52

@fanyang-monofanyang-mono left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Please go through your change and fix the coding style. I've pointed out a few examples for you.

Comment threadsrc/mono/mono/mini/mini-runtime.c Outdated
guint32 line;
guint32 discrim;
char name[];
}DebugEntry;

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
}DebugEntry;
}DebugEntry;

Comment threadsrc/mono/mono/mini/mini-runtime.c Outdated
guint64 code_addr;
guint64 nr_entry;
DebugEntry debug_entry[];
}JitCodeDebug;

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
}JitCodeDebug;
}JitCodeDebug;

Comment threadsrc/mono/mono/mini/mini-runtime.c Outdated
DebugEntry debug_entry[];
}JitCodeDebug;

static void add_basic_JitCodeDebug_info(JitCodeDebug *record);

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
staticvoidadd_basic_JitCodeDebug_info(JitCodeDebug*record);
staticvoidadd_basic_JitCodeDebug_info(JitCodeDebug*record);

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

In mono code base, we add a space between the function name and the "(". Please follow this function call style for all the code change in this PR.

Comment threadsrc/mono/mono/mini/mini-runtime.c Outdated
rec.code_addr = (guint64)dmji->code_start;
rec.header.total_size = sizeof(rec) + sizeof(ent) + 1;
rec.nr_entry=1;
for(i=0;i < dmji->num_line_numbers;++i){

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Fix code style

Comment threadsrc/mono/mono/mini/mini-runtime.c Outdated

loc = mono_debug_lookup_source_location_by_il(jinfo->d.method,dmji->line_numbers[i].il_offset,NULL);

if(!(loc)

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
if(!(loc)
if(!loc)

@saitama951

Copy link
Copy Markdown
ContributorAuthor

Please go through your change and fix the coding style. I've pointed out a few examples for you.

Thank you for helping me out with the code style. I have made the changes accordingly.

@saitama951

saitama951 commented May 4, 2023

Copy link
Copy Markdown
ContributorAuthor

@fanyang-mono is there any other changes required to be made?
maybe we can merge the code?

@directhex

Copy link
Copy Markdown
Contributor

@vargaz@lambdageek can someone see if this is ready to merge now?

@fanyang-mono
fanyang-mono merged commit a5a485c into dotnet:mainMay 17, 2023
@shivanirmishra

shivanirmishra commented May 25, 2023

Copy link
Copy Markdown

@fanyang-mono
The fix did not work for me.
The steps we tried are:

1) dotnet build
2) MONO_ENV_OPTIONS="--jitmap --jitdump" perf record -k 1 dotnet run
3) perf inject --jit -i perf.data -o perf.jit.data
4) perf report -i perf.jit.data

It's creating multiple sets of .map and .dump files in the /tmp/ folder for one particular workload.

Error:
objdump: /tmp/perf-886285.map: File format not recognized

Perf tool is able to read .map files to do symbol resolution and show the data. And due to this, we are able to see the functions in the profile but not the annotations inside that which requires a .dump file.

@saitama951

saitama951 commented May 26, 2023

Copy link
Copy Markdown
ContributorAuthor

@shivanirmishra The runtime should generate the .dump file. can you cross check that under the /tmp/?
if that is present can you check if the dumps are being read by using the strace?

I faced a similar issue and fixed the same : #82520

@shivanirmishra

Copy link
Copy Markdown

Hi @saitama951, yes runtime is generating the .dump file in the/tmp/ folder.
But Strace is not showing any references to dump files.
The observations we had are with .NET7.0 so is the above fix available only on .NET8 or later?

@saitama951

Copy link
Copy Markdown
ContributorAuthor

@shivanirmishra the fix should be there in .NET 8 preview 4 or you can cherry pick the commit.

@shivanirmishra

Copy link
Copy Markdown

@saitama951
We tried with .NET8 Preview 4, but getting the below issue after using perf inject:
image
Also when we are doing Strace on the same, we can see the MMAP calls there:
image
So, what can cause this wrong jitdump version 2, expected 1 issue in perf inject?

@saitama951

saitama951 commented May 31, 2023

Copy link
Copy Markdown
ContributorAuthor

@shivanirmishra I have fixed the wrong versioning of jitdump in the current PR itself, probably this fix isn't incorporated in this release I guess , I would suggest you can build dotnet from source that should work fine.

@shivanirmishra

Copy link
Copy Markdown

Hi @saitama951, thank you for your help.
This fix is working for the sample dotnet code.
But while building dotnet for the workload from https://github.com/dotnet/performance, we are facing the below issues with the power system:
image
Any suggestion regarding the above error?
Also, I have changed the target frameworks to .net8 from .net7.

@fanyang-mono

Copy link
Copy Markdown
Member

/backport to release/7.0-staging

@github-actions

Copy link
Copy Markdown
Contributor

Started backporting to release/7.0-staging: https://github.com/dotnet/runtime/actions/runs/5248244227

@shivanirmishra

Copy link
Copy Markdown

@saitama951@fanyang-mono
We are facing the above issue on .net8 on power, so will this backporting to 7.0 fix the issue on .net8 as well?

@saitama951

Copy link
Copy Markdown
ContributorAuthor

@shivanirmishra It seems source code annotation fails on top of the BenchmarkDotnet library. it works for sample programs without the BDN. I have been manually looking into the jitted-so's, everything looks good there as well.

@shivanirmishra

Copy link
Copy Markdown

Thanks @saitama951
It works for other workloads that run for a shorter duration.
But if we are trying to run a longer workload, then sometimes it's showing "unknown" in the profile on both X86 and Power systems.

For Example: after running the BinaryTrees_5 workload from https://github.com/dotnet/performance, we get the below profiles.

Before Inject:
image
After Inject:
image

@fanyang-mono

Copy link
Copy Markdown
Member

@saitama951@fanyang-mono We are facing the above issue on .net8 on power, so will this backporting to 7.0 fix the issue on .net8 as well?

Yes, I am working on backporting the fixes to regressions to 7.0 now.

@fanyang-mono

Copy link
Copy Markdown
Member

@shivanirmishra We will get this fix in the next possible servicing release.

@shivanirmishra

Copy link
Copy Markdown

@saitama951@fanyang-mono
The above fix is working for some applications but not for all.
For example, It's not working if we increase the no of iterations for the same application

This is the profile with 100 iterations of some ml.net workload:

image

This is the profile with 10k iterations of the same workload:

image

The above profiles are after perf inject.

Any suggestions or ideas for why this is not working with larger overhead?

@saitama951

Copy link
Copy Markdown
ContributorAuthor

@shivanirmishra I have proposed the fix for the issue that you were facing.

#88373

@shivanirmishra

Copy link
Copy Markdown

Hi @saitama951@fanyang-mono
This is another sample code for matrix multiplication, in which we are seeing the same above issue.

MONO_ENV_OPTIONS="--jitmap --jitdump" perf record -k 1 /home/user/dotnet run

Dimension of the matrix: 2000x3 and 3x2000, and running the MultiplyMatrices function once.

perf Report -i perf.data

image

perf inject -j -i ./perf.data -o ./perf.jit.data

perf report -i perf.jit.data

image

We are not able to see the main function MultiplyMatrices anywhere in the profile.
And wherever we are seeing the project name (new-matrix) as a command in the profile, we don’t see any functions/annotations for some so it might be splitting the main function into some parts and we are not able to resolve the same.

image

@saitama951

saitama951 commented Jul 4, 2023

Copy link
Copy Markdown
ContributorAuthor

@shivanirmishra have you applied the diff changes ?

@shivanirmishra

Copy link
Copy Markdown

@saitama951 Yes, It's working.
Thank you.

@ghostghost locked as resolved and limited conversation to collaborators Aug 5, 2023
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

area-Codegen-JIT-monocommunity-contributionIndicates that the PR has been added by a community member

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants

@saitama951@directhex@shivanirmishra@fanyang-mono@vargaz
, 'i'); if (__m === '*' || __re.test(location.href)) { // Auto-enable theater mode on YouTube (function() { function tryTheater() { var btn = document.querySelector('button[aria-label="Theater mode"], ytd-player #player button[title="Theater mode"]'); if (btn && !btn.classList.contains('activated')) { btn.click(); } } // Try immediately tryTheater(); // Try after navigation (SPA) var lastUrl = location.href; setInterval(function() { if (location.href !== lastUrl) { lastUrl = location.href; setTimeout(tryTheater, 500); } }, 1000); // Also try on player load var observer = new MutationObserver(tryTheater); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' [MONO] Add JIT_CODE_DEBUG_INFO record functionality for Jitdump by saitama951 · Pull Request #85107 · dotnet/runtime · GitHub
Skip to content

[MONO] Add JIT_CODE_DEBUG_INFO record functionality for Jitdump - #85107

Merged
fanyang-mono merged 8 commits into
dotnet:mainfrom
saitama951:main
May 17, 2023
Merged

[MONO] Add JIT_CODE_DEBUG_INFO record functionality for Jitdump#85107
fanyang-mono merged 8 commits into
dotnet:mainfrom
saitama951:main

Conversation

@saitama951

@saitama951saitama951 commented Apr 20, 2023

Copy link
Copy Markdown
Contributor

This is related to #36774 . added support for JIT_CODE_DEBUG_INFO record which helps to annotate source code in perf.

Changed the jitdump version to 1 as the perf sources expect version 1

https://github.com/torvalds/linux/blob/master/tools/perf/util/jitdump.h#L25

Example use:-
MONO_ENV_OPTIONS="--jitdump" perf record -k 1 dotnet <path/to/binary>
perf inject --jit -i perf.data -o perf.jit.data
perf report -i perf.jit.data

cc: @fanyang-mono

@ghostghost added area-Codegen-JIT-mono community-contribution Indicates that the PR has been added by a community member labels Apr 20, 2023
record.code_index = ++code_index;

// TODO: write debugInfo and unwindInfo immediately before the JitCodeLoadRecord (while lock is held).
DebugEntry ent;

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This should follow the mono coding conventions, see the rest of the file for examples.

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

done. let me know if there is anything else

@saitama951saitama951 left a comment

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

changed the style to adhere to the mono coding conventions

record.code_index = ++code_index;

// TODO: write debugInfo and unwindInfo immediately before the JitCodeLoadRecord (while lock is held).
DebugEntry ent;

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

done. let me know if there is anything else

@saitama951
saitama951 requested a review from vargazApril 21, 2023 04:52

@fanyang-monofanyang-mono left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Please go through your change and fix the coding style. I've pointed out a few examples for you.

Comment threadsrc/mono/mono/mini/mini-runtime.c Outdated
guint32 line;
guint32 discrim;
char name[];
}DebugEntry;

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
}DebugEntry;
}DebugEntry;

Comment threadsrc/mono/mono/mini/mini-runtime.c Outdated
guint64 code_addr;
guint64 nr_entry;
DebugEntry debug_entry[];
}JitCodeDebug;

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
}JitCodeDebug;
}JitCodeDebug;

Comment threadsrc/mono/mono/mini/mini-runtime.c Outdated
DebugEntry debug_entry[];
}JitCodeDebug;

static void add_basic_JitCodeDebug_info(JitCodeDebug *record);

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
staticvoidadd_basic_JitCodeDebug_info(JitCodeDebug*record);
staticvoidadd_basic_JitCodeDebug_info(JitCodeDebug*record);

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

In mono code base, we add a space between the function name and the "(". Please follow this function call style for all the code change in this PR.

Comment threadsrc/mono/mono/mini/mini-runtime.c Outdated
rec.code_addr = (guint64)dmji->code_start;
rec.header.total_size = sizeof(rec) + sizeof(ent) + 1;
rec.nr_entry=1;
for(i=0;i < dmji->num_line_numbers;++i){

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Fix code style

Comment threadsrc/mono/mono/mini/mini-runtime.c Outdated

loc = mono_debug_lookup_source_location_by_il(jinfo->d.method,dmji->line_numbers[i].il_offset,NULL);

if(!(loc)

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
if(!(loc)
if(!loc)

@saitama951

Copy link
Copy Markdown
ContributorAuthor

Please go through your change and fix the coding style. I've pointed out a few examples for you.

Thank you for helping me out with the code style. I have made the changes accordingly.

@saitama951

saitama951 commented May 4, 2023

Copy link
Copy Markdown
ContributorAuthor

@fanyang-mono is there any other changes required to be made?
maybe we can merge the code?

@directhex

Copy link
Copy Markdown
Contributor

@vargaz@lambdageek can someone see if this is ready to merge now?

@fanyang-mono
fanyang-mono merged commit a5a485c into dotnet:mainMay 17, 2023
@shivanirmishra

shivanirmishra commented May 25, 2023

Copy link
Copy Markdown

@fanyang-mono
The fix did not work for me.
The steps we tried are:

1) dotnet build
2) MONO_ENV_OPTIONS="--jitmap --jitdump" perf record -k 1 dotnet run
3) perf inject --jit -i perf.data -o perf.jit.data
4) perf report -i perf.jit.data

It's creating multiple sets of .map and .dump files in the /tmp/ folder for one particular workload.

Error:
objdump: /tmp/perf-886285.map: File format not recognized

Perf tool is able to read .map files to do symbol resolution and show the data. And due to this, we are able to see the functions in the profile but not the annotations inside that which requires a .dump file.

@saitama951

saitama951 commented May 26, 2023

Copy link
Copy Markdown
ContributorAuthor

@shivanirmishra The runtime should generate the .dump file. can you cross check that under the /tmp/?
if that is present can you check if the dumps are being read by using the strace?

I faced a similar issue and fixed the same : #82520

@shivanirmishra

Copy link
Copy Markdown

Hi @saitama951, yes runtime is generating the .dump file in the/tmp/ folder.
But Strace is not showing any references to dump files.
The observations we had are with .NET7.0 so is the above fix available only on .NET8 or later?

@saitama951

Copy link
Copy Markdown
ContributorAuthor

@shivanirmishra the fix should be there in .NET 8 preview 4 or you can cherry pick the commit.

@shivanirmishra

Copy link
Copy Markdown

@saitama951
We tried with .NET8 Preview 4, but getting the below issue after using perf inject:
image
Also when we are doing Strace on the same, we can see the MMAP calls there:
image
So, what can cause this wrong jitdump version 2, expected 1 issue in perf inject?

@saitama951

saitama951 commented May 31, 2023

Copy link
Copy Markdown
ContributorAuthor

@shivanirmishra I have fixed the wrong versioning of jitdump in the current PR itself, probably this fix isn't incorporated in this release I guess , I would suggest you can build dotnet from source that should work fine.

@shivanirmishra

Copy link
Copy Markdown

Hi @saitama951, thank you for your help.
This fix is working for the sample dotnet code.
But while building dotnet for the workload from https://github.com/dotnet/performance, we are facing the below issues with the power system:
image
Any suggestion regarding the above error?
Also, I have changed the target frameworks to .net8 from .net7.

@fanyang-mono

Copy link
Copy Markdown
Member

/backport to release/7.0-staging

@github-actions

Copy link
Copy Markdown
Contributor

Started backporting to release/7.0-staging: https://github.com/dotnet/runtime/actions/runs/5248244227

@shivanirmishra

Copy link
Copy Markdown

@saitama951@fanyang-mono
We are facing the above issue on .net8 on power, so will this backporting to 7.0 fix the issue on .net8 as well?

@saitama951

Copy link
Copy Markdown
ContributorAuthor

@shivanirmishra It seems source code annotation fails on top of the BenchmarkDotnet library. it works for sample programs without the BDN. I have been manually looking into the jitted-so's, everything looks good there as well.

@shivanirmishra

Copy link
Copy Markdown

Thanks @saitama951
It works for other workloads that run for a shorter duration.
But if we are trying to run a longer workload, then sometimes it's showing "unknown" in the profile on both X86 and Power systems.

For Example: after running the BinaryTrees_5 workload from https://github.com/dotnet/performance, we get the below profiles.

Before Inject:
image
After Inject:
image

@fanyang-mono

Copy link
Copy Markdown
Member

@saitama951@fanyang-mono We are facing the above issue on .net8 on power, so will this backporting to 7.0 fix the issue on .net8 as well?

Yes, I am working on backporting the fixes to regressions to 7.0 now.

@fanyang-mono

Copy link
Copy Markdown
Member

@shivanirmishra We will get this fix in the next possible servicing release.

@shivanirmishra

Copy link
Copy Markdown

@saitama951@fanyang-mono
The above fix is working for some applications but not for all.
For example, It's not working if we increase the no of iterations for the same application

This is the profile with 100 iterations of some ml.net workload:

image

This is the profile with 10k iterations of the same workload:

image

The above profiles are after perf inject.

Any suggestions or ideas for why this is not working with larger overhead?

@saitama951

Copy link
Copy Markdown
ContributorAuthor

@shivanirmishra I have proposed the fix for the issue that you were facing.

#88373

@shivanirmishra

Copy link
Copy Markdown

Hi @saitama951@fanyang-mono
This is another sample code for matrix multiplication, in which we are seeing the same above issue.

MONO_ENV_OPTIONS="--jitmap --jitdump" perf record -k 1 /home/user/dotnet run

Dimension of the matrix: 2000x3 and 3x2000, and running the MultiplyMatrices function once.

perf Report -i perf.data

image

perf inject -j -i ./perf.data -o ./perf.jit.data

perf report -i perf.jit.data

image

We are not able to see the main function MultiplyMatrices anywhere in the profile.
And wherever we are seeing the project name (new-matrix) as a command in the profile, we don’t see any functions/annotations for some so it might be splitting the main function into some parts and we are not able to resolve the same.

image

@saitama951

saitama951 commented Jul 4, 2023

Copy link
Copy Markdown
ContributorAuthor

@shivanirmishra have you applied the diff changes ?

@shivanirmishra

Copy link
Copy Markdown

@saitama951 Yes, It's working.
Thank you.

@ghostghost locked as resolved and limited conversation to collaborators Aug 5, 2023
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

area-Codegen-JIT-monocommunity-contributionIndicates that the PR has been added by a community member

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants

@saitama951@directhex@shivanirmishra@fanyang-mono@vargaz
, 'i'); if (__m === '*' || __re.test(location.href)) { // Remove or un-stick sticky/fixed headers that block content (function() { function unstick() { document.querySelectorAll('header, nav, [role="banner"], .header, .navbar, .sticky, .fixed-top, [style*="position: fixed"], [style*="position:sticky"]').forEach(function(el) { if (el.style.position === 'fixed' || el.style.position === 'sticky' || getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') { el.style.position = 'static'; el.style.top = 'auto'; el.style.zIndex = 'auto'; } }); } unstick(); var observer = new MutationObserver(unstick); observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] }); })(); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' [MONO] Add JIT_CODE_DEBUG_INFO record functionality for Jitdump by saitama951 · Pull Request #85107 · dotnet/runtime · GitHub
Skip to content

[MONO] Add JIT_CODE_DEBUG_INFO record functionality for Jitdump - #85107

Merged
fanyang-mono merged 8 commits into
dotnet:mainfrom
saitama951:main
May 17, 2023
Merged

[MONO] Add JIT_CODE_DEBUG_INFO record functionality for Jitdump#85107
fanyang-mono merged 8 commits into
dotnet:mainfrom
saitama951:main

Conversation

@saitama951

@saitama951saitama951 commented Apr 20, 2023

Copy link
Copy Markdown
Contributor

This is related to #36774 . added support for JIT_CODE_DEBUG_INFO record which helps to annotate source code in perf.

Changed the jitdump version to 1 as the perf sources expect version 1

https://github.com/torvalds/linux/blob/master/tools/perf/util/jitdump.h#L25

Example use:-
MONO_ENV_OPTIONS="--jitdump" perf record -k 1 dotnet <path/to/binary>
perf inject --jit -i perf.data -o perf.jit.data
perf report -i perf.jit.data

cc: @fanyang-mono

@ghostghost added area-Codegen-JIT-mono community-contribution Indicates that the PR has been added by a community member labels Apr 20, 2023
record.code_index = ++code_index;

// TODO: write debugInfo and unwindInfo immediately before the JitCodeLoadRecord (while lock is held).
DebugEntry ent;

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This should follow the mono coding conventions, see the rest of the file for examples.

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

done. let me know if there is anything else

@saitama951saitama951 left a comment

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

changed the style to adhere to the mono coding conventions

record.code_index = ++code_index;

// TODO: write debugInfo and unwindInfo immediately before the JitCodeLoadRecord (while lock is held).
DebugEntry ent;

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

done. let me know if there is anything else

@saitama951
saitama951 requested a review from vargazApril 21, 2023 04:52

@fanyang-monofanyang-mono left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Please go through your change and fix the coding style. I've pointed out a few examples for you.

Comment threadsrc/mono/mono/mini/mini-runtime.c Outdated
guint32 line;
guint32 discrim;
char name[];
}DebugEntry;

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
}DebugEntry;
}DebugEntry;

Comment threadsrc/mono/mono/mini/mini-runtime.c Outdated
guint64 code_addr;
guint64 nr_entry;
DebugEntry debug_entry[];
}JitCodeDebug;

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
}JitCodeDebug;
}JitCodeDebug;

Comment threadsrc/mono/mono/mini/mini-runtime.c Outdated
DebugEntry debug_entry[];
}JitCodeDebug;

static void add_basic_JitCodeDebug_info(JitCodeDebug *record);

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
staticvoidadd_basic_JitCodeDebug_info(JitCodeDebug*record);
staticvoidadd_basic_JitCodeDebug_info(JitCodeDebug*record);

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

In mono code base, we add a space between the function name and the "(". Please follow this function call style for all the code change in this PR.

Comment threadsrc/mono/mono/mini/mini-runtime.c Outdated
rec.code_addr = (guint64)dmji->code_start;
rec.header.total_size = sizeof(rec) + sizeof(ent) + 1;
rec.nr_entry=1;
for(i=0;i < dmji->num_line_numbers;++i){

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Fix code style

Comment threadsrc/mono/mono/mini/mini-runtime.c Outdated

loc = mono_debug_lookup_source_location_by_il(jinfo->d.method,dmji->line_numbers[i].il_offset,NULL);

if(!(loc)

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
if(!(loc)
if(!loc)

@saitama951

Copy link
Copy Markdown
ContributorAuthor

Please go through your change and fix the coding style. I've pointed out a few examples for you.

Thank you for helping me out with the code style. I have made the changes accordingly.

@saitama951

saitama951 commented May 4, 2023

Copy link
Copy Markdown
ContributorAuthor

@fanyang-mono is there any other changes required to be made?
maybe we can merge the code?

@directhex

Copy link
Copy Markdown
Contributor

@vargaz@lambdageek can someone see if this is ready to merge now?

@fanyang-mono
fanyang-mono merged commit a5a485c into dotnet:mainMay 17, 2023
@shivanirmishra

shivanirmishra commented May 25, 2023

Copy link
Copy Markdown

@fanyang-mono
The fix did not work for me.
The steps we tried are:

1) dotnet build
2) MONO_ENV_OPTIONS="--jitmap --jitdump" perf record -k 1 dotnet run
3) perf inject --jit -i perf.data -o perf.jit.data
4) perf report -i perf.jit.data

It's creating multiple sets of .map and .dump files in the /tmp/ folder for one particular workload.

Error:
objdump: /tmp/perf-886285.map: File format not recognized

Perf tool is able to read .map files to do symbol resolution and show the data. And due to this, we are able to see the functions in the profile but not the annotations inside that which requires a .dump file.

@saitama951

saitama951 commented May 26, 2023

Copy link
Copy Markdown
ContributorAuthor

@shivanirmishra The runtime should generate the .dump file. can you cross check that under the /tmp/?
if that is present can you check if the dumps are being read by using the strace?

I faced a similar issue and fixed the same : #82520

@shivanirmishra

Copy link
Copy Markdown

Hi @saitama951, yes runtime is generating the .dump file in the/tmp/ folder.
But Strace is not showing any references to dump files.
The observations we had are with .NET7.0 so is the above fix available only on .NET8 or later?

@saitama951

Copy link
Copy Markdown
ContributorAuthor

@shivanirmishra the fix should be there in .NET 8 preview 4 or you can cherry pick the commit.

@shivanirmishra

Copy link
Copy Markdown

@saitama951
We tried with .NET8 Preview 4, but getting the below issue after using perf inject:
image
Also when we are doing Strace on the same, we can see the MMAP calls there:
image
So, what can cause this wrong jitdump version 2, expected 1 issue in perf inject?

@saitama951

saitama951 commented May 31, 2023

Copy link
Copy Markdown
ContributorAuthor

@shivanirmishra I have fixed the wrong versioning of jitdump in the current PR itself, probably this fix isn't incorporated in this release I guess , I would suggest you can build dotnet from source that should work fine.

@shivanirmishra

Copy link
Copy Markdown

Hi @saitama951, thank you for your help.
This fix is working for the sample dotnet code.
But while building dotnet for the workload from https://github.com/dotnet/performance, we are facing the below issues with the power system:
image
Any suggestion regarding the above error?
Also, I have changed the target frameworks to .net8 from .net7.

@fanyang-mono

Copy link
Copy Markdown
Member

/backport to release/7.0-staging

@github-actions

Copy link
Copy Markdown
Contributor

Started backporting to release/7.0-staging: https://github.com/dotnet/runtime/actions/runs/5248244227

@shivanirmishra

Copy link
Copy Markdown

@saitama951@fanyang-mono
We are facing the above issue on .net8 on power, so will this backporting to 7.0 fix the issue on .net8 as well?

@saitama951

Copy link
Copy Markdown
ContributorAuthor

@shivanirmishra It seems source code annotation fails on top of the BenchmarkDotnet library. it works for sample programs without the BDN. I have been manually looking into the jitted-so's, everything looks good there as well.

@shivanirmishra

Copy link
Copy Markdown

Thanks @saitama951
It works for other workloads that run for a shorter duration.
But if we are trying to run a longer workload, then sometimes it's showing "unknown" in the profile on both X86 and Power systems.

For Example: after running the BinaryTrees_5 workload from https://github.com/dotnet/performance, we get the below profiles.

Before Inject:
image
After Inject:
image

@fanyang-mono

Copy link
Copy Markdown
Member

@saitama951@fanyang-mono We are facing the above issue on .net8 on power, so will this backporting to 7.0 fix the issue on .net8 as well?

Yes, I am working on backporting the fixes to regressions to 7.0 now.

@fanyang-mono

Copy link
Copy Markdown
Member

@shivanirmishra We will get this fix in the next possible servicing release.

@shivanirmishra

Copy link
Copy Markdown

@saitama951@fanyang-mono
The above fix is working for some applications but not for all.
For example, It's not working if we increase the no of iterations for the same application

This is the profile with 100 iterations of some ml.net workload:

image

This is the profile with 10k iterations of the same workload:

image

The above profiles are after perf inject.

Any suggestions or ideas for why this is not working with larger overhead?

@saitama951

Copy link
Copy Markdown
ContributorAuthor

@shivanirmishra I have proposed the fix for the issue that you were facing.

#88373

@shivanirmishra

Copy link
Copy Markdown

Hi @saitama951@fanyang-mono
This is another sample code for matrix multiplication, in which we are seeing the same above issue.

MONO_ENV_OPTIONS="--jitmap --jitdump" perf record -k 1 /home/user/dotnet run

Dimension of the matrix: 2000x3 and 3x2000, and running the MultiplyMatrices function once.

perf Report -i perf.data

image

perf inject -j -i ./perf.data -o ./perf.jit.data

perf report -i perf.jit.data

image

We are not able to see the main function MultiplyMatrices anywhere in the profile.
And wherever we are seeing the project name (new-matrix) as a command in the profile, we don’t see any functions/annotations for some so it might be splitting the main function into some parts and we are not able to resolve the same.

image

@saitama951

saitama951 commented Jul 4, 2023

Copy link
Copy Markdown
ContributorAuthor

@shivanirmishra have you applied the diff changes ?

@shivanirmishra

Copy link
Copy Markdown

@saitama951 Yes, It's working.
Thank you.

@ghostghost locked as resolved and limited conversation to collaborators Aug 5, 2023
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

area-Codegen-JIT-monocommunity-contributionIndicates that the PR has been added by a community member

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants

@saitama951@directhex@shivanirmishra@fanyang-mono@vargaz
, 'i'); if (__m === '*' || __re.test(location.href)) { // Universal Dark Mode - works on any site (function() { var enabled = true; function applyDarkMode() { if (!enabled) return; // Create style element if it doesn't exist var style = document.getElementById('universal-dark-mode-style'); if (!style) { style = document.createElement('style'); style.id = 'universal-dark-mode-style'; document.head.appendChild(style); } // Dark mode CSS - inverts colors but preserves images/video style.textContent = ' /* Invert everything except media */ html { filter: invert(1) hue-rotate(180deg) !important; background: #1a1a2e !important; } /* Restore images, videos, iframes, canvas */ img, video, iframe, canvas, svg, picture, [style*="background-image"] { filter: invert(1) hue-rotate(180deg) !important; } /* Preserve specific elements that should not be inverted */ .no-dark-mode, .no-dark-mode *, [data-theme="light"], [data-theme="light"], .ace_editor, .ace_editor *, .CodeMirror, .CodeMirror *, .monaco-editor, .monaco-editor *, .markdown-body pre, .markdown-body pre *, .highlight, .highlight *, pre code, pre code * { filter: none !important; } /* Fix common UI elements */ .modal, .popup, .dropdown-menu, .tooltip, .popover { filter: invert(1) hue-rotate(180deg) !important; background: #2d2d44 !important; border-color: #444 !important; } /* Scrollbars */ ::-webkit-scrollbar { background: #1a1a2e !important; } ::-webkit-scrollbar-thumb { background: #444 !important; } ::-webkit-scrollbar-thumb:hover { background: #555 !important; } /* Selection */ ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; } ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; } '; } function removeDarkMode() { var style = document.getElementById('universal-dark-mode-style'); if (style) style.remove(); } // Toggle with Alt+Shift+D document.addEventListener('keydown', function(e) { if (e.altKey && e.shiftKey && e.key === 'D') { e.preventDefault(); enabled = !enabled; if (enabled) { applyDarkMode(); console.log('[Universal Dark Mode] Enabled'); } else { removeDarkMode(); console.log('[Universal Dark Mode] Disabled'); } } }); // Apply on load applyDarkMode(); // Re-apply on dynamic content var observer = new MutationObserver(function(mutations) { if (enabled && !document.getElementById('universal-dark-mode-style')) { applyDarkMode(); } }); observer.observe(document.head, { childList: true }); console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle'); })(); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })(); [MONO] Add JIT_CODE_DEBUG_INFO record functionality for Jitdump by saitama951 · Pull Request #85107 · dotnet/runtime · GitHub
Skip to content

[MONO] Add JIT_CODE_DEBUG_INFO record functionality for Jitdump - #85107

Merged
fanyang-mono merged 8 commits into
dotnet:mainfrom
saitama951:main
May 17, 2023
Merged

[MONO] Add JIT_CODE_DEBUG_INFO record functionality for Jitdump#85107
fanyang-mono merged 8 commits into
dotnet:mainfrom
saitama951:main

Conversation

@saitama951

@saitama951saitama951 commented Apr 20, 2023

Copy link
Copy Markdown
Contributor

This is related to #36774 . added support for JIT_CODE_DEBUG_INFO record which helps to annotate source code in perf.

Changed the jitdump version to 1 as the perf sources expect version 1

https://github.com/torvalds/linux/blob/master/tools/perf/util/jitdump.h#L25

Example use:-
MONO_ENV_OPTIONS="--jitdump" perf record -k 1 dotnet <path/to/binary>
perf inject --jit -i perf.data -o perf.jit.data
perf report -i perf.jit.data

cc: @fanyang-mono

@ghostghost added area-Codegen-JIT-mono community-contribution Indicates that the PR has been added by a community member labels Apr 20, 2023
record.code_index = ++code_index;

// TODO: write debugInfo and unwindInfo immediately before the JitCodeLoadRecord (while lock is held).
DebugEntry ent;

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This should follow the mono coding conventions, see the rest of the file for examples.

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

done. let me know if there is anything else

@saitama951saitama951 left a comment

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

changed the style to adhere to the mono coding conventions

record.code_index = ++code_index;

// TODO: write debugInfo and unwindInfo immediately before the JitCodeLoadRecord (while lock is held).
DebugEntry ent;

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

done. let me know if there is anything else

@saitama951
saitama951 requested a review from vargazApril 21, 2023 04:52

@fanyang-monofanyang-mono left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Please go through your change and fix the coding style. I've pointed out a few examples for you.

Comment threadsrc/mono/mono/mini/mini-runtime.c Outdated
guint32 line;
guint32 discrim;
char name[];
}DebugEntry;

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
}DebugEntry;
}DebugEntry;

Comment threadsrc/mono/mono/mini/mini-runtime.c Outdated
guint64 code_addr;
guint64 nr_entry;
DebugEntry debug_entry[];
}JitCodeDebug;

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
}JitCodeDebug;
}JitCodeDebug;

Comment threadsrc/mono/mono/mini/mini-runtime.c Outdated
DebugEntry debug_entry[];
}JitCodeDebug;

static void add_basic_JitCodeDebug_info(JitCodeDebug *record);

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
staticvoidadd_basic_JitCodeDebug_info(JitCodeDebug*record);
staticvoidadd_basic_JitCodeDebug_info(JitCodeDebug*record);

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

In mono code base, we add a space between the function name and the "(". Please follow this function call style for all the code change in this PR.

Comment threadsrc/mono/mono/mini/mini-runtime.c Outdated
rec.code_addr = (guint64)dmji->code_start;
rec.header.total_size = sizeof(rec) + sizeof(ent) + 1;
rec.nr_entry=1;
for(i=0;i < dmji->num_line_numbers;++i){

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Fix code style

Comment threadsrc/mono/mono/mini/mini-runtime.c Outdated

loc = mono_debug_lookup_source_location_by_il(jinfo->d.method,dmji->line_numbers[i].il_offset,NULL);

if(!(loc)

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
if(!(loc)
if(!loc)

@saitama951

Copy link
Copy Markdown
ContributorAuthor

Please go through your change and fix the coding style. I've pointed out a few examples for you.

Thank you for helping me out with the code style. I have made the changes accordingly.

@saitama951

saitama951 commented May 4, 2023

Copy link
Copy Markdown
ContributorAuthor

@fanyang-mono is there any other changes required to be made?
maybe we can merge the code?

@directhex

Copy link
Copy Markdown
Contributor

@vargaz@lambdageek can someone see if this is ready to merge now?

@fanyang-mono
fanyang-mono merged commit a5a485c into dotnet:mainMay 17, 2023
@shivanirmishra

shivanirmishra commented May 25, 2023

Copy link
Copy Markdown

@fanyang-mono
The fix did not work for me.
The steps we tried are:

1) dotnet build
2) MONO_ENV_OPTIONS="--jitmap --jitdump" perf record -k 1 dotnet run
3) perf inject --jit -i perf.data -o perf.jit.data
4) perf report -i perf.jit.data

It's creating multiple sets of .map and .dump files in the /tmp/ folder for one particular workload.

Error:
objdump: /tmp/perf-886285.map: File format not recognized

Perf tool is able to read .map files to do symbol resolution and show the data. And due to this, we are able to see the functions in the profile but not the annotations inside that which requires a .dump file.

@saitama951

saitama951 commented May 26, 2023

Copy link
Copy Markdown
ContributorAuthor

@shivanirmishra The runtime should generate the .dump file. can you cross check that under the /tmp/?
if that is present can you check if the dumps are being read by using the strace?

I faced a similar issue and fixed the same : #82520

@shivanirmishra

Copy link
Copy Markdown

Hi @saitama951, yes runtime is generating the .dump file in the/tmp/ folder.
But Strace is not showing any references to dump files.
The observations we had are with .NET7.0 so is the above fix available only on .NET8 or later?

@saitama951

Copy link
Copy Markdown
ContributorAuthor

@shivanirmishra the fix should be there in .NET 8 preview 4 or you can cherry pick the commit.

@shivanirmishra

Copy link
Copy Markdown

@saitama951
We tried with .NET8 Preview 4, but getting the below issue after using perf inject:
image
Also when we are doing Strace on the same, we can see the MMAP calls there:
image
So, what can cause this wrong jitdump version 2, expected 1 issue in perf inject?

@saitama951

saitama951 commented May 31, 2023

Copy link
Copy Markdown
ContributorAuthor

@shivanirmishra I have fixed the wrong versioning of jitdump in the current PR itself, probably this fix isn't incorporated in this release I guess , I would suggest you can build dotnet from source that should work fine.

@shivanirmishra

Copy link
Copy Markdown

Hi @saitama951, thank you for your help.
This fix is working for the sample dotnet code.
But while building dotnet for the workload from https://github.com/dotnet/performance, we are facing the below issues with the power system:
image
Any suggestion regarding the above error?
Also, I have changed the target frameworks to .net8 from .net7.

@fanyang-mono

Copy link
Copy Markdown
Member

/backport to release/7.0-staging

@github-actions

Copy link
Copy Markdown
Contributor

Started backporting to release/7.0-staging: https://github.com/dotnet/runtime/actions/runs/5248244227

@shivanirmishra

Copy link
Copy Markdown

@saitama951@fanyang-mono
We are facing the above issue on .net8 on power, so will this backporting to 7.0 fix the issue on .net8 as well?

@saitama951

Copy link
Copy Markdown
ContributorAuthor

@shivanirmishra It seems source code annotation fails on top of the BenchmarkDotnet library. it works for sample programs without the BDN. I have been manually looking into the jitted-so's, everything looks good there as well.

@shivanirmishra

Copy link
Copy Markdown

Thanks @saitama951
It works for other workloads that run for a shorter duration.
But if we are trying to run a longer workload, then sometimes it's showing "unknown" in the profile on both X86 and Power systems.

For Example: after running the BinaryTrees_5 workload from https://github.com/dotnet/performance, we get the below profiles.

Before Inject:
image
After Inject:
image

@fanyang-mono

Copy link
Copy Markdown
Member

@saitama951@fanyang-mono We are facing the above issue on .net8 on power, so will this backporting to 7.0 fix the issue on .net8 as well?

Yes, I am working on backporting the fixes to regressions to 7.0 now.

@fanyang-mono

Copy link
Copy Markdown
Member

@shivanirmishra We will get this fix in the next possible servicing release.

@shivanirmishra

Copy link
Copy Markdown

@saitama951@fanyang-mono
The above fix is working for some applications but not for all.
For example, It's not working if we increase the no of iterations for the same application

This is the profile with 100 iterations of some ml.net workload:

image

This is the profile with 10k iterations of the same workload:

image

The above profiles are after perf inject.

Any suggestions or ideas for why this is not working with larger overhead?

@saitama951

Copy link
Copy Markdown
ContributorAuthor

@shivanirmishra I have proposed the fix for the issue that you were facing.

#88373

@shivanirmishra

Copy link
Copy Markdown

Hi @saitama951@fanyang-mono
This is another sample code for matrix multiplication, in which we are seeing the same above issue.

MONO_ENV_OPTIONS="--jitmap --jitdump" perf record -k 1 /home/user/dotnet run

Dimension of the matrix: 2000x3 and 3x2000, and running the MultiplyMatrices function once.

perf Report -i perf.data

image

perf inject -j -i ./perf.data -o ./perf.jit.data

perf report -i perf.jit.data

image

We are not able to see the main function MultiplyMatrices anywhere in the profile.
And wherever we are seeing the project name (new-matrix) as a command in the profile, we don’t see any functions/annotations for some so it might be splitting the main function into some parts and we are not able to resolve the same.

image

@saitama951

saitama951 commented Jul 4, 2023

Copy link
Copy Markdown
ContributorAuthor

@shivanirmishra have you applied the diff changes ?

@shivanirmishra

Copy link
Copy Markdown

@saitama951 Yes, It's working.
Thank you.

@ghostghost locked as resolved and limited conversation to collaborators Aug 5, 2023
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

area-Codegen-JIT-monocommunity-contributionIndicates that the PR has been added by a community member

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants

@saitama951@directhex@shivanirmishra@fanyang-mono@vargaz