diff --git a/experiments/2024-08-05-speed/speed-tests.ipynb b/experiments/2024-08-05-speed/01-measure-recent-versions.ipynb similarity index 100% rename from experiments/2024-08-05-speed/speed-tests.ipynb rename to experiments/2024-08-05-speed/01-measure-recent-versions.ipynb diff --git a/experiments/2024-08-05-speed/02-measure-version-3.4.3.ipynb b/experiments/2024-08-05-speed/02-measure-version-3.4.3.ipynb new file mode 100644 index 00000000..458cbe45 --- /dev/null +++ b/experiments/2024-08-05-speed/02-measure-version-3.4.3.ipynb @@ -0,0 +1,476 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "2b21d45f-cf7d-4a09-964c-bc6a81a1893d", + "metadata": {}, + "source": [ + "# Measure the speed of the Markdown package on version 3.4.3\n", + "\n", + "The current version of the Markdown package for TeX takes multiple seconds to initialize and process a markdown text:" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "id": "11e99041-b6c2-4947-b108-9ed4d7c4a46f", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\\markdownRendererDocumentBegin\n", + "foo\\markdownRendererDocumentEnd\n", + "\n", + "real\t0m1.648s\n", + "user\t0m1.410s\n", + "sys\t0m0.237s\n" + ] + } + ], + "source": [ + "! docker run --rm -i witiko/markdown bash -c 'time markdown-cli <<< foo'" + ] + }, + { + "cell_type": "markdown", + "id": "482b95d6-9d03-4e10-acdf-0977a4a0c1dd", + "metadata": {}, + "source": [ + "As shown in the previous Jupyter notebook `01-measure-recent-versions.ipynb` titled \"Measure the speed of the Markdown package across recent versions\", a more than 5× slow-down has been introduced in [version 3.4.3][1] of the Markdown package for TeX.\n", + "\n", + " [1]: https://github.com/Witiko/markdown/releases/tag/3.4.3" + ] + }, + { + "cell_type": "markdown", + "id": "b0eb626b-3eed-47a4-b5ef-6fbd39d38d54", + "metadata": {}, + "source": [ + "This Jupyter notebook measures the speed of the Markdown package for TeX at all merge commits from version 3.4.3 to determine which of the [eight PRs merged in version 3.4.3][1] caused the slow-down. \n", + "As discussed in [#474 (comment)][2], the slow-down is likely related to PRs [#416][3] and [#432][4], which started loading `UnicodeData.txt` and constructing a parser that recognizes all Unicode punctuation.\n", + "\n", + " [1]: https://github.com/Witiko/markdown/pulls?q=is%3Amerged+is%3Apr+milestone%3A3.4.3+\n", + " [2]: https://github.com/Witiko/markdown/issues/474#issuecomment-2286251419\n", + " [3]: https://github.com/Witiko/markdown/pull/416\n", + " [4]: https://github.com/Witiko/markdown/pull/432" + ] + }, + { + "cell_type": "markdown", + "id": "e6ad6175-68c4-4e27-8e1f-b73d10856a74", + "metadata": {}, + "source": [ + "### Experiment\n", + "\n", + "In my experiment, I time the command `markdown-cli <<< foo` with the Docker images for all merge commits from version 3.4.3 on my Dell G5 15 notebook. \n", + "Furthermore, we also include commit [`a45cf0ed`][2] with tag `3.4.2` and commit [`32b52ba3`][3] for PR [#428][1], which lacks a merge commit.\n", + "\n", + " [1]: https://github.com/Witiko/markdown/pull/428\n", + " [2]: https://github.com/Witiko/markdown/commit/a45cf0ed8a26270c9c13dfc13d135c8071ad3ae5\n", + " [3]: https://github.com/Witiko/markdown/commit/32b52ba3a41c8c1b5fd9cbb814a86fab215204c4" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "id": "d124af9e-3b7e-4661-89ee-50d121e62566", + "metadata": {}, + "outputs": [], + "source": [ + "from packaging.version import Version" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "4d863f76-7dd9-447a-a427-b0e95542dbaf", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "a45cf0ed8a26270c9c13dfc13d135c8071ad3ae5 Merge branch 'fix/allow-line-break-before-options'\n", + "4a770b18992e3aef3e13516da9f30cead40120a4 Merge pull request #419 from Witiko/feat/remove-trailing-separators\n", + "5d3dfdb1bf44c04b84c46b6fe8cd9870f4a37504 Merge pull request #422 from Witiko/fix/mathml\n", + "ef6c9d0884c7b6d6398af22b3af90c9e96f48e0e Merge pull request #425 from Witiko/feat/tex-live-2024\n", + "415379f9869c20b64f6e1472d6664fe5ca38ccb7 Merge pull request #426 from Witiko/feat/emails-and-citations\n", + "32b52ba3a41c8c1b5fd9cbb814a86fab215204c4 Require that closing div fence has the same indent as the opening fence\n", + "d8a1d2f9d61258a1ce4b06bda13cd939ecd28e15 Merge pull request #416 from lostenderman/update-commonmark\n", + "828e25a5009e0a7dc6ab83b39afa4b539e88de1a Merge pull request #431 from lostenderman/fix/fenced-divs-indent-table\n", + "e2c6be1a77653281101f068ab4bcf8ee0ef3ebbf Merge pull request #432 from Witiko/fix/parsers-punctuation-memory-issues\n" + ] + } + ], + "source": [ + "refs = ! git log --pretty=oneline 3.4.2^..3.4.3 | tac | sed -n -r \"/Merge pull request|Merge branch 'fix\\\\/allow-line-break-before-options'|Require that closing div fence has the same indent as the opening fence/p\"\n", + "print('\\n'.join(refs))\n", + "refs = [ref.split()[0] for ref in refs]" + ] + }, + { + "cell_type": "markdown", + "id": "fe11371c-102e-41fb-a7f8-fe0dbd296403", + "metadata": {}, + "source": [ + "First, I build the docker images for the individual commits." + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "605b5260-da75-4bcb-828c-b395ea2afc43", + "metadata": {}, + "outputs": [], + "source": [ + "import json" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "id": "914a5154-72bd-43a5-914f-383b20ad3ad6", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "{\n", + " \"a45cf0ed8a26270c9c13dfc13d135c8071ad3ae5\": \"witiko/markdown:3.4.2-0-ga45cf0ed-TL2022-historic\",\n", + " \"4a770b18992e3aef3e13516da9f30cead40120a4\": \"witiko/markdown:3.4.2-6-g4a770b18-TL2022-historic\",\n", + " \"5d3dfdb1bf44c04b84c46b6fe8cd9870f4a37504\": \"witiko/markdown:3.4.2-14-g5d3dfdb1-TL2022-historic\",\n", + " \"ef6c9d0884c7b6d6398af22b3af90c9e96f48e0e\": \"witiko/markdown:3.4.2-22-gef6c9d08-TL2022-historic\",\n", + " \"415379f9869c20b64f6e1472d6664fe5ca38ccb7\": \"witiko/markdown:3.4.2-39-g415379f9-TL2022-historic\",\n", + " \"32b52ba3a41c8c1b5fd9cbb814a86fab215204c4\": \"witiko/markdown:3.4.2-41-g32b52ba3-TL2022-historic\",\n", + " \"d8a1d2f9d61258a1ce4b06bda13cd939ecd28e15\": \"witiko/markdown:3.4.2-57-gd8a1d2f9-TL2022-historic\",\n", + " \"828e25a5009e0a7dc6ab83b39afa4b539e88de1a\": \"witiko/markdown:3.4.2-77-g828e25a5-TL2022-historic\",\n", + " \"e2c6be1a77653281101f068ab4bcf8ee0ef3ebbf\": \"witiko/markdown:3.4.3-0-ge2c6be1a-TL2022-historic\"\n", + "}\n" + ] + } + ], + "source": [ + "tags = {}\n", + "for ref in refs:\n", + " tag, = ! git describe --abbrev=8 --tags --always --long --exclude latest $ref\n", + " tags[ref] = f'witiko/markdown:{tag}-TL2022-historic'\n", + "print(json.dumps(tags, indent=4))" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "id": "6b8367fe-f2da-45a2-9582-d2d3c970cac5", + "metadata": {}, + "outputs": [], + "source": [ + "%%capture\n", + "! pip install tqdm" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "id": "681532e1-bd7d-46f5-8851-51c696693638", + "metadata": {}, + "outputs": [], + "source": [ + "from tqdm import tqdm" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "id": "01a2ddd9-3a5c-4cd7-ba97-366fcae424ae", + "metadata": {}, + "outputs": [], + "source": [ + "available_docker_images = set()" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "id": "93cc99f3-baa2-4611-b501-347735045e46", + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Determining available Docker images: 100%|█| 9/9 [\n" + ] + } + ], + "source": [ + "for ref in tqdm(refs, desc='Determining available Docker images', ncols=50):\n", + " tag = tags[ref]\n", + " images = ! docker images -q $tag\n", + " if images:\n", + " available_docker_images.add(ref)" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "id": "c8e0cbac-dbc2-45f4-8e4c-a4deca76d20b", + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Pulling Docker images: 0it [00:00, ?it/s]\n" + ] + } + ], + "source": [ + "for ref in tqdm([ref for ref in refs if ref not in available_docker_images], desc='Pulling Docker images', ncols=50):\n", + " tag = tags[ref]\n", + " _ = ! docker pull $tag\n", + " images = ! docker images -q $tag\n", + " if images:\n", + " available_docker_images.add(ref)" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "id": "025cac55-3d5c-4bac-9e9b-6ddc1ba9818f", + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Building Docker images: 0it [00:00, ?it/s]\n" + ] + } + ], + "source": [ + "for ref in tqdm([ref for ref in refs if ref not in available_docker_images], desc='Building Docker images', ncols=50):\n", + " tag = tags[ref]\n", + " ! rm -rf markdown\n", + " _ = ! git clone https://github.com/witiko/markdown && cd markdown && git checkout $ref && docker build --pull --build-arg TEXLIVE_TAG=TL2022-historic -t $tag .\n", + " images = ! docker images -q $tag\n", + " if images:\n", + " available_docker_images.add(ref)\n", + "! rm -rf markdown" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "id": "6fd48957-0d2f-4a7d-af8c-78b3a854112f", + "metadata": {}, + "outputs": [], + "source": [ + "assert available_docker_images == set(refs)" + ] + }, + { + "cell_type": "markdown", + "id": "9d76ba61-e07f-466c-8f89-737e5a02e099", + "metadata": {}, + "source": [ + "To determine the median times, I repeat the test five times for every version. To control for the effect of using different versions of the TeX Live distributions, I use the historic TeX Live 2022 distribution." + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "id": "95d6a816-9b92-4a75-af64-d66b1d8cceb0", + "metadata": {}, + "outputs": [], + "source": [ + "from collections import defaultdict\n", + "from itertools import product" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "id": "30cf12b9-89c6-4de6-a228-52d50f09a96b", + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|█████████████| 45/45 [00:46<00:00, 1.04s/it]\n" + ] + } + ], + "source": [ + "durations_all = defaultdict(lambda: list())\n", + "parameters = list(product(range(5), refs))\n", + "for repetition, ref in tqdm(parameters, ncols=50):\n", + " tag = tags[ref]\n", + " lines = ! docker run --rm -i $tag bash -c 'time markdown-cli <<< foo'\n", + " for line in lines:\n", + " if line.startswith('real'):\n", + " _, duration = line.split()\n", + " assert len(durations_all[ref]) == repetition\n", + " durations_all[ref].append(duration)\n", + " break\n", + " else:\n", + " raise ValueError(f'Unexpected output for tag {tag}: {lines}')" + ] + }, + { + "cell_type": "markdown", + "id": "454c335b-28fa-42cf-81c2-97334d7da9f7", + "metadata": {}, + "source": [ + "## Results\n", + "In this section, I discuss the results of the experiment." + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "id": "27af9f1a-ff88-45bf-b51e-57609ae5f662", + "metadata": {}, + "outputs": [], + "source": [ + "import re" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "id": "26cc8b15-2bfe-4832-baf5-b1f46386e561", + "metadata": {}, + "outputs": [], + "source": [ + "durations_seconds_all = dict()\n", + "for ref, durations in durations_all.items():\n", + " durations_seconds = list()\n", + " for duration in durations:\n", + " match = re.match(r'(?P[0-9]+)m(?P[0-9.]+)s', duration)\n", + " assert match\n", + " duration_seconds = int(match.group('minutes')) + float(match.group('seconds'))\n", + " durations_seconds.append(duration_seconds)\n", + " durations_seconds_all[ref] = durations_seconds\n", + " assert len(durations_seconds_all[ref]) == len(durations_all[ref])\n", + "assert len(durations_seconds_all) == len(durations_all)" + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "id": "80b9d16d-7e22-4565-81d6-e75652ac782a", + "metadata": {}, + "outputs": [], + "source": [ + "from statistics import median" + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "id": "2d74390f-f557-44e9-9bdc-bdfabe198cf6", + "metadata": {}, + "outputs": [], + "source": [ + "durations_seconds_median = {\n", + " ref[:8]: median(durations)\n", + " for ref, durations\n", + " in durations_seconds_all.items()\n", + "}" + ] + }, + { + "cell_type": "markdown", + "id": "572d1c39-e379-4f68-b582-ef227cd3762a", + "metadata": {}, + "source": [ + "Below, I show the median processing times for all considered versions of the Markdown package." + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "id": "92e12960-4533-4aa0-bb03-3824a8fda863", + "metadata": {}, + "outputs": [], + "source": [ + "%%capture\n", + "! pip install matplotlib" + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "id": "21d88566-a463-418f-9a89-547da4094773", + "metadata": {}, + "outputs": [], + "source": [ + "import matplotlib.pyplot as plt" + ] + }, + { + "cell_type": "code", + "execution_count": 21, + "id": "d842d771-d96f-41da-9592-aecc1f8defbd", + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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dg3c4FfHwdrhEBFJlslF96pVq/DFF19g9OjR2mnDhg1D27ZtMW3aNBbdRERERLVAxL2hwsLYtJyIqFwmNy9XqVTo3Lmz3vROnTqhsLDQLEERERERkXRl3FXhyLUUABwqjIioIiYX3c899xxWrVqlN33t2rV45plnzBIUEREREUnXH9GJKFQLtPR2RlNPZ2uHQ0QkaSY3LweKO1LbvXs3HnnkEQDAsWPHEBsbi7Fjx2LmzJna+RYtWmSeKImIiIhIMiI0vZbzKjcRUYVMLrrPnz+Pjh07AgCuX78OAPDw8ICHhwfOnz+vnU8mk5kpRCIiIiKSityCQhy4kgyA93MTERnD5KJ73759loiDiIiIiKqBg1eSkadSw9/dAYG+rtYOh4hI8io1TjcRERER1U4lm5azZSMRUcVYdBMRERGRUQoK1dh7KQkAMIBNy4mIjMKim4iIiIiMcuR6CrLyC+HpokQH/7rWDoeIqFpg0U1ERERERom8UNy0PCzIG3I5m5YTERmDRTcRERERVahILbD7QiIAYECQr5WjISKqPio1TvfVq1exb98+JCUlQa1W6zw3d+5cswRGRERERNJx4kYaUnMK4OagQJem7tYOh4io2jC56P7iiy8wefJkeHh4wMdHt9dKmUzGopuIiIioBoq417Q8pLU3FDZsLElEZCyTi+4PP/wQH330Ed566y1LxENEREREEiOEQOS9ocIGstdyIiKTmPwz5Z07d/Dkk09aIhYiIiIikqBztzMQl5EHRzsb9GjhYe1wiIiqFZOL7ieffBK7d++2RCxEREREJEER965y9w3wgr3CxsrREBFVLyY3L2/evDnee+89/PXXX2jTpg0UCoXO89OnTzdbcERERERkXUIIbdE9IIhNy4mITGVy0b127Vo4OzvjwIEDOHDggM5zMpmMRTcRERFRDXItKRv/puTAzkaOvgFe1g6HiKjaMbnojomJsUQcRERERCRBmqvcPVt4wFlZqdFmiYhqNY73QERERERl0gwVFsZey4mIKqVSP1f+999/+OWXXxAbG4uCggKd5xYtWmSWwIiIiIjIum6l5eJCXCZs5DKEtPa2djhERNWSyUX33r17MWzYMDRt2hTR0dEIDg7GjRs3IIRAx44dLREjEREREVlB5L2r3F2auMPdyc7K0RARVU8mNy+fPXs2Zs2ahXPnzsHe3h5bt27F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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "plt.figure(figsize=(10, 5))\n", + "plt.plot(*zip(*durations_seconds_median.items()), marker='o', linestyle='-')\n", + "plt.title('Median time of processing a short text with different commits of the Markdown package for TeX 3.4.3')\n", + "plt.xlabel('Commit')\n", + "plt.ylabel('Median processing time (seconds)')\n", + "plt.xticks(rotation=45)\n", + "plt.tight_layout()\n", + "plt.grid()\n", + "plt.show()" + ] + }, + { + "cell_type": "markdown", + "id": "8d67d554-3ed1-480a-b464-7682776b8301", + "metadata": {}, + "source": [ + "As expected, the more than 5× slow-down is caused by PRs [#416][1], which started loading `UnicodeData.txt` and constructing a parser that recognizes all Unicode punctuation.\n", + "\n", + " [1]: https://github.com/Witiko/markdown/pull/416" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.10.12" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/experiments/2024-08-05-speed/README.md b/experiments/2024-08-05-speed/README.md index 2c9ae03f..9dc8a4dc 100644 --- a/experiments/2024-08-05-speed/README.md +++ b/experiments/2024-08-05-speed/README.md @@ -1,6 +1,10 @@ This directory contains experimental code that measures the speed of historic versions of the Markdown package for TeX and compares them with the current version of the Markdown package. The results of the experiment are available in -the Jupyter notebook document [`speed-tests.ipynb`][1]. +the following Jupyter notebook documents: - [1]: speed-tests.ipynb "Measure the speed of the Markdown package across recent versions" +- [Measure the speed of the Markdown package across recent versions][1] +- [Measure the speed of the Markdown package on version 3.4.3][2] + + [1]: 01-measure-recent-versions.ipynb "Measure the speed of the Markdown package across recent versions" + [2]: 02-measure-version-3.4.3.ipynb "Measure the speed of the Markdown package on version 3.4.3"