Commit 4fe854e
committed
estargz: parallelize MinChunkSize builds
Builds with MinChunkSize > 0 run on a single core, no matter how large
the layer is.
They are serial because the writer maintains one invariant -- every
gzip stream except the last holds at least MinChunkSize compressed
bytes -- and does so by placing each stream boundary based on the
compressed size of everything written before it.
The build can be parallelized while preserving the invariant as long
as:
- each worker's slice of the tar holds at least MinChunkSize * 1032
uncompressed bytes (1032 is DEFLATE's maximum compression ratio), so
every slice fills at least one full stream;
- the trailing stream of a slice, which usually ends below the minimum,
is folded into the stream before it. The writer now withholds a full
stream's terminator until the next stream also reaches the minimum,
and folds the tail back by replaying its buffered raw bytes. Only the
short tail is ever recompressed.
The invariant also comes out stronger: the trailing stream of the whole
blob, previously allowed to end short, is folded as well. A stream now
ends below MinChunkSize if and only if the data itself is smaller (or a
prefetch landmark forces a boundary).
Note that with this change MinChunkSize layer digests differ from
previous releases: large layers build in parallel (the layout depends
on GOMAXPROCS, like every other eStargz build) and trailing short
streams are folded away. eStargz makes no cross-version byte stability
promise.
Signed-off-by: Simone Primarosa <simone.primarosa@gmail.com>1 parent d4043f0 commit 4fe854e
6 files changed
Lines changed: 483 additions & 48 deletions
File tree
- cmd/ctr-remote/commands
- docs
- estargz
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
82 | 82 | | |
83 | 83 | | |
84 | 84 | | |
85 | | - | |
| 85 | + | |
86 | 86 | | |
87 | 87 | | |
88 | 88 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
115 | 115 | | |
116 | 116 | | |
117 | 117 | | |
118 | | - | |
| 118 | + | |
119 | 119 | | |
120 | 120 | | |
121 | 121 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
4 | 4 | | |
5 | 5 | | |
6 | 6 | | |
7 | | - | |
| 7 | + | |
8 | 8 | | |
9 | | - | |
| 9 | + | |
10 | 10 | | |
11 | 11 | | |
12 | 12 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
123 | 123 | | |
124 | 124 | | |
125 | 125 | | |
| 126 | + | |
| 127 | + | |
| 128 | + | |
| 129 | + | |
126 | 130 | | |
127 | 131 | | |
128 | 132 | | |
| |||
135 | 139 | | |
136 | 140 | | |
137 | 141 | | |
138 | | - | |
139 | | - | |
| 142 | + | |
| 143 | + | |
140 | 144 | | |
141 | 145 | | |
142 | 146 | | |
| |||
246 | 250 | | |
247 | 251 | | |
248 | 252 | | |
249 | | - | |
250 | | - | |
251 | | - | |
| 253 | + | |
| 254 | + | |
252 | 255 | | |
253 | | - | |
| 256 | + | |
| 257 | + | |
| 258 | + | |
| 259 | + | |
| 260 | + | |
| 261 | + | |
| 262 | + | |
254 | 263 | | |
255 | 264 | | |
256 | 265 | | |
| |||
393 | 402 | | |
394 | 403 | | |
395 | 404 | | |
| 405 | + | |
| 406 | + | |
| 407 | + | |
| 408 | + | |
| 409 | + | |
| 410 | + | |
| 411 | + | |
| 412 | + | |
| 413 | + | |
| 414 | + | |
| 415 | + | |
| 416 | + | |
| 417 | + | |
| 418 | + | |
| 419 | + | |
| 420 | + | |
| 421 | + | |
| 422 | + | |
| 423 | + | |
| 424 | + | |
| 425 | + | |
| 426 | + | |
| 427 | + | |
| 428 | + | |
| 429 | + | |
| 430 | + | |
| 431 | + | |
| 432 | + | |
| 433 | + | |
| 434 | + | |
| 435 | + | |
| 436 | + | |
| 437 | + | |
| 438 | + | |
| 439 | + | |
| 440 | + | |
| 441 | + | |
| 442 | + | |
| 443 | + | |
| 444 | + | |
| 445 | + | |
| 446 | + | |
| 447 | + | |
| 448 | + | |
396 | 449 | | |
397 | 450 | | |
398 | 451 | | |
| |||
0 commit comments