Skip to content
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

feat(lib-storage): improve performance by reducing buffer copies #5078

Merged
merged 2 commits into from
Mar 12, 2024

Conversation

kuhe
Copy link
Contributor

@kuhe kuhe commented Aug 11, 2023

Issue

this is a refresh of #2612 taking into account migrated packages

Testing

  • unit
  • integration
  • e2e

@kuhe kuhe force-pushed the feat/buffer branch 4 times, most recently from b69fd81 to 845af4a Compare March 12, 2024 15:34
@kuhe
Copy link
Contributor Author

kuhe commented Mar 12, 2024

Prior to changes, uploading data of 20 million bytes:

// Observer code
const ogBuffer = global.Buffer;
const ogBufferFrom = global.Buffer.from;

let bytesCopied = 0;

class BufferWrapper extends ogBuffer {
  static from(...args) {
    const buf = ogBufferFrom(...args);
    if (typeof args[0] === "string") {
      console.log(`Creating buffer from string with length=${buf.byteLength}`);
      bytesCopied += buf.byteLength;
    } else {
      console.log(`Static ${args.length === 3 ? "view-" : "copy-"}constructing buffer of length=${buf.byteLength}`);
      console.log("\t", args.length, args[0].constructor.name, ...args.slice(1));
      if (args.length === 3) {
      } else {
        bytesCopied += buf.byteLength;
      }
    }
    return buf;
  }
}

global.Buffer = BufferWrapper;
ogBuffer.from = BufferWrapper.from;
Static copy-constructing buffer of length=20240000
         1 Buffer
Creating buffer from string with length=40
Creating buffer from string with length=20
Static view-constructing buffer of length=20
         3 ArrayBuffer 6848 20
Creating buffer from string with length=1286
Static view-constructing buffer of length=1286
         3 ArrayBuffer 6872 1286
Creating buffer from string with length=44
Creating buffer from string with length=8
Static view-constructing buffer of length=8
         3 ArrayBuffer 48 8
Creating buffer from string with length=9
Static view-constructing buffer of length=9
         3 ArrayBuffer 56 9
Creating buffer from string with length=2
Static view-constructing buffer of length=2
         3 ArrayBuffer 72 2
Creating buffer from string with length=12
Static view-constructing buffer of length=12
         3 ArrayBuffer 80 12
Creating buffer from string with length=133
Static view-constructing buffer of length=133
         3 ArrayBuffer 96 133
Static view-constructing buffer of length=383
         3 ArrayBuffer 0 383
Static view-constructing buffer of length=5242880
         3 ArrayBuffer 0 5242880
Static view-constructing buffer of length=5242880
         3 ArrayBuffer 5242880 5242880
Static view-constructing buffer of length=5242880
         3 ArrayBuffer 10485760 5242880
Static view-constructing buffer of length=4511360
         3 ArrayBuffer 0 4511360
Creating buffer from string with length=40
Creating buffer from string with length=20
Static view-constructing buffer of length=20
         3 ArrayBuffer 656 20
Creating buffer from string with length=1529
Static view-constructing buffer of length=1529
         3 ArrayBuffer 680 1529
Creating buffer from string with length=40
Creating buffer from string with length=20
Static view-constructing buffer of length=20
         3 ArrayBuffer 2256 20
Creating buffer from string with length=1529
Static view-constructing buffer of length=1529
         3 ArrayBuffer 2280 1529
Creating buffer from string with length=40
Creating buffer from string with length=20
Static view-constructing buffer of length=20
         3 ArrayBuffer 3856 20
Creating buffer from string with length=1529
Static view-constructing buffer of length=1529
         3 ArrayBuffer 3880 1529
Creating buffer from string with length=40
Creating buffer from string with length=20
Static view-constructing buffer of length=20
         3 ArrayBuffer 5456 20
Creating buffer from string with length=1529
Static view-constructing buffer of length=1529
         3 ArrayBuffer 5480 1529
Creating buffer from string with length=133
Static view-constructing buffer of length=133
         3 ArrayBuffer 7016 133
Creating buffer from string with length=133
Static view-constructing buffer of length=133
         3 ArrayBuffer 7152 133
Creating buffer from string with length=133
Static view-constructing buffer of length=133
         3 ArrayBuffer 7288 133
Creating buffer from string with length=133
Static view-constructing buffer of length=133
         3 ArrayBuffer 7424 133
Static copy-constructing buffer of length=5242880
         1 Buffer
Static copy-constructing buffer of length=4511360
         1 Buffer
Static copy-constructing buffer of length=5242880
         1 Buffer
Static copy-constructing buffer of length=5242880
         1 Buffer
