Skip to content

Conversation

@bnoordhuis
Copy link
Member

Commits dcb6929, 4396beb and 8a96d05 turned the O(n) scan in
InternalModuleReadJSON() into an O(4n) scan. Fix the performance
regression by turning that into a linear scan again.

@nodejs-github-botnodejs-github-bot added c++ Issues and PRs that require attention from people who are familiar with C++. fs Issues and PRs related to the fs subsystem / file system. labels Jan 13, 2020
@nodejs-github-bot
Copy link
Collaborator

Copy link
Contributor

@guybedfordguybedford left a comment

Choose a reason for hiding this comment

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

Great to see this, thanks.

Copy link
Member

Choose a reason for hiding this comment

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

could you use if statements here to avoid goto?

Copy link
MemberAuthor

Choose a reason for hiding this comment

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

No, for two reasons:

  1. Aesthetic. It keeps the level of indent small.
  2. Performance. g++ 9.2.1 at -O3 doesn't move the block out of the way. The goto keeps the inner loop at around 80 bytes:
Details
 10ec: 80 f9 22 cmp $0x22,%cl 10ef: 74 1f je 1110 <main+0x70> 10f1: 80 f9 5c cmp $0x5c,%cl 10f4: 75 44 jne 113a <main+0x9a> 10f6: 48 39 fa cmp %rdi,%rdx 10f9: 73 65 jae 1160 <main+0xc0> 10fb: 0f b6 4e 01 movzbl 0x1(%rsi),%ecx 10ff: 80 f9 22 cmp $0x22,%cl 1102: 74 7c je 1180 <main+0xe0> 1104: 48 89 d6 mov %rdx,%rsi 1107: 48 8d 56 01 lea 0x1(%rsi),%rdx 110b: 80 f9 22 cmp $0x22,%cl 110e: 75 e1 jne 10f1 <main+0x51> 1110: 49 8d 48 08 lea 0x8(%r8),%rcx 1114: 49 89 10 mov %rdx,(%r8) 1117: 4c 39 c9 cmp %r9,%rcx 111a: 72 34 jb 1150 <main+0xb0> 111c: 48 8b 34 24 mov (%rsp),%rsi 1120: 48 89 f1 mov %rsi,%rcx 1123: 48 f7 d1 not %rcx 1126: 48 03 4c 24 08 add 0x8(%rsp),%rcx 112b: 48 83 f9 04 cmp $0x4,%rcx 112f: 74 5f je 1190 <main+0xf0> 1131: 4d 89 d0 mov %r10,%r8 1134: 48 83 f9 07 cmp $0x7,%rcx 1138: 74 76 je 11b0 <main+0x110> 113a: 48 39 fa cmp %rdi,%rdx 113d: 73 21 jae 1160 <main+0xc0> 113f: 0f b6 0a movzbl (%rdx),%ecx 1142: 48 89 d6 mov %rdx,%rsi 1145: eb a1 jmp 10e8 <main+0x48> 

(-O3 is kind of disappointing; with -Os it fits in a single cache line.)

I'll add a comment explaining why it's there.

Copy link
Member

@addaleaxaddaleax left a comment

Choose a reason for hiding this comment

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

Code LGTM but the commit message should be changed to something that’s a) descriptive of what this commit actually does and b) not a wordplay on a right-wing slogan before or during merging.

ryanmurakami
ryanmurakami previously requested changes Jan 13, 2020
Copy link
Contributor

@ryanmurakamiryanmurakami left a comment

Choose a reason for hiding this comment

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

@bnoordhuis The Moderation Team is requesting that you change the commit message and pull request title. The Moderation Team believes the similarities to an American politician's campaign slogan is not in line with the Code of Conduct's guide to use "welcoming and inclusive language". The Moderation Team is happy to provide external references should you need them.

@bnoordhuisbnoordhuis changed the title src: make InternalModuleReadJSON great againsrc: make InternalModuleReadJSON linear againJan 14, 2020
Commits dcb6929, 4396beb and 8a96d05 turned the O(n) scan in InternalModuleReadJSON() into an O(4n) scan. Fix the performance regression by turning that into a linear scan again.
@bnoordhuis
Copy link
MemberAuthor

not a wordplay on a right-wing slogan before or during merging.

