[feat]: change erasure coding default block size from 10MiB to 1MiB (#11721)
major performance improvements in range GETs to avoid large
read amplification when ranges are tiny and random
```
-------------------
Operation: GET
Operations: 142014 -> 339421
Duration: 4m50s -> 4m56s
* Average: +139.41% (+1177.3 MiB/s) throughput, +139.11% (+658.4) obj/s
* Fastest: +125.24% (+1207.4 MiB/s) throughput, +132.32% (+612.9) obj/s
* 50% Median: +139.06% (+1175.7 MiB/s) throughput, +133.46% (+660.9) obj/s
* Slowest: +203.40% (+1267.9 MiB/s) throughput, +198.59% (+753.5) obj/s
```
TTFB from 10MiB BlockSize
```
* First Access TTFB: Avg: 81ms, Median: 61ms, Best: 20ms, Worst: 2.056s
```
TTFB from 1MiB BlockSize
```
* First Access TTFB: Avg: 22ms, Median: 21ms, Best: 8ms, Worst: 91ms
```
Full object reads however do see a slight change which won't be
noticeable in real world, so not doing any comparisons
TTFB still had improvements with full object reads with 1MiB
```
* First Access TTFB: Avg: 68ms, Median: 35ms, Best: 11ms, Worst: 1.16s
```
v/s
TTFB with 10MiB
```
* First Access TTFB: Avg: 388ms, Median: 98ms, Best: 20ms, Worst: 4.156s
```
This change should affect all new uploads, previous uploads should
continue to work with business as usual. But dramatic improvements can
be seen with these changes.
2021-03-06 17:09:34 -05:00
|
|
|
FROM golang:1.16-alpine as builder
|
2020-11-20 14:27:43 -05:00
|
|
|
|
|
|
|
LABEL maintainer="MinIO Inc <dev@min.io>"
|
|
|
|
|
|
|
|
ENV GOPATH /go
|
|
|
|
ENV CGO_ENABLED 0
|
|
|
|
ENV GO111MODULE on
|
|
|
|
|
|
|
|
RUN \
|
2020-12-08 14:14:06 -05:00
|
|
|
apk add --no-cache git && \
|
|
|
|
git clone https://github.com/minio/minio && cd minio && \
|
|
|
|
git checkout master && go install -v -ldflags "$(go run buildscripts/gen-ldflags.go)"
|
2020-11-20 14:27:43 -05:00
|
|
|
|
2020-12-08 14:14:06 -05:00
|
|
|
FROM registry.access.redhat.com/ubi8/ubi-minimal:8.3
|
|
|
|
|
|
|
|
ARG TARGETARCH
|
2020-11-20 14:27:43 -05:00
|
|
|
|
|
|
|
ENV MINIO_ACCESS_KEY_FILE=access_key \
|
2020-12-08 14:14:06 -05:00
|
|
|
MINIO_SECRET_KEY_FILE=secret_key \
|
2021-01-05 13:22:57 -05:00
|
|
|
MINIO_ROOT_USER_FILE=access_key \
|
|
|
|
MINIO_ROOT_PASSWORD_FILE=secret_key \
|
2020-12-08 14:14:06 -05:00
|
|
|
MINIO_KMS_MASTER_KEY_FILE=kms_master_key \
|
|
|
|
MINIO_SSE_MASTER_KEY_FILE=sse_master_key \
|
|
|
|
MINIO_UPDATE_MINISIGN_PUBKEY="RWTx5Zr1tiHQLwG9keckT0c45M3AGeHD6IvimQHpyRywVWGbP1aVSGav"
|
2020-11-20 14:27:43 -05:00
|
|
|
|
|
|
|
EXPOSE 9000
|
|
|
|
|
|
|
|
COPY --from=builder /go/bin/minio /usr/bin/minio
|
2020-12-08 14:14:06 -05:00
|
|
|
COPY --from=builder /go/minio/CREDITS /licenses/CREDITS
|
|
|
|
COPY --from=builder /go/minio/LICENSE /licenses/LICENSE
|
2020-11-20 14:27:43 -05:00
|
|
|
COPY --from=builder /go/minio/dockerscripts/docker-entrypoint.sh /usr/bin/
|
|
|
|
|
|
|
|
RUN \
|
2020-12-08 14:14:06 -05:00
|
|
|
microdnf update --nodocs && \
|
|
|
|
microdnf install curl ca-certificates shadow-utils util-linux --nodocs && \
|
2020-12-08 17:28:12 -05:00
|
|
|
microdnf clean all
|
2020-11-20 14:27:43 -05:00
|
|
|
|
|
|
|
ENTRYPOINT ["/usr/bin/docker-entrypoint.sh"]
|
|
|
|
|
|
|
|
VOLUME ["/data"]
|
|
|
|
|
2020-12-08 14:14:06 -05:00
|
|
|
CMD ["minio", "server", "/data"]
|