Creating buffer from string with length=521
Creating buffer from string with length=521
Static view-constructing buffer of length=521
         3 ArrayBuffer 0 521
Creating buffer from string with length=40
Creating buffer from string with length=20
Static view-constructing buffer of length=20
         3 ArrayBuffer 568 20
Creating buffer from string with length=1517
Static view-constructing buffer of length=1517
         3 ArrayBuffer 592 1517
Creating buffer from string with length=133
Static view-constructing buffer of length=133
         3 ArrayBuffer 2112 133
Creating buffer from string with length=521
Static view-constructing buffer of length=349
         3 ArrayBuffer 0 349
Static view-constructing buffer of length=349
         3 ArrayBuffer 0 349
DONE 200 Readable
DONE bytes copied: 40,491,715

After changes to this and node-http-handler

Creating buffer from string with length=40
Creating buffer from string with length=20
Static view-constructing buffer of length=20
         3 ArrayBuffer 6848 20
Creating buffer from string with length=1286
Static view-constructing buffer of length=1286
         3 ArrayBuffer 6872 1286
Creating buffer from string with length=44
Creating buffer from string with length=8
Static view-constructing buffer of length=8
         3 ArrayBuffer 48 8
Creating buffer from string with length=9
Static view-constructing buffer of length=9
         3 ArrayBuffer 56 9
Creating buffer from string with length=2
Static view-constructing buffer of length=2
         3 ArrayBuffer 72 2
Creating buffer from string with length=12
Static view-constructing buffer of length=12
         3 ArrayBuffer 80 12
Creating buffer from string with length=133
Static view-constructing buffer of length=133
         3 ArrayBuffer 96 133
Static view-constructing buffer of length=383
         3 ArrayBuffer 0 383
Static view-constructing buffer of length=5242880
         3 ArrayBuffer 0 5242880
Static view-constructing buffer of length=5242880
         3 ArrayBuffer 5242880 5242880
Static view-constructing buffer of length=5242880
         3 ArrayBuffer 10485760 5242880
Static view-constructing buffer of length=4511360
         3 ArrayBuffer 15728640 4511360
Creating buffer from string with length=40
Creating buffer from string with length=20
Static view-constructing buffer of length=20
         3 ArrayBuffer 656 20
Creating buffer from string with length=1529
Static view-constructing buffer of length=1529
         3 ArrayBuffer 680 1529
Creating buffer from string with length=40
Creating buffer from string with length=20
Static view-constructing buffer of length=20
         3 ArrayBuffer 2256 20
Creating buffer from string with length=1529
Static view-constructing buffer of length=1529
         3 ArrayBuffer 2280 1529
Creating buffer from string with length=40
Creating buffer from string with length=20
Static view-constructing buffer of length=20
         3 ArrayBuffer 3856 20
Creating buffer from string with length=1529
Static view-constructing buffer of length=1529
         3 ArrayBuffer 3880 1529
Creating buffer from string with length=40
Creating buffer from string with length=20
Static view-constructing buffer of length=20
         3 ArrayBuffer 5456 20
Creating buffer from string with length=1529
Static view-constructing buffer of length=1529
         3 ArrayBuffer 5480 1529
Creating buffer from string with length=133
Static view-constructing buffer of length=133
         3 ArrayBuffer 7016 133
Creating buffer from string with length=133
Static view-constructing buffer of length=133
         3 ArrayBuffer 7152 133
Creating buffer from string with length=133
Static view-constructing buffer of length=133
         3 ArrayBuffer 7288 133
Creating buffer from string with length=133
Static view-constructing buffer of length=133
         3 ArrayBuffer 7424 133
Creating buffer from string with length=521
Static view-constructing buffer of length=521
         3 ArrayBuffer 7560 521
Creating buffer from string with length=40
Creating buffer from string with length=20
Static view-constructing buffer of length=20
         3 ArrayBuffer 8128 20
Creating buffer from string with length=1517
Static view-constructing buffer of length=1517
         3 ArrayBuffer 0 1517
Creating buffer from string with length=133
Static view-constructing buffer of length=133
         3 ArrayBuffer 1520 133
Static view-constructing buffer of length=349
         3 ArrayBuffer 0 349
Static view-constructing buffer of length=349
         3 ArrayBuffer 0 349
DONE 200 Readable
DONE bytes copied: 10,673

@kuhe kuhe merged commit e2fb9d5 into aws:main Mar 12, 2024
4 checks passed
@kuhe kuhe deleted the feat/buffer branch March 12, 2024 16:09
Copy link

This thread has been automatically locked since there has not been any recent activity after it was closed. Please open a new issue for related bugs and link to relevant comments in this thread.

@github-actions github-actions bot locked as resolved and limited conversation to collaborators Mar 28, 2024
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

3 participants