A play on a left-wing slogan would've been okay then? I've changed it to something more boring, PTAL.

@Trott
Copy link
Member

Trott commented Jan 15, 2020

not a wordplay on a right-wing slogan before or during merging.

A play on a left-wing slogan would've been okay then?

The phrase is one that provokes strong reactions. I think it is reasonable to request that it be changed in a situation like this where using the phrase is unnecessary.

But yes, the fact that the slogan is right-wing is not really the problem, per se. Had it been a play on "Read my lips: no new taxes", I don't think it would generate the same reaction.

FWIW, I can definitely think of a few left-wing slogans that would be problematic.

I've changed it to something more boring, PTAL.

Let's make it even more boring and remove all vestiges of the wordplay. src: fix performance regression in node_file.cc or maybe src: fix performance regression in InternalModuleReadJSON?

Copy link
Contributor

@hybristhybrist left a comment

Choose a reason for hiding this comment

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

LGTM with updated commit message

@nodejs-github-bot

This comment has been minimized.

@nodejs-github-bot
Copy link
Collaborator

Trott pushed a commit that referenced this pull request Jan 15, 2020
Commits dcb6929, 4396beb and 8a96d05 turned the O(n) scan in InternalModuleReadJSON() into an O(4n) scan. Fix the performance regression by turning that into a linear scan again. PR-URL: #31343 Reviewed-By: Colin Ihrig <[email protected]> Reviewed-By: Guy Bedford <[email protected]> Reviewed-By: David Carlier <[email protected]> Reviewed-By: Anna Henningsen <[email protected]> Reviewed-By: Rich Trott <[email protected]> Reviewed-By: Jan Krems <[email protected]>
@Trott
Copy link
Member

Landed in 6623481.

I updated the commit message on landing.

@TrottTrott closed this Jan 15, 2020
@ljharbljharb changed the title src: make InternalModuleReadJSON linear againsrc: fix performance regression in node_file.ccJan 15, 2020
MylesBorins pushed a commit that referenced this pull request Jan 16, 2020
Commits dcb6929, 4396beb and 8a96d05 turned the O(n) scan in InternalModuleReadJSON() into an O(4n) scan. Fix the performance regression by turning that into a linear scan again. PR-URL: #31343 Reviewed-By: Colin Ihrig <[email protected]> Reviewed-By: Guy Bedford <[email protected]> Reviewed-By: David Carlier <[email protected]> Reviewed-By: Anna Henningsen <[email protected]> Reviewed-By: Rich Trott <[email protected]> Reviewed-By: Jan Krems <[email protected]>
@codebyterecodebytere mentioned this pull request Jan 16, 2020
codebytere pushed a commit that referenced this pull request Mar 14, 2020
Commits dcb6929, 4396beb and 8a96d05 turned the O(n) scan in InternalModuleReadJSON() into an O(4n) scan. Fix the performance regression by turning that into a linear scan again. PR-URL: #31343 Reviewed-By: Colin Ihrig <[email protected]> Reviewed-By: Guy Bedford <[email protected]> Reviewed-By: David Carlier <[email protected]> Reviewed-By: Anna Henningsen <[email protected]> Reviewed-By: Rich Trott <[email protected]> Reviewed-By: Jan Krems <[email protected]>
codebytere pushed a commit that referenced this pull request Mar 17, 2020
Commits dcb6929, 4396beb and 8a96d05 turned the O(n) scan in InternalModuleReadJSON() into an O(4n) scan. Fix the performance regression by turning that into a linear scan again. PR-URL: #31343 Reviewed-By: Colin Ihrig <[email protected]> Reviewed-By: Guy Bedford <[email protected]> Reviewed-By: David Carlier <[email protected]> Reviewed-By: Anna Henningsen <[email protected]> Reviewed-By: Rich Trott <[email protected]> Reviewed-By: Jan Krems <[email protected]>
@codebyterecodebytere mentioned this pull request Mar 17, 2020
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

c++Issues and PRs that require attention from people who are familiar with C++.fsIssues and PRs related to the fs subsystem / file system.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

10 participants

@bnoordhuis@nodejs-github-bot@Trott@hybrist@guybedford@ryanmurakami@addaleax@cjihrig@devnexen@devsnek