From 2045b62caca89fb679f93e3c293871c37d1f3641 Mon Sep 17 00:00:00 2001 From: "Antoine R. Dumont (@ardumont)" <ardumont@softwareheritage.org> Date: Fri, 31 Jan 2025 16:42:40 +0100 Subject: [PATCH 1/8] graphql: Install dependencies faster This gains around 6 to 7 seconds for this application only. It's probably a lot more for some packages with a high number of dependencies. In any case, if we generalize this, we can gain some minutes when we have to build lots of images (e.g. from any tag set on swh-storage, swh-objstorage, swh-core, swh-scheduler, swh-model, etc...). [1] master ``` /usr/bin/time docker build --no-cache -t swh-graphql apps/swh-graphql Successfully tagged swh-graphql:latest 0.02user 0.06system 0:33.23elapsed 0%CPU (0avgtext+0avgdata 41112maxresident)k 0inputs+0outputs (0major+2522minor)pagefaults 0swaps Successfully tagged swh-graphql:latest 0.05user 0.02system 0:32.30elapsed 0%CPU (0avgtext+0avgdata 40768maxresident)k 0inputs+0outputs (0major+2583minor)pagefaults 0swaps Successfully tagged swh-graphql:latest 0.03user 0.04system 0:32.61elapsed 0%CPU (0avgtext+0avgdata 38588maxresident)k 0inputs+0outputs (0major+2562minor)pagefaults 0swaps ``` [2] dev branch ``` /usr/bin/time docker build --no-cache -t swh-graphql-with-uv apps/swh-graphql Successfully tagged swh-graphql-with-uv:latest 0.01user 0.03system 0:26.56elapsed 0%CPU (0avgtext+0avgdata 38856maxresident)k 0inputs+0outputs (0major+2570minor)pagefaults 0swaps Successfully tagged swh-graphql-with-uv:latest 0.03user 0.01system 0:26.87elapsed 0%CPU (0avgtext+0avgdata 39852maxresident)k 0inputs+0outputs (0major+2471minor)pagefaults 0swaps Successfully tagged swh-graphql-with-uv:latest 0.02user 0.02system 0:25.86elapsed 0%CPU (0avgtext+0avgdata 39524maxresident)k 0inputs+0outputs (0major+2268minor)pagefaults 0swaps ``` --- apps/swh-graphql/Dockerfile | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/apps/swh-graphql/Dockerfile b/apps/swh-graphql/Dockerfile index c24d8cad8..ac62dd6c1 100644 --- a/apps/swh-graphql/Dockerfile +++ b/apps/swh-graphql/Dockerfile @@ -6,22 +6,22 @@ RUN apt-get -y update && \ apt-get install -y libcmph-dev librdkafka-dev && \ apt clean && \ addgroup --gid 1000 swh && \ - useradd --gid 1000 --uid 1000 -m -d /opt/graphql swh && \ + useradd --gid 1000 --uid 1000 -m -d /opt/swh swh && \ mkdir /etc/swh USER swh -WORKDIR /opt/graphql +RUN /usr/local/bin/python -m venv /opt/swh/venv +WORKDIR /opt/swh -COPY --chown=swh:swh requirements-frozen.txt /opt/graphql +ENV PYTHONPATH=/opt/swh/venv +ENV PATH=/opt/swh/venv/bin:$PATH -ENV PYTHONPATH=/opt/graphql -ENV PATH=/opt/graphql/.local/bin:$PATH +RUN python -m pip install uv +COPY --chown=swh:swh requirements-frozen.txt /opt/swh/ +RUN uv pip sync --no-cache requirements-frozen.txt -RUN /usr/local/bin/python -m pip install --upgrade pip && \ - pip install --no-cache-dir -r requirements-frozen.txt - -COPY --chown=swh:swh entrypoint.sh /opt/graphql -RUN chmod u+x /opt/graphql/entrypoint.sh +COPY --chown=swh:swh entrypoint.sh /opt/swh/ +RUN chmod u+x /opt/swh/entrypoint.sh ENV SWH_CONFIG_FILENAME=/etc/swh/config.yml ENV PORT 5013 @@ -30,4 +30,4 @@ ENV THREADS 4 ENV WORKERS 2 ENV TIMEOUT 3600 -ENTRYPOINT ["/opt/graphql/entrypoint.sh"] +ENTRYPOINT ["/opt/swh/entrypoint.sh"] -- GitLab From 732ba8f8a98ebff2250268f69c498404fbefbfad Mon Sep 17 00:00:00 2001 From: "Antoine R. Dumont (@ardumont)" <ardumont@softwareheritage.org> Date: Fri, 31 Jan 2025 17:14:44 +0100 Subject: [PATCH 2/8] graph: Install dependencies faster This gains only 4 seconds for the graph. Unsurprisingly the gain is less significant for the graph as most of the time is spent in installing debian package or crates dependencies (with lots of compilation). [1] master ``` $ /usr/bin/time docker build --no-cache -t swh-graph apps/swh-graph ... Successfully tagged swh-graph:latest 0.23user 0.21system 6:16.24elapsed 0%CPU (0avgtext+0avgdata 41756maxresident)k 0inputs+0outputs (0major+2669minor)pagefaults 0swaps ``` [2] ``` $ /usr/bin/time docker build --no-cache -t swh-graph-with-uv apps/swh-graph ... Successfully tagged swh-graph-with-uv:latest 0.20user 0.21system 6:12.39elapsed 0%CPU (0avgtext+0avgdata 38716maxresident)k 0inputs+0outputs (0major+2782minor)pagefaults 0swaps ``` --- apps/swh-graph/Dockerfile | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/apps/swh-graph/Dockerfile b/apps/swh-graph/Dockerfile index a15d9fb3d..24a23831c 100644 --- a/apps/swh-graph/Dockerfile +++ b/apps/swh-graph/Dockerfile @@ -36,15 +36,15 @@ RUN chown $UID:$GID /srv/graph /srv/dataset VOLUME /srv/graph /srv/dataset USER swh +RUN /usr/local/bin/python -m venv /opt/swh/venv WORKDIR /opt/swh -COPY --chown=swh:swh requirements-frozen.txt /opt/swh - -ENV PYTHONPATH=/opt/swh -ENV PATH=/opt/swh/.local/bin:$PATH +ENV PYTHONPATH=/opt/swh/venv +ENV PATH=/opt/swh/venv/bin:$PATH -RUN /usr/bin/python3 -m pip install --upgrade pip --break-system-packages && \ - pip install --no-cache-dir -r requirements-frozen.txt --break-system-packages +RUN python -m pip install uv +COPY --chown=swh:swh requirements-frozen.txt /opt/swh +RUN uv pip sync --no-cache requirements-frozen.txt COPY --from=rust_build /usr/local/cargo/bin/swh-graph* /usr/local/bin/ ENV SWH_CONFIG_FILENAME=/etc/swh/config.yml -- GitLab From 04e60fd92e6779dc7a6d7a4b31a169b8e52249b1 Mon Sep 17 00:00:00 2001 From: "Antoine R. Dumont (@ardumont)" <ardumont@softwareheritage.org> Date: Fri, 31 Jan 2025 17:38:48 +0100 Subject: [PATCH 3/8] deposit: Install dependencies faster This gains around 20 seconds. Unsurprisingly the gain is a bit more significant since there is a lot of dependencies for that kind of frontend applications. [1] master ``` $ /usr/bin/time docker build --no-cache -t swh-deposit apps/swh-deposit ... Successfully tagged swh-deposit:latest 0.11user 0.07system 0:49.05elapsed 0%CPU (0avgtext+0avgdata 38876maxresident)k 8inputs+0outputs (0major+2568minor)pagefaults 0swaps ``` *** uv ``` Successfully tagged swh-deposit-with-uv:latest 0.02user 0.02system 0:28.45elapsed 0%CPU (0avgtext+0avgdata 40412maxresident)k 0inputs+0outputs (0major+2471minor)pagefaults 0swaps ``` --- apps/swh-deposit/Dockerfile | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/apps/swh-deposit/Dockerfile b/apps/swh-deposit/Dockerfile index d674ff86c..7f1ae6847 100644 --- a/apps/swh-deposit/Dockerfile +++ b/apps/swh-deposit/Dockerfile @@ -10,15 +10,15 @@ RUN apt-get -y update && \ mkdir /etc/swh USER swh +RUN /usr/local/bin/python -m venv /opt/swh/venv WORKDIR /opt/swh -COPY --chown=swh:swh requirements-frozen.txt /opt/swh - -ENV PYTHONPATH=/opt/swh -ENV PATH=/opt/swh/.local/bin:$PATH +ENV PYTHONPATH=/opt/swh/venv +ENV PATH=/opt/swh/venv/bin:$PATH -RUN /usr/local/bin/python -m pip install --upgrade pip && \ - pip install --no-cache-dir -r requirements-frozen.txt +RUN python -m pip install uv +COPY --chown=swh:swh requirements-frozen.txt /opt/swh +RUN uv pip sync --no-cache requirements-frozen.txt COPY --chown=swh:swh entrypoint.sh /opt/swh RUN chmod u+x /opt/swh/entrypoint.sh -- GitLab From 72af3192bdb21c5168ed3614969aec41a798c98e Mon Sep 17 00:00:00 2001 From: "Antoine R. Dumont (@ardumont)" <ardumont@softwareheritage.org> Date: Fri, 31 Jan 2025 18:02:03 +0100 Subject: [PATCH 4/8] loader-savecodenow: Install dependencies faster This gains around 45 seconds. Unsurprisingly the gain is a bit more significant since there is a lot of python dependencies in this application. [1] master ``` $ /usr/bin/time docker build --no-cache -t swh-loader-savecodenow apps/swh-loader-savecodenow Successfully tagged swh-loader-savecodenow:latest 0.10user 0.05system 1:37.69elapsed 0%CPU (0avgtext+0avgdata 40896maxresident)k 8inputs+0outputs (0major+2645minor)pagefaults 0swaps ``` [2] with improvments ``` $ /usr/bin/time docker build --no-cache -t swh-loader-savecodenow-with-uv apps/swh-loader-savecodenow ... Successfully tagged swh-loader-savecodenow-with-uv:latest 0.06user 0.05system 0:55.73elapsed 0%CPU (0avgtext+0avgdata 40932maxresident)k 0inputs+0outputs (0major+2587minor)pagefaults 0swaps ``` --- apps/swh-loader-savecodenow/Dockerfile | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/apps/swh-loader-savecodenow/Dockerfile b/apps/swh-loader-savecodenow/Dockerfile index 2c5091542..71bca8ebe 100644 --- a/apps/swh-loader-savecodenow/Dockerfile +++ b/apps/swh-loader-savecodenow/Dockerfile @@ -17,15 +17,15 @@ RUN apt-get -y update && \ mkdir /etc/swh USER swh +RUN /usr/local/bin/python -m venv /opt/swh/venv WORKDIR /opt/swh -COPY --chown=swh:swh requirements-frozen.txt /opt/swh - -ENV PYTHONPATH=/opt/swh -ENV PATH=/opt/swh/.local/bin:$PATH +ENV PYTHONPATH=/opt/swh/venv +ENV PATH=/opt/swh/venv/bin:$PATH -RUN /usr/local/bin/python -m pip install --upgrade pip && \ - pip install --no-cache-dir -r requirements-frozen.txt +RUN python -m pip install uv +COPY --chown=swh:swh requirements-frozen.txt /opt/swh +RUN uv pip sync --no-cache requirements-frozen.txt COPY --chown=swh:swh entrypoint.sh /opt/swh RUN chmod u+x /opt/swh/entrypoint.sh @@ -35,4 +35,4 @@ ENV SWH_WORKER_INSTANCE=loader ENV CONCURRENCY=1 ENV MAX_TASKS_PER_CHILD=5 -ENTRYPOINT ["/opt/swh/entrypoint.sh"] +ENTRYPOINT [ "/opt/swh/entrypoint.sh" ] -- GitLab From be1f53a4b413c5088e399b36f4fbc003ef17d106 Mon Sep 17 00:00:00 2001 From: "Antoine R. Dumont (@ardumont)" <ardumont@softwareheritage.org> Date: Fri, 31 Jan 2025 18:05:26 +0100 Subject: [PATCH 5/8] loader-bzr: Install dependencies faster This gains around 10 seconds. [1] ``` Successfully tagged swh-loader-bzr:latest 0.05user 0.04system 0:44.04elapsed 0%CPU (0avgtext+0avgdata 39236maxresident)k 8inputs+0outputs (0major+2291minor)pagefaults 0swaps ``` [2] ``` Successfully tagged swh-loader-bzr-with-uv:latest 0.03user 0.03system 0:34.54elapsed 0%CPU (0avgtext+0avgdata 40980maxresident)k 0inputs+0outputs (0major+2240minor)pagefaults 0swaps ``` --- apps/swh-loader-bzr/Dockerfile | 12 ++++++------ apps/swh-loader-bzr/entrypoint.sh | 1 + 2 files changed, 7 insertions(+), 6 deletions(-) diff --git a/apps/swh-loader-bzr/Dockerfile b/apps/swh-loader-bzr/Dockerfile index bc37a1722..aa52b3e1f 100644 --- a/apps/swh-loader-bzr/Dockerfile +++ b/apps/swh-loader-bzr/Dockerfile @@ -11,15 +11,15 @@ RUN apt-get -y update && \ mkdir /etc/swh USER swh +RUN /usr/local/bin/python -m venv /opt/swh/venv WORKDIR /opt/swh -COPY --chown=swh:swh requirements-frozen.txt /opt/swh - -ENV PYTHONPATH=/opt/swh -ENV PATH=/opt/swh/.local/bin:$PATH +ENV PYTHONPATH=/opt/swh/venv +ENV PATH=/opt/swh/venv/bin:$PATH -RUN /usr/local/bin/python -m pip install --upgrade pip && \ - pip install --no-cache-dir -r requirements-frozen.txt +RUN python -m pip install uv +COPY --chown=swh:swh requirements-frozen.txt /opt/swh +RUN uv pip sync --no-cache requirements-frozen.txt COPY --chown=swh:swh entrypoint.sh /opt/swh RUN chmod u+x /opt/swh/entrypoint.sh diff --git a/apps/swh-loader-bzr/entrypoint.sh b/apps/swh-loader-bzr/entrypoint.sh index 564221961..f36a37357 100644 --- a/apps/swh-loader-bzr/entrypoint.sh +++ b/apps/swh-loader-bzr/entrypoint.sh @@ -16,6 +16,7 @@ case "$1" in # workdir as the ephemeral volumes are not recreated echo "Cleaning /tmp..." rm -rf /tmp/* + echo Starting the swh Celery worker for ${SWH_WORKER_INSTANCE} exec python -m celery \ --app=swh.scheduler.celery_backend.config.app \ -- GitLab From 1db963ad6e97bee0a55d27adab0ba304dc712450 Mon Sep 17 00:00:00 2001 From: "Antoine R. Dumont (@ardumont)" <ardumont@softwareheritage.org> Date: Sat, 1 Feb 2025 11:58:04 +0100 Subject: [PATCH 6/8] loader-svn: Install python dependencies faster Current pip install [1] vs uv pip install [2]. [1] ``` $ /usr/bin/time docker build --no-cache -t swh-loader-svn apps/swh-loader-svn ... Successfully tagged swh-loader-svn:latest 0.05user 0.05system 0:58.04elapsed 0%CPU (0avgtext+0avgdata 38948maxresident)k 0inputs+0outputs (0major+2652minor)pagefaults 0swaps ``` [2] ``` $ /usr/bin/time docker build --no-cache -t swh-loader-svn-with-uv apps/swh-loader-svn ... Successfully tagged swh-loader-svn-with-uv:latest 0.04user 0.03system 0:46.99elapsed 0%CPU (0avgtext+0avgdata 40972maxresident)k 0inputs+0outputs (0major+2282minor)pagefaults 0swaps --- apps/swh-loader-svn/Dockerfile | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/apps/swh-loader-svn/Dockerfile b/apps/swh-loader-svn/Dockerfile index 718f42af5..62bdf5858 100644 --- a/apps/swh-loader-svn/Dockerfile +++ b/apps/swh-loader-svn/Dockerfile @@ -16,15 +16,15 @@ RUN apt-get -y update && \ mkdir /etc/swh USER swh +RUN /usr/local/bin/python -m venv /opt/swh/venv WORKDIR /opt/swh -COPY --chown=swh:swh requirements-frozen.txt /opt/swh - -ENV PYTHONPATH=/opt/swh -ENV PATH=/opt/swh/.local/bin:$PATH +ENV PYTHONPATH=/opt/swh/venv +ENV PATH=/opt/swh/venv/bin:$PATH -RUN /usr/local/bin/python -m pip install --upgrade pip && \ - pip install --no-cache-dir -r requirements-frozen.txt +RUN python -m pip install uv +COPY --chown=swh:swh requirements-frozen.txt /opt/swh +RUN uv pip sync --no-cache requirements-frozen.txt COPY --chown=swh:swh entrypoint.sh /opt/swh RUN chmod u+x /opt/swh/entrypoint.sh -- GitLab From 8ad3d96dd31806ae80f0e5a2817c91a6fb4ed9b0 Mon Sep 17 00:00:00 2001 From: "Antoine R. Dumont (@ardumont)" <ardumont@softwareheritage.org> Date: Sat, 1 Feb 2025 12:16:54 +0100 Subject: [PATCH 7/8] loader-package: Install python dependencies faster Current pip install [1] vs uv pip install [2]. [1] ``` $ /usr/bin/time docker build --no-cache -t swh-loader-package apps/swh-loader-package ... Successfully tagged swh-loader-package:latest 0.03user 0.04system 0:57.30elapsed 0%CPU (0avgtext+0avgdata 40880maxresident)k 8inputs+0outputs (0major+2588minor)pagefaults 0swaps ``` [2] ``` $ /usr/bin/time docker build --no-cache -t swh-loader-package-with-uv apps/swh-loader-package ... Successfully tagged swh-loader-package-with-uv:latest 0.03user 0.02system 0:51.90elapsed 0%CPU (0avgtext+0avgdata 40516maxresident)k 0inputs+0outputs (0major+2554minor)pagefaults 0swaps ``` --- apps/swh-loader-package/Dockerfile | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/apps/swh-loader-package/Dockerfile b/apps/swh-loader-package/Dockerfile index 55bea9984..72cc48834 100644 --- a/apps/swh-loader-package/Dockerfile +++ b/apps/swh-loader-package/Dockerfile @@ -12,15 +12,15 @@ RUN apt-get -y update && \ mkdir /etc/swh USER swh +RUN /usr/local/bin/python -m venv /opt/swh/venv WORKDIR /opt/swh -COPY --chown=swh:swh requirements-frozen.txt /opt/swh - -ENV PYTHONPATH=/opt/swh -ENV PATH=/opt/swh/.local/bin:$PATH +ENV PYTHONPATH=/opt/swh/venv +ENV PATH=/opt/swh/venv/bin:$PATH -RUN /usr/local/bin/python -m pip install --upgrade pip && \ - pip install --no-cache-dir -r requirements-frozen.txt +RUN python -m pip install uv +COPY --chown=swh:swh requirements-frozen.txt /opt/swh +RUN uv pip sync --no-cache requirements-frozen.txt COPY --chown=swh:swh entrypoint.sh /opt/swh RUN chmod u+x /opt/swh/entrypoint.sh -- GitLab From 7889a4ba78c50cefc9850745dae3ca20034d959f Mon Sep 17 00:00:00 2001 From: "Antoine R. Dumont (@ardumont)" <ardumont@softwareheritage.org> Date: Sat, 1 Feb 2025 12:22:19 +0100 Subject: [PATCH 8/8] toolbox: Install python dependencies faster Current pip install [1] vs uv pip install [2]. [1] ``` $ /usr/bin/time docker build --no-cache -t swh-loader-package apps/swh-loader-package ... Successfully tagged toolbox:latest 0.08user 0.12system 2:23.18elapsed 0%CPU (0avgtext+0avgdata 40712maxresident)k 0inputs+0outputs (0major+2589minor)pagefaults 0swaps ``` [2] ``` $ /usr/bin/time docker build --no-cache -t swh-loader-package-with-uv apps/swh-loader-package Successfully tagged toolbox-with-uv:latest 0.09user 0.05system 1:45.10elapsed 0%CPU (0avgtext+0avgdata 38656maxresident)k 0inputs+0outputs (0major+2675minor)pagefaults 0swaps ... ``` --- apps/swh-toolbox/Dockerfile | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/apps/swh-toolbox/Dockerfile b/apps/swh-toolbox/Dockerfile index 03c13ff09..33fe3aecb 100644 --- a/apps/swh-toolbox/Dockerfile +++ b/apps/swh-toolbox/Dockerfile @@ -19,15 +19,15 @@ RUN wget -q https://github.com/fullstorydev/grpcurl/releases/download/v1.9.1/grp dpkg -i grpcurl_1.9.1_linux_amd64.deb USER swh +RUN /usr/local/bin/python -m venv /opt/swh/venv WORKDIR /opt/swh -COPY --chown=swh:swh requirements-frozen.txt /opt/swh - -ENV PYTHONPATH=/opt/swh -ENV PATH=/opt/swh/.local/bin:$PATH +ENV PYTHONPATH=/opt/swh/venv +ENV PATH=/opt/swh/venv/bin:$PATH -RUN /usr/local/bin/python -m pip install --upgrade pip && \ - pip install --no-cache-dir -r requirements-frozen.txt +RUN python -m pip install uv +COPY --chown=swh:swh requirements-frozen.txt /opt/swh +RUN uv pip sync --no-cache requirements-frozen.txt COPY --chown=swh:swh entrypoint.sh /opt/swh RUN chmod u+x /opt/swh/entrypoint.sh -- GitLab