-
Notifications
You must be signed in to change notification settings - Fork 322
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
keep allocations as small as possible #306
Conversation
see --> IBM/sarama#1831 |
zstd/seqdec.go
Outdated
s.out = s.out[:len(s.out)-maxBlockSize] | ||
// over-allocating here can create a large amount of GC pressure so we try to keep | ||
// it as contained as possible | ||
addBytes := 1024 + (size - len(s.out)) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
addBytes := 1024 + (size - len(s.out)) | |
used := len(s.out) - startSize | |
addBytes := 256 + ll + ml + used>>2 | |
// Clamp to max block size. | |
if used+addBytes > maxBlockSize { | |
addBytes = maxBlockSize - used | |
} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Maybe something like this?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
ok gave that change a whirl
there's about a 500-750Mb difference in the ram usage, higher using method, then the original size - len
one, but it does seem to not get out of control, which is the desired effect.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Great. I will merge when Ci tests are done and probably release it tomorrow.
Under some large streaming volume conditions (kafka consumption) this allocation can create tremendous GC pressure, where setting GOGC <= 10 still is not enough. Since this condition does not happen "very often" (but seems to happen more often in this streaming case then originally advertised by the original comment) we only allocate as much as we need not an extra 2Mb slab.
Conditions:
Before this change:
After this change: