diff --git a/blog/2025-08-31-benchmarks/data/bandwidth.browser.csv b/blog/2025-08-31-benchmarks/data/bandwidth.browser.csv new file mode 100644 index 0000000..38b0100 --- /dev/null +++ b/blog/2025-08-31-benchmarks/data/bandwidth.browser.csv @@ -0,0 +1,51 @@ +group,name,latency,bandwidth,upload_size,download_size,defer_decryption,time_preprocess,time_online,time_total,uploaded_preprocess,downloaded_preprocess,uploaded_online,downloaded_online,uploaded_total,downloaded_total,heap_max_bytes +bandwidth,,25,10,1024,4096,true,31106,2406,33530,33562300,3425617,1018350,21113,34598467,3446730, +bandwidth,,25,10,1024,4096,true,31064,2503,33588,33562252,3425605,1018359,21113,34598428,3446718, +bandwidth,,25,10,1024,4096,true,31127,2497,33644,33562492,3426193,1018395,21149,34598704,3447342, +bandwidth,,25,10,1024,4096,true,31100,2491,33608,33562252,3425629,1018383,21137,34598452,3446766, +bandwidth,,25,10,1024,4096,true,31094,2408,33524,33562324,3425761,1018383,21113,34598524,3446874, +bandwidth,,25,10,1024,4096,true,31059,2457,33536,33562228,3425665,1018359,21113,34598404,3446778, +bandwidth,,25,10,1024,4096,true,31119,2500,33642,33562348,3425749,1018371,21113,34598536,3446862, +bandwidth,,25,10,1024,4096,true,31093,2440,33552,33562228,3425617,1018338,21113,34598383,3446730, +bandwidth,,25,10,1024,4096,true,31146,2564,33730,33562204,3425665,1018374,21149,34598395,3446814, +bandwidth,,25,10,1024,4096,true,31109,2435,33564,33562192,3425605,1018359,21113,34598368,3446718, +bandwidth,,25,50,1024,4096,true,8660,2160,10839,33562012,3425209,1018395,21137,34598224,3446346, +bandwidth,,25,50,1024,4096,true,8618,2227,10862,33561976,3425125,1018395,21137,34598188,3446262, +bandwidth,,25,50,1024,4096,true,8620,2177,10817,33562072,3425221,1018374,21137,34598263,3446358, +bandwidth,,25,50,1024,4096,true,8513,2144,10676,33561988,3425077,1018395,21137,34598200,3446214, +bandwidth,,25,50,1024,4096,true,8618,2156,10791,33561976,3425125,1018374,21137,34598167,3446262, +bandwidth,,25,50,1024,4096,true,8608,2208,10835,33562108,3425353,1018395,21125,34598320,3446478, +bandwidth,,25,50,1024,4096,true,8525,2253,10797,33561976,3425125,1018395,21137,34598188,3446262, +bandwidth,,25,50,1024,4096,true,8634,2181,10834,33562024,3425209,1018374,21137,34598215,3446346, +bandwidth,,25,50,1024,4096,true,8579,2137,10735,33561964,3425065,1018395,21137,34598176,3446202, +bandwidth,,25,50,1024,4096,true,8621,2123,10763,33562036,3425281,1018395,21137,34598248,3446418, +bandwidth,,25,100,1024,4096,true,5827,2142,7990,33561964,3425041,1018350,21113,34598131,3446154, +bandwidth,,25,100,1024,4096,true,5863,2453,8335,33561964,3425041,1018371,21113,34598152,3446154, +bandwidth,,25,100,1024,4096,true,5804,2228,8052,33561964,3425041,1018371,21113,34598152,3446154, +bandwidth,,25,100,1024,4096,true,5826,2270,8117,33561964,3425041,1018371,21113,34598152,3446154, +bandwidth,,25,100,1024,4096,true,5809,2182,8008,33561964,3425017,1018350,21113,34598131,3446130, +bandwidth,,25,100,1024,4096,true,5820,2172,8012,33561964,3425041,1018371,21113,34598152,3446154, +bandwidth,,25,100,1024,4096,true,5858,2101,7978,33561964,3425041,1018371,21113,34598152,3446154, +bandwidth,,25,100,1024,4096,true,5889,2133,8040,33561964,3425041,1018350,21113,34598131,3446154, +bandwidth,,25,100,1024,4096,true,5864,2147,8031,33561964,3425041,1018350,21113,34598131,3446154, +bandwidth,,25,100,1024,4096,true,5807,2175,8001,33561916,3424897,1018371,21113,34598104,3446010, +bandwidth,,25,250,1024,4096,true,4161,2133,6313,33561868,3424777,1018350,21101,34598035,3445878, +bandwidth,,25,250,1024,4096,true,4124,2208,6352,33561868,3424777,1018350,21101,34598035,3445878, +bandwidth,,25,250,1024,4096,true,4048,2241,6307,33561868,3424765,1018371,21101,34598056,3445866, +bandwidth,,25,250,1024,4096,true,4146,2137,6301,33561868,3424789,1018371,21101,34598056,3445890, +bandwidth,,25,250,1024,4096,true,4154,2242,6415,33561856,3424777,1018371,21101,34598044,3445878, +bandwidth,,25,250,1024,4096,true,4077,2222,6316,33561904,3424801,1018371,21101,34598092,3445902, +bandwidth,,25,250,1024,4096,true,4058,2181,6258,33561868,3424765,1018371,21101,34598056,3445866, +bandwidth,,25,250,1024,4096,true,4081,2150,6248,33561868,3424765,1018371,21101,34598056,3445866, +bandwidth,,25,250,1024,4096,true,4015,2145,6179,33561880,3424777,1018350,21101,34598047,3445878, +bandwidth,,25,250,1024,4096,true,4076,2245,6341,33561868,3424765,1018350,21101,34598035,3445866, +bandwidth,,25,1000,1024,4096,true,3566,2148,5733,33561844,3424729,1018371,21113,34598032,3445842, +bandwidth,,25,1000,1024,4096,true,3526,2214,5760,33561844,3424717,1018350,21101,34598011,3445818, +bandwidth,,25,1000,1024,4096,true,3703,2199,5922,33561844,3424729,1018350,21101,34598011,3445830, +bandwidth,,25,1000,1024,4096,true,3698,2146,5864,33561844,3424729,1018350,21113,34598011,3445842, +bandwidth,,25,1000,1024,4096,true,3627,2185,5831,33561844,3424717,1018371,21113,34598032,3445830, +bandwidth,,25,1000,1024,4096,true,3593,2171,5782,33561844,3424729,1018371,21101,34598032,3445830, +bandwidth,,25,1000,1024,4096,true,3617,2225,5859,33561844,3424729,1018350,21101,34598011,3445830, +bandwidth,,25,1000,1024,4096,true,3499,2213,5729,33561844,3424717,1018371,21113,34598032,3445830, +bandwidth,,25,1000,1024,4096,true,3603,2176,5799,33561832,3424729,1018371,21113,34598020,3445842, +bandwidth,,25,1000,1024,4096,true,3477,2182,5678,33561844,3424717,1018350,21113,34598011,3445830, diff --git a/blog/2025-08-31-benchmarks/data/bandwidth.ipynb b/blog/2025-08-31-benchmarks/data/bandwidth.ipynb new file mode 100644 index 0000000..fd20a7a --- /dev/null +++ b/blog/2025-08-31-benchmarks/data/bandwidth.ipynb @@ -0,0 +1,90 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 30, + "id": "bffb8704-ef7a-46dd-9682-01517628c1c9", + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAkAAAAHHCAYAAABXx+fLAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjUsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvWftoOwAAAAlwSFlzAAAPYQAAD2EBqD+naQAAoWlJREFUeJzsnXdcU9f7xz+EFRICKEMMKoob3NS6RWqLdqhtrdraYfvVX2u3bb8d2n6L3RO1Vbu0rmqHrbYVW3GCE23d4BZQkY1AEhICGef3ByRmgYzc3Ct53q/X84Kce3LP59x7TvLk3Oec4wGAgSAIgiAIwo0Q8S2AIAiCIAjC1ZADRBAEQRCE20EOEEEQBEEQbgc5QARBEARBuB3kABEEQRAE4XaQA0QQBEEQhNtBDhBBEARBEG4HOUAEQRAEQbgd5AARBEEQBOF2kANENIuVK1ciJyeHl7JzcnKwcuXKBvNERkaCMYZXXnnFZboaA2MMiYmJLT5PamoqUlNTb5gvLi4OjDHExcU1Ou/kyZNbrO9GhIWF4ddff0VpaSkYY3jxxRcBAN26dcPWrVtRUVEBxhgmTZrEuRaCX2bMmAHGGCIjI/mW0ihMny0zZszgWwrRQsgBasUkJiaCMYbg4GCHxzMyMhr1JUq0Lh566CGzw8EXCxcuxLhx4/DRRx/hkUceQUpKCgBg9erV6Nu3L95880088sgjOHz4sFPL9fPzQ2JiYqMcwtZK7969kZiYeNM4HHwhhH5CcIsX3wIIgmg6CQkJzX7v9OnT0adPH3zxxRdO1dQUbrvtNvz5559ISkoyp4nFYgwfPhzvv/8+li5dykm5EokE8+fPx/z587F7925OyhA60dHRmD9/PtLS0nD58mW+5QiW+vrJ5cuXIRaLodPpeNNGOAcaASKImxCdTndTfwCHhYWhoqLCKi00NBQA7NKJhvHw8ICvry/fMnhBIpHwUm51dTWMRiMvZRPOgxwgwowpBmTq1Kn44IMPUFBQgMrKSvz555/o0KHDDd8vkUjw+eef48qVK9BqtTh79qzDGJzHH38cO3fuRFFREbRaLU6dOoXZs2c7POebb76J3NxcqNVq7Nq1C9HR0U2u15w5c3Dp0iVoNBqkpaUhJibG6njfvn2xcuVKZGVloaqqCgUFBfj+++/Rtm1bq3ymR4pdu3bFypUrUV5ejoqKCqxYsQJ+fn5WeX18fLBgwQIUFxdDqVTizz//REREhF25jDFMmDDBnDZo0CAwxnDkyBGrvH///TcOHjxofu0oBigiIgK///47KisrUVRUhAULFth9MaampuKee+5B586dwRgDY8wulkskEmHevHnIzc1FVVUVduzYga5duzbqWsvlcnz//fcoLCyEVqtFZmYmnnjiCfNxU7yHSCTCc889Z9aQmJiIK1euAAA+//xzO103Oq8JX19fJCYm4ty5c6iqqkJ+fj42bNiAqKgoREZGorS0FAAwf/58q7IbokuXLli/fj2uXbsGtVqN9PR03HXXXVZ5TH1nypQpzbp2prbVs2dP/PLLL1AoFCgtLcWiRYvs7iFjDIsXL8b06dORmZmJ6upqjB8/HgAwYMAA/P3331AoFFCpVNixYweGDBlidf1/++03AEBaWpr5Glg+Enz66aeRmZkJrVaLvLw8LFmyBIGBgXaab731Vvz1118oKytDZWUlTpw4gRdeeMEqT3x8PPbs2YPKykqUl5fjjz/+QK9evW54PRyxcuVKqFQqREVF4a+//oJSqcS6deuABuICbftJY+9TQ/3EUQyQSVvHjh2RnJwMlUqFq1ev4plnngEA9OnTBzt37kRlZSUuXbqEhx56yE5rYGAgFi5caP78vHDhAl577TV4eHg063oRN4YegRF2vPnmm2CM4ZNPPkFYWBjmzJmDHTt2YMCAAdBqtfW+b9OmTYiPj8f333+P48ePY9y4cfj8888RERGBl19+2Zzv6aefxqlTp7Bp0ybo9XpMmDABX3/9NUQiEb766itzvnfffRf/+9//8Ndff+Hvv//GoEGDsG3bNvj4+DS6Lo899hhkMhmWLl0KsViMF198Ebt27ULfvn1RXFwMALjjjjsQFRWFlStXorCwEDExMXjyyScRExODoUOH2p1z/fr1yMnJwdy5czFo0CD83//9H4qLi/HGG2+Y8yxfvhyPPvoo1q1bhwMHDuC2227DX3/9ZXWezMxMlJeXY/To0UhOTgYAjBo1CgaDAf3794dMJoNKpYKHhweGDx+O7777rt56isVi7Ny5E506dcKXX36J/Px8PProo7jtttus8n3wwQcIDAxEhw4d8NJLLwEAKisrrfK88cYbMBqN+PzzzxEYGIjXXnsN69atc3gtLAkLC8PBgwfBGMOSJUtQUlKCO++8EytWrEBAQAC+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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "import numpy as np\n", + "import matplotlib.pyplot as plt\n", + "from brokenaxes import brokenaxes\n", + "import pandas as pd\n", + "\n", + "for dark in [True, False]:\n", + " if dark:\n", + " plt.style.use(\"dark_background\")\n", + " else:\n", + " plt.style.use(\"default\")\n", + "\n", + " df1 = pd.read_csv(\"bandwidth.native.csv\", header=0)\n", + " df2 = pd.read_csv(\"bandwidth.browser.csv\", header=0)\n", + "\n", + "\n", + " agg1 = df1.groupby(\"bandwidth\")[\"time_total\"].mean().reset_index()\n", + " agg2 = df2.groupby(\"bandwidth\")[\"time_total\"].mean().reset_index()\n", + "\n", + "\n", + " plt.plot(agg1[\"bandwidth\"], agg1[\"time_total\"]/1000.0, label=\"native\")\n", + " plt.plot(agg2[\"bandwidth\"], agg2[\"time_total\"]/1000.0, label=\"browser\")\n", + "\n", + " plt.xticks(list(range(0, 120, 20)) + list(range(100, 400, 100)) )\n", + "\n", + "\n", + " plt.xlim(0, 300)\n", + " plt.ylim(0, 32)\n", + " plt.xlabel(\"Bandwidth (Mbps)\")\n", + " plt.ylabel(\"Runtime (sec)\")\n", + " plt.title(\"Upload bandwidth effect on protocol runtime\")\n", + " plt.legend(loc=\"upper right\") \n", + "\n", + " plt.grid(True, linestyle=\"--\")\n", + "\n", + " svg_name = \"bandwidth_dark.svg\" if dark else \"bandwidth_light.svg\"\n", + " plt.savefig(svg_name, bbox_inches=\"tight\")\n", + " plt.show()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "b02379fc-3c4b-4ec6-b340-44ee0d01a687", + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "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.13.3" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/blog/2025-08-31-benchmarks/data/bandwidth.native.csv b/blog/2025-08-31-benchmarks/data/bandwidth.native.csv new file mode 100644 index 0000000..f381a7f --- /dev/null +++ b/blog/2025-08-31-benchmarks/data/bandwidth.native.csv @@ -0,0 +1,51 @@ +group,name,latency,bandwidth,upload_size,download_size,defer_decryption,time_preprocess,time_online,time_total,uploaded_preprocess,downloaded_preprocess,uploaded_online,downloaded_online,uploaded_total,downloaded_total,heap_max_bytes +bandwidth,,25,10,1024,4096,true,29839,1567,31425,33562192,3425509,1018338,21113,34598347,3446622, +bandwidth,,25,10,1024,4096,true,29831,1567,31416,33562204,3425509,1018338,21113,34598359,3446622, +bandwidth,,25,10,1024,4096,true,29844,1560,31423,33562192,3425509,1018338,21113,34598347,3446622, +bandwidth,,25,10,1024,4096,true,29820,1558,31396,33562192,3425509,1018338,21113,34598347,3446622, +bandwidth,,25,10,1024,4096,true,29844,1575,31437,33562204,3425509,1018338,21113,34598359,3446622, +bandwidth,,25,10,1024,4096,true,29838,1558,31414,33562180,3425497,1018338,21113,34598335,3446610, +bandwidth,,25,10,1024,4096,true,29839,1560,31417,33562204,3425509,1018338,21113,34598359,3446622, +bandwidth,,25,10,1024,4096,true,29830,1558,31406,33562204,3425509,1018338,21113,34598359,3446622, +bandwidth,,25,10,1024,4096,true,29839,1560,31416,33562192,3425509,1018338,21113,34598347,3446622, +bandwidth,,25,10,1024,4096,true,29917,1561,31494,33562192,3425509,1018338,21113,34598347,3446622, +bandwidth,,25,50,1024,4096,true,6564,1240,7821,33562012,3425281,1018350,21113,34598179,3446394, +bandwidth,,25,50,1024,4096,true,6575,1239,7829,33562312,3425569,1018350,21101,34598479,3446670, +bandwidth,,25,50,1024,4096,true,6556,1241,7814,33562048,3425353,1018350,21113,34598215,3446466, +bandwidth,,25,50,1024,4096,true,6559,1239,7814,33562036,3425353,1018350,21113,34598203,3446466, +bandwidth,,25,50,1024,4096,true,6570,1235,7824,33562252,3425569,1018350,21113,34598419,3446682, +bandwidth,,25,50,1024,4096,true,6643,1226,7883,33562132,3425449,1018350,21101,34598299,3446550, +bandwidth,,25,50,1024,4096,true,6566,1237,7824,33562288,3425521,1018350,21101,34598455,3446622, +bandwidth,,25,50,1024,4096,true,6640,1245,7901,33562132,3425449,1018350,21101,34598299,3446550, +bandwidth,,25,50,1024,4096,true,6560,1228,7804,33562036,3425353,1018350,21113,34598203,3446466, +bandwidth,,25,50,1024,4096,true,6638,1228,7884,33562156,3425449,1018350,21101,34598323,3446550, +bandwidth,,25,100,1024,4096,true,3719,1229,4965,33561916,3425137,1018350,21113,34598083,3446250, +bandwidth,,25,100,1024,4096,true,3718,1238,4970,33561904,3425137,1018350,21113,34598071,3446250, +bandwidth,,25,100,1024,4096,true,3716,1229,4962,33561916,3425137,1018350,21113,34598083,3446250, +bandwidth,,25,100,1024,4096,true,3718,1225,4960,33561940,3425137,1018350,21113,34598107,3446250, +bandwidth,,25,100,1024,4096,true,3716,1227,4959,33561940,3425137,1018350,21113,34598107,3446250, +bandwidth,,25,100,1024,4096,true,3722,1228,4966,33561916,3425137,1018350,21113,34598083,3446250, +bandwidth,,25,100,1024,4096,true,3718,1236,4970,33561916,3425137,1018350,21113,34598083,3446250, +bandwidth,,25,100,1024,4096,true,3740,1253,5008,33561904,3425137,1018350,21113,34598071,3446250, +bandwidth,,25,100,1024,4096,true,3729,1247,4992,33561916,3425137,1018350,21113,34598083,3446250, +bandwidth,,25,100,1024,4096,true,3751,1233,4999,33561856,3425065,1018350,21113,34598023,3446178, +bandwidth,,25,250,1024,4096,true,2119,1231,3366,33561844,3424849,1018350,21113,34598011,3445962, +bandwidth,,25,250,1024,4096,true,2126,1207,3348,33561844,3424849,1018338,21113,34597999,3445962, +bandwidth,,25,250,1024,4096,true,2163,1225,3405,33561844,3424825,1018350,21113,34598011,3445938, +bandwidth,,25,250,1024,4096,true,2145,1226,3386,33561844,3424849,1018350,21113,34598011,3445962, +bandwidth,,25,250,1024,4096,true,2145,1234,3393,33561844,3424849,1018350,21113,34598011,3445962, +bandwidth,,25,250,1024,4096,true,2109,1227,3352,33561856,3424753,1018350,21113,34598023,3445866, +bandwidth,,25,250,1024,4096,true,2121,1239,3375,33561856,3424753,1018350,21113,34598023,3445866, +bandwidth,,25,250,1024,4096,true,2108,1232,3356,33561856,3424753,1018350,21113,34598023,3445866, +bandwidth,,25,250,1024,4096,true,2112,1236,3362,33561856,3424753,1018350,21113,34598023,3445866, +bandwidth,,25,250,1024,4096,true,2115,1230,3361,33561844,3424765,1018350,21113,34598011,3445878, +bandwidth,,25,1000,1024,4096,true,1356,1228,2598,33561856,3424753,1018350,21113,34598023,3445866, +bandwidth,,25,1000,1024,4096,true,1336,1234,2589,33561856,3424753,1018350,21113,34598023,3445866, +bandwidth,,25,1000,1024,4096,true,1341,1235,2595,33561856,3424753,1018350,21113,34598023,3445866, +bandwidth,,25,1000,1024,4096,true,1364,1227,2608,33561856,3424753,1018350,21113,34598023,3445866, +bandwidth,,25,1000,1024,4096,true,1388,1239,2642,33561856,3424753,1018350,21113,34598023,3445866, +bandwidth,,25,1000,1024,4096,true,1342,1230,2585,33561856,3424753,1018350,21113,34598023,3445866, +bandwidth,,25,1000,1024,4096,true,1350,1225,2590,33561856,3424741,1018350,21113,34598023,3445854, +bandwidth,,25,1000,1024,4096,true,1397,1245,2660,33561844,3424753,1018350,21113,34598011,3445866, +bandwidth,,25,1000,1024,4096,true,1372,1235,2622,33561856,3424741,1018350,21113,34598023,3445854, +bandwidth,,25,1000,1024,4096,true,1349,1230,2593,33561856,3424741,1018350,21113,34598023,3445854, \ No newline at end of file diff --git a/blog/2025-08-31-benchmarks/data/bandwidth_dark.svg b/blog/2025-08-31-benchmarks/data/bandwidth_dark.svg new file mode 100644 index 0000000..6d577da --- /dev/null +++ b/blog/2025-08-31-benchmarks/data/bandwidth_dark.svg @@ -0,0 +1,1291 @@ + + + + + + + + 1980-01-01T00:00:00+00:00 + image/svg+xml + + + Matplotlib v3.10.5, https://matplotlib.org/ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/blog/2025-08-31-benchmarks/data/bandwidth_light.svg b/blog/2025-08-31-benchmarks/data/bandwidth_light.svg new file mode 100644 index 0000000..1c7c474 --- /dev/null +++ b/blog/2025-08-31-benchmarks/data/bandwidth_light.svg @@ -0,0 +1,1291 @@ + + + + + + + + 1980-01-01T00:00:00+00:00 + image/svg+xml + + + Matplotlib v3.10.5, https://matplotlib.org/ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/blog/2025-08-31-benchmarks/data/download.browser.csv b/blog/2025-08-31-benchmarks/data/download.browser.csv new file mode 100644 index 0000000..5cfa4c0 --- /dev/null +++ b/blog/2025-08-31-benchmarks/data/download.browser.csv @@ -0,0 +1,80 @@ +group,name,latency,bandwidth,upload_size,download_size,defer_decryption,time_preprocess,time_online,time_total,uploaded_preprocess,downloaded_preprocess,uploaded_online,downloaded_online,uploaded_total,downloaded_total,heap_max_bytes +download_size,,10,200,2048,1024,true,5081,1723,6814,46701128,3424957,1453042,22149,48165843,3447106, +download_size,,10,200,2048,1024,true,5029,1674,6714,46701152,3424957,1453042,22149,48165867,3447106, +download_size,,10,200,2048,1024,true,4950,1688,6649,46701152,3424969,1453042,22149,48165867,3447118, +download_size,,10,200,2048,1024,true,5078,1688,6776,46701176,3424957,1453042,22149,48165891,3447106, +download_size,,10,200,2048,1024,true,5023,1680,6714,46701152,3424969,1453042,22149,48165867,3447118, +download_size,,10,200,2048,1024,true,4989,1765,6765,46701152,3424981,1453042,22149,48165867,3447130, +download_size,,10,200,2048,1024,true,5034,1897,6942,46701128,3424957,1453042,22149,48165843,3447106, +download_size,,10,200,2048,1024,true,4988,1826,6822,46701152,3424969,1453042,22149,48165867,3447118, +download_size,,10,200,2048,1024,true,5029,1731,6768,46701128,3424969,1453042,22149,48165843,3447118, +download_size,,10,200,2048,1024,true,4990,1633,6634,46701152,3424969,1453042,22149,48165867,3447118, +download_size,,10,200,2048,2048,true,4971,1909,6891,46701128,3424969,1510242,22149,48226115,3447118, +download_size,,10,200,2048,2048,true,4924,1851,6785,46701176,3425017,1510242,22149,48226163,3447166, +download_size,,10,200,2048,2048,true,4992,1818,6819,46701128,3424957,1510242,22149,48226115,3447106, +download_size,,10,200,2048,2048,true,5034,1875,6920,46701152,3424981,1510242,22149,48226139,3447130, +download_size,,10,200,2048,2048,true,5030,1828,6869,46701152,3424981,1510242,22149,48226139,3447130, +download_size,,10,200,2048,2048,true,4914,1806,6732,46701152,3424969,1510242,22149,48226139,3447118, +download_size,,10,200,2048,2048,true,4963,1805,6779,46701152,3424969,1510242,22149,48226139,3447118, +download_size,,10,200,2048,2048,true,4904,1800,6717,46701152,3424969,1510242,22149,48226139,3447118, +download_size,,10,200,2048,2048,true,5072,1899,6982,46701128,3424969,1510242,22149,48226115,3447118, +download_size,,10,200,2048,2048,true,5041,1804,6854,46701152,3424969,1510242,22149,48226139,3447118, +download_size,,10,200,2048,4096,true,5033,1971,7013,46701152,3424981,1624642,22149,48346683,3447130, +download_size,,10,200,2048,4096,true,5043,2085,7141,46701176,3424969,1624642,22149,48346707,3447118, +download_size,,10,200,2048,4096,true,5080,1953,7046,46701152,3424969,1624642,22149,48346683,3447118, +download_size,,10,200,2048,4096,true,4999,2159,7170,46701176,3424993,1624642,22149,48346707,3447142, +download_size,,10,200,2048,4096,true,4998,2090,7100,46701152,3424969,1624642,22149,48346683,3447118, +download_size,,10,200,2048,4096,true,4956,2034,7002,46701152,3424981,1624642,22149,48346683,3447130, +download_size,,10,200,2048,4096,true,4958,2106,7079,46701080,3424921,1624642,22149,48346611,3447070, +download_size,,10,200,2048,4096,true,5052,2058,7122,46701152,3424969,1624642,22149,48346683,3447118, +download_size,,10,200,2048,4096,true,4986,2161,7162,46701152,3424969,1624642,22149,48346683,3447118, +download_size,,10,200,2048,4096,true,4991,2011,7014,46701152,3424969,1624642,22149,48346683,3447118, +download_size,,10,200,2048,8192,true,6314,2448,8776,46703778,4097541,1853442,22149,48590397,4119690, +download_size,,10,200,2048,8192,true,6277,2438,8729,46703802,4097553,1853442,22149,48590421,4119702, +download_size,,10,200,2048,8192,true,6248,2441,8703,46703802,4097553,1853442,22149,48590421,4119702, +download_size,,10,200,2048,8192,true,6214,2484,8710,46703802,4097541,1853442,22149,48590421,4119690, +download_size,,10,200,2048,8192,true,6172,2371,8557,46703754,4097541,1853442,22149,48590373,4119690, +download_size,,10,200,2048,8192,true,6196,2479,8689,46703778,4097529,1853442,22149,48590397,4119678, +download_size,,10,200,2048,8192,true,6242,2459,8715,46703802,4097553,1853442,22149,48590421,4119702, +download_size,,10,200,2048,8192,true,6169,2473,8655,46703754,4097553,1853442,22137,48590373,4119690, +download_size,,10,200,2048,8192,true,6247,2560,8826,46703802,4097541,1853442,22149,48590421,4119690, +download_size,,10,200,2048,8192,true,6234,2579,8827,46703778,4097541,1853442,22149,48590397,4119690, +download_size,,10,200,2048,16384,true,9818,3408,13245,46704278,4225673,2312292,22249,49074425,4247922, +download_size,,10,200,2048,16384,true,9611,3197,12826,46704278,4225625,2312292,22273,49074425,4247898, +download_size,,10,200,2048,16384,true,9725,3364,13107,46704278,4225625,2312292,22261,49074425,4247886, +download_size,,10,200,2048,16384,true,9684,3433,13136,46704302,4225637,2312292,22273,49074449,4247910, +download_size,,10,200,2048,16384,true,9616,3433,13068,46704302,4225625,2312292,22273,49074449,4247898, +download_size,,10,200,2048,16384,true,9890,3408,13316,46704302,4225637,2312292,22261,49074449,4247898, +download_size,,10,200,2048,16384,true,9711,3514,13243,46704302,4225625,2312292,22261,49074449,4247886, +download_size,,10,200,2048,16384,true,9773,3516,13315,46704230,4225613,2312292,22273,49074377,4247886, +download_size,,10,200,2048,16384,true,9943,3456,13417,46704314,4225637,2312292,22273,49074461,4247910, +download_size,,10,200,2048,16384,true,9701,3448,13166,46704302,4225637,2312292,22261,49074449,4247898, +download_size,,10,200,2048,32768,true,14733,5356,20114,46704590,4289697,3228496,22273,50040177,4311970, +download_size,,10,200,2048,32768,true,14509,5239,19774,46704578,4289685,3228496,22249,50040165,4311934, +download_size,,10,200,2048,32768,true,14421,4965,19415,46704530,4289685,3228496,22261,50040117,4311946, +download_size,,10,200,2048,32768,true,14450,4990,19467,46704530,4289685,3228496,22249,50040117,4311934, +download_size,,10,200,2048,32768,true,14448,5126,19600,46704578,4289673,3228496,22261,50040165,4311934, +download_size,,10,200,2048,32768,true,14507,5442,19975,46704566,4289697,3228496,22249,50040153,4311946, +download_size,,10,200,2048,32768,true,14431,5162,19618,46704590,4289709,3228496,22261,50040177,4311970, +download_size,,10,200,2048,32768,true,14321,5006,19356,46704578,4289697,3228496,22261,50040165,4311958, +download_size,,10,200,2048,32768,true,14498,5279,19802,46704554,4289697,3228496,22261,50040141,4311958, +download_size,,10,200,2048,32768,true,14372,5130,19527,46704542,4289697,3228496,22261,50040129,4311958, +download_size,,10,200,2048,65536,true,24342,8755,33134,46704742,4353673,5061024,22489,51971329,4376162, +download_size,,10,200,2048,65536,true,23806,8325,32186,46704742,4353709,5061024,22489,51971329,4376198, +download_size,,10,200,2048,65536,true,23984,8719,32757,46704802,4353697,5061024,22489,51971389,4376186, +download_size,,10,200,2048,65536,true,23818,8718,32572,46704766,4353709,5061024,22489,51971353,4376198, +download_size,,10,200,2048,65536,true,23771,8973,32780,46704766,4353709,5061024,22489,51971353,4376198, +download_size,,10,200,2048,65536,true,23840,8891,32767,46704766,4353733,5061024,22489,51971353,4376222, +download_size,,10,200,2048,65536,true,23792,9091,32920,46704814,4353709,5061024,22489,51971401,4376198, +download_size,,10,200,2048,65536,true,23870,8961,32887,46704802,4353673,5061024,22489,51971389,4376162, +download_size,,10,200,2048,65536,true,23819,8636,32491,46704742,4353685,5061024,22489,51971329,4376174, +download_size,,10,200,2048,65536,true,23833,8097,31966,46704766,4353721,5061024,22489,51971353,4376210, +download_size,,10,200,2048,131072,true,42894,15817,58830,46708440,5282401,8726244,22813,55837201,5305238, +download_size,,10,200,2048,131072,true,42271,14949,57339,46708488,5282413,8726244,22813,55837249,5305250, +download_size,,10,200,2048,131072,true,42271,15289,57675,46708560,5282437,8726244,22813,55837321,5305274, +download_size,,10,200,2048,131072,true,42235,15223,57576,46708476,5282377,8726244,22813,55837237,5305214, +download_size,,10,200,2048,131072,true,42339,15041,57531,46708560,5282437,8726244,22813,55837321,5305274, +download_size,,10,200,2048,131072,true,42146,16158,58424,46708452,5282425,8726223,22813,55837192,5305262, +download_size,,10,200,2048,131072,true,42197,14590,56906,46708560,5282425,8726223,22801,55837300,5305250, +download_size,,10,200,2048,131072,true,42251,15834,58198,46708536,5282401,8726223,22813,55837276,5305238, +download_size,,10,200,2048,131072,true,42191,17332,59643,46708560,5282425,8726244,22813,55837321,5305262, diff --git a/blog/2025-08-31-benchmarks/data/download.ipynb b/blog/2025-08-31-benchmarks/data/download.ipynb new file mode 100644 index 0000000..af7518f --- /dev/null +++ b/blog/2025-08-31-benchmarks/data/download.ipynb @@ -0,0 +1,121 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 8, + "id": "5d91e955-ef4d-47a0-a254-9e3f64f46deb", + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "import numpy as np\n", + "import matplotlib.pyplot as plt\n", + "from brokenaxes import brokenaxes\n", + "import pandas as pd\n", + "\n", + "for dark in [True, False]:\n", + " if dark:\n", + " plt.style.use(\"dark_background\")\n", + " else:\n", + " plt.style.use(\"default\")\n", + "\n", + " df1 = pd.read_csv(\"download.native.csv\", header=0)\n", + " df2 = pd.read_csv(\"download.browser.csv\", header=0)\n", + "\n", + " agg1 = df1.groupby(\"download_size\")[\"time_total\"].mean().reset_index()\n", + " agg2 = df2.groupby(\"download_size\")[\"time_total\"].mean().reset_index()\n", + "\n", + " plt.plot(agg1[\"download_size\"]/1024.0, agg1[\"time_total\"]/1000.0, label=\"native\")\n", + " plt.plot(agg2[\"download_size\"]/1024.0, agg2[\"time_total\"]/1000.0, label=\"browser\")\n", + "\n", + " plt.xlabel(\"Response size (KB)\")\n", + " plt.ylabel(\"Runtime (sec)\")\n", + " plt.title(\"Response size effect on protocol runtime\")\n", + " plt.legend(loc=\"upper left\") \n", + "\n", + " plt.xticks(list(range(0, 30, 10)) + list(range(20,140, 20)) )\n", + " plt.yticks(list(range(0, 15, 5)) + list(range(10, 70, 10)) )\n", + "\n", + " plt.xlim(0, 120)\n", + " plt.ylim(0, 60)\n", + "\n", + " plt.grid(True, linestyle=\"--\")\n", + "\n", + " svg_name = \"download_dark.svg\" if dark else \"download_light.svg\"\n", + " plt.savefig(svg_name, bbox_inches=\"tight\")\n", + " plt.show()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "4f61c9fb-7176-4f79-8537-772256a0443d", + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "76dddf3c-94cd-4b24-ad4c-172a9bb133f4", + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "16aaacfc-5c3f-43fd-8149-7e19b40577b9", + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "7f7a83f8-b14e-4b12-b181-1db5eb853aef", + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "29b36958-84dd-4eb8-a082-44e70d99cc9d", + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "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.13.3" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/blog/2025-08-31-benchmarks/data/download.native.csv b/blog/2025-08-31-benchmarks/data/download.native.csv new file mode 100644 index 0000000..8e285c8 --- /dev/null +++ b/blog/2025-08-31-benchmarks/data/download.native.csv @@ -0,0 +1,81 @@ +group,name,latency,bandwidth,upload_size,download_size,defer_decryption,time_preprocess,time_online,time_total,uploaded_preprocess,downloaded_preprocess,uploaded_online,downloaded_online,uploaded_total,downloaded_total,heap_max_bytes +download_size,,10,200,2048,1024,true,2656,863,3532,46701116,3425377,1453042,22149,48165831,3447526, +download_size,,10,200,2048,1024,true,2664,861,3539,46701068,3425305,1453042,22149,48165783,3447454, +download_size,,10,200,2048,1024,true,2666,849,3530,46701140,3425377,1453042,22149,48165855,3447526, +download_size,,10,200,2048,1024,true,2657,853,3531,46701164,3425377,1453042,22149,48165879,3447526, +download_size,,10,200,2048,1024,true,2675,862,3551,46701116,3425317,1453042,22149,48165831,3447466, +download_size,,10,200,2048,1024,true,2663,855,3533,46701140,3425377,1453042,22149,48165855,3447526, +download_size,,10,200,2048,1024,true,2664,865,3543,46701152,3425377,1453042,22149,48165867,3447526, +download_size,,10,200,2048,1024,true,2664,860,3538,46701116,3425377,1453042,22149,48165831,3447526, +download_size,,10,200,2048,1024,true,2678,859,3552,46701140,3425377,1453042,22149,48165855,3447526, +download_size,,10,200,2048,1024,true,2666,854,3534,46701164,3425377,1453042,22149,48165879,3447526, +download_size,,10,200,2048,2048,true,2649,882,3545,46701128,3425365,1510242,22149,48226115,3447514, +download_size,,10,200,2048,2048,true,2671,885,3570,46701200,3425377,1510242,22149,48226187,3447526, +download_size,,10,200,2048,2048,true,2667,898,3579,46701164,3425305,1510242,22149,48226151,3447454, +download_size,,10,200,2048,2048,true,2660,887,3563,46701116,3425365,1510242,22149,48226103,3447514, +download_size,,10,200,2048,2048,true,2665,886,3566,46701128,3425377,1510242,22149,48226115,3447526, +download_size,,10,200,2048,2048,true,2669,882,3571,46701164,3425545,1510242,22149,48226151,3447694, +download_size,,10,200,2048,2048,true,2662,881,3558,46701176,3425377,1510242,22149,48226163,3447526, +download_size,,10,200,2048,2048,true,2655,885,3553,46701176,3425377,1510242,22149,48226163,3447526, +download_size,,10,200,2048,2048,true,2661,895,3577,46701128,3425377,1510242,22149,48226115,3447526, +download_size,,10,200,2048,2048,true,2666,895,3576,46701188,3425293,1510242,22149,48226175,3447442, +download_size,,10,200,2048,4096,true,2674,954,3642,46701188,3425533,1624642,22149,48346719,3447682, +download_size,,10,200,2048,4096,true,2676,950,3642,46701188,3425293,1624642,22149,48346719,3447442, +download_size,,10,200,2048,4096,true,2679,947,3643,46701572,3425773,1624642,22149,48347103,3447922, +download_size,,10,200,2048,4096,true,2676,951,3650,46701152,3425545,1624642,22149,48346683,3447694, +download_size,,10,200,2048,4096,true,2671,949,3634,46701212,3425545,1624642,22149,48346743,3447694, +download_size,,10,200,2048,4096,true,2676,947,3639,46701188,3425533,1624642,22149,48346719,3447682, +download_size,,10,200,2048,4096,true,2678,945,3639,46701140,3425377,1624642,22149,48346671,3447526, +download_size,,10,200,2048,4096,true,2666,949,3631,46701188,3425389,1624642,22149,48346719,3447538, +download_size,,10,200,2048,4096,true,2671,941,3628,46701224,3425545,1624642,22149,48346755,3447694, +download_size,,10,200,2048,4096,true,2677,950,3642,46701152,3425377,1624642,22149,48346683,3447526, +download_size,,10,200,2048,8192,true,2975,1094,4094,46704582,4099317,1853442,22137,48591201,4121454, +download_size,,10,200,2048,8192,true,2921,1053,3992,46703790,4097937,1853442,22149,48590409,4120086, +download_size,,10,200,2048,8192,true,2968,1074,4059,46703766,4097877,1853442,22149,48590385,4120026, +download_size,,10,200,2048,8192,true,2930,1065,4014,46703790,4097865,1853442,22149,48590409,4120014, +download_size,,10,200,2048,8192,true,2931,1048,3998,46703838,4097961,1853454,22149,48590469,4120110, +download_size,,10,200,2048,8192,true,2942,1069,4031,46703862,4097889,1853442,22149,48590481,4120038, +download_size,,10,200,2048,8192,true,2922,1044,3984,46703778,4097865,1853442,22149,48590397,4120014, +download_size,,10,200,2048,8192,true,2936,1053,4007,46703790,4097949,1853442,22149,48590409,4120098, +download_size,,10,200,2048,8192,true,2909,1054,3991,46703814,4097937,1853442,22149,48590433,4120086, +download_size,,10,200,2048,8192,true,2933,1063,4014,46703850,4097961,1853454,22149,48590481,4120110, +download_size,,10,200,2048,16384,true,3726,1379,5134,46704626,4226429,2312268,22237,49074749,4248666, +download_size,,10,200,2048,16384,true,3733,1375,5135,46704302,4226201,2312280,22237,49074437,4248438, +download_size,,10,200,2048,16384,true,3725,1399,5152,46704338,4226045,2312280,22237,49074473,4248282, +download_size,,10,200,2048,16384,true,3731,1366,5124,46704338,4226117,2312280,22237,49074473,4248354, +download_size,,10,200,2048,16384,true,3725,1369,5121,46704350,4226129,2312280,22237,49074485,4248366, +download_size,,10,200,2048,16384,true,3738,1363,5129,46704650,4226333,2312268,22237,49074773,4248570, +download_size,,10,200,2048,16384,true,3721,1337,5085,46704326,4226117,2312280,22237,49074461,4248354, +download_size,,10,200,2048,16384,true,3717,1338,5085,46704338,4226201,2312280,22237,49074473,4248438, +download_size,,10,200,2048,16384,true,3737,1401,5166,46704854,4226741,2312268,22237,49074977,4248978, +download_size,,10,200,2048,16384,true,3730,1383,5141,46704338,4226117,2312280,22237,49074473,4248354, +download_size,,10,200,2048,32768,true,4864,1931,6846,46705106,4290909,3228496,22237,50040693,4313146, +download_size,,10,200,2048,32768,true,4896,1902,6848,46704614,4290261,3228496,22249,50040201,4312510, +download_size,,10,200,2048,32768,true,4889,1923,6867,46704902,4290549,3228496,22237,50040489,4312786, +download_size,,10,200,2048,32768,true,4880,1934,6864,46704998,4290561,3228496,22249,50040585,4312810, +download_size,,10,200,2048,32768,true,4883,1901,6835,46704998,4290585,3228496,22237,50040585,4312822, +download_size,,10,200,2048,32768,true,4859,1922,6833,46704974,4290525,3228496,22237,50040561,4312762, +download_size,,10,200,2048,32768,true,4896,1917,6864,46705010,4290573,3228496,22237,50040597,4312810, +download_size,,10,200,2048,32768,true,4861,1923,6837,46704998,4290585,3228496,22237,50040585,4312822, +download_size,,10,200,2048,32768,true,4866,1879,6797,46704662,4290333,3228496,22249,50040249,4312582, +download_size,,10,200,2048,32768,true,4888,1942,6881,46705034,4290585,3228496,22237,50040621,4312822, +download_size,,10,200,2048,65536,true,7296,2967,10353,46704802,4354141,5061024,22465,51971389,4376606, +download_size,,10,200,2048,65536,true,7240,2990,10324,46704802,4354309,5061024,22465,51971389,4376786, +download_size,,10,200,2048,65536,true,7278,2961,10331,46704814,4354129,5061024,22465,51971401,4376606, +download_size,,10,200,2048,65536,true,7246,3031,10370,46705294,4354633,5061024,22477,51971881,4377110, +download_size,,10,200,2048,65536,true,7270,2959,10322,46704826,4354141,5061024,22465,51971413,4376618, +download_size,,10,200,2048,65536,true,7230,3042,10366,46705246,4354621,5061024,22465,51971833,4377086, +download_size,,10,200,2048,65536,true,7275,3007,10374,46704790,4354141,5061024,22477,51971377,4376618, +download_size,,10,200,2048,65536,true,7222,3047,10362,46704862,4354369,5061024,22477,51971449,4376846, +download_size,,10,200,2048,65536,true,7247,2971,10312,46704778,4354069,5061024,22465,51971365,4376546, +download_size,,10,200,2048,65536,true,7218,3062,10373,46704838,4354309,5061024,22477,51971425,4376786, +download_size,,10,200,2048,131072,true,11525,5019,16878,46708392,5282665,8726217,22729,55837126,5305418, +download_size,,10,200,2048,131072,true,11496,5050,16827,46708392,5282701,8726217,22729,55837126,5305454, +download_size,,10,200,2048,131072,true,11470,5047,16764,46708392,5282665,8726217,22729,55837126,5305418, +download_size,,10,200,2048,131072,true,11500,5136,16905,46708368,5282677,8726217,22729,55837102,5305430, +download_size,,10,200,2048,131072,true,11506,5088,16866,46708428,5282689,8726217,22729,55837162,5305442, +download_size,,10,200,2048,131072,true,11488,5250,16973,46708404,5282701,8726217,22729,55837138,5305454, +download_size,,10,200,2048,131072,true,11507,5122,16884,46708452,5282713,8726217,22729,55837186,5305466, +download_size,,10,200,2048,131072,true,11560,5012,16825,46708392,5282677,8726217,22729,55837126,5305430, +download_size,,10,200,2048,131072,true,11502,5053,16815,46708452,5282689,8726217,22729,55837186,5305442, +download_size,,10,200,2048,131072,true,11491,5047,16814,46708392,5282677,8726217,22729,55837126,5305430, \ No newline at end of file diff --git a/blog/2025-08-31-benchmarks/data/download_dark.svg b/blog/2025-08-31-benchmarks/data/download_dark.svg new file mode 100644 index 0000000..779f143 --- /dev/null +++ b/blog/2025-08-31-benchmarks/data/download_dark.svg @@ -0,0 +1,1283 @@ + + + + + + + + 1980-01-01T00:00:00+00:00 + image/svg+xml + + + Matplotlib v3.10.5, https://matplotlib.org/ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/blog/2025-08-31-benchmarks/data/download_light.svg b/blog/2025-08-31-benchmarks/data/download_light.svg new file mode 100644 index 0000000..ebd25b4 --- /dev/null +++ b/blog/2025-08-31-benchmarks/data/download_light.svg @@ -0,0 +1,1283 @@ + + + + + + + + 1980-01-01T00:00:00+00:00 + image/svg+xml + + + Matplotlib v3.10.5, https://matplotlib.org/ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/blog/2025-08-31-benchmarks/data/latency.browser.csv b/blog/2025-08-31-benchmarks/data/latency.browser.csv new file mode 100644 index 0000000..7eb3e26 --- /dev/null +++ b/blog/2025-08-31-benchmarks/data/latency.browser.csv @@ -0,0 +1,51 @@ +group,name,latency,bandwidth,upload_size,download_size,defer_decryption,time_preprocess,time_online,time_total,uploaded_preprocess,downloaded_preprocess,uploaded_online,downloaded_online,uploaded_total,downloaded_total,heap_max_bytes +latency,,10,1000,1024,4096,true,3290,1955,5257,33561844,3424729,1018350,21113,34598011,3445842, +latency,,10,1000,1024,4096,true,3335,1929,5275,33561844,3424729,1018371,21101,34598032,3445830, +latency,,10,1000,1024,4096,true,3323,1855,5189,33561844,3424717,1018371,21113,34598032,3445830, +latency,,10,1000,1024,4096,true,3270,1782,5064,33561844,3424741,1018371,21113,34598032,3445854, +latency,,10,1000,1024,4096,true,3308,1910,5230,33561844,3424717,1018371,21113,34598032,3445830, +latency,,10,1000,1024,4096,true,3302,1982,5295,33561844,3424717,1018350,21113,34598011,3445830, +latency,,10,1000,1024,4096,true,3331,1888,5230,33561844,3424717,1018371,21101,34598032,3445818, +latency,,10,1000,1024,4096,true,3284,1772,5067,33561844,3424717,1018371,21113,34598032,3445830, +latency,,10,1000,1024,4096,true,3378,1825,5214,33561844,3424729,1018371,21113,34598032,3445842, +latency,,10,1000,1024,4096,true,3351,1834,5195,33561844,3424717,1018371,21113,34598032,3445830, +latency,,25,1000,1024,4096,true,3431,2144,5595,33561844,3424717,1018371,21113,34598032,3445830, +latency,,25,1000,1024,4096,true,3621,2174,5815,33561844,3424717,1018371,21101,34598032,3445818, +latency,,25,1000,1024,4096,true,3610,2156,5785,33561844,3424729,1018371,21113,34598032,3445842, +latency,,25,1000,1024,4096,true,3591,2441,6051,33561844,3424729,1018350,21113,34598011,3445842, +latency,,25,1000,1024,4096,true,3575,2195,5790,33561856,3424729,1018371,21113,34598044,3445842, +latency,,25,1000,1024,4096,true,3557,2188,5764,33561844,3424729,1018350,21113,34598011,3445842, +latency,,25,1000,1024,4096,true,3547,2348,5914,33561844,3424729,1018371,21113,34598032,3445842, +latency,,25,1000,1024,4096,true,3597,2132,5747,33561844,3424729,1018350,21113,34598011,3445842, +latency,,25,1000,1024,4096,true,3530,2187,5736,33561844,3424717,1018350,21113,34598011,3445830, +latency,,25,1000,1024,4096,true,3552,2151,5722,33561844,3424729,1018350,21113,34598011,3445842, +latency,,50,1000,1024,4096,true,3870,2781,6683,33561844,3424741,1018371,21113,34598032,3445854, +latency,,50,1000,1024,4096,true,3849,2741,6622,33561844,3424741,1018371,21113,34598032,3445854, +latency,,50,1000,1024,4096,true,3956,2806,6792,33561856,3424753,1018371,21113,34598044,3445866, +latency,,50,1000,1024,4096,true,3856,2739,6626,33561844,3424717,1018371,21113,34598032,3445830, +latency,,50,1000,1024,4096,true,3889,2894,6812,33561844,3424753,1018350,21113,34598011,3445866, +latency,,50,1000,1024,4096,true,3828,2890,6747,33561844,3424741,1018350,21113,34598011,3445854, +latency,,50,1000,1024,4096,true,4015,2684,6730,33561844,3424753,1018350,21113,34598011,3445866, +latency,,50,1000,1024,4096,true,3933,2685,6650,33561844,3424729,1018350,21113,34598011,3445842, +latency,,50,1000,1024,4096,true,3970,2777,6778,33561844,3424753,1018371,21113,34598032,3445866, +latency,,50,1000,1024,4096,true,3894,2710,6635,33561844,3424753,1018371,21101,34598032,3445854, +latency,,100,1000,1024,4096,true,4632,3802,8491,33561868,3424741,1018371,21113,34598056,3445854, +latency,,100,1000,1024,4096,true,4510,3876,8442,33561868,3424729,1018371,21101,34598056,3445830, +latency,,100,1000,1024,4096,true,4607,3832,8495,33561868,3424753,1018371,21113,34598056,3445866, +latency,,100,1000,1024,4096,true,4497,3659,8210,33561868,3424741,1018350,21113,34598035,3445854, +latency,,100,1000,1024,4096,true,4661,3756,8472,33561880,3424741,1018350,21113,34598047,3445854, +latency,,100,1000,1024,4096,true,4723,3793,8572,33561856,3424753,1018371,21113,34598044,3445866, +latency,,100,1000,1024,4096,true,4742,3818,8616,33561880,3424753,1018350,21113,34598047,3445866, +latency,,100,1000,1024,4096,true,4638,3760,8454,33561856,3424753,1018371,21113,34598044,3445866, +latency,,100,1000,1024,4096,true,4502,3731,8289,33561868,3424753,1018371,21113,34598056,3445866, +latency,,100,1000,1024,4096,true,4645,3835,8536,33561880,3424741,1018371,21113,34598068,3445854, +latency,,200,1000,1024,4096,true,6342,5917,12366,33561868,3424741,1018374,21137,34598059,3445878, +latency,,200,1000,1024,4096,true,6318,5750,12174,33561868,3424741,1018395,21137,34598080,3445878, +latency,,200,1000,1024,4096,true,6392,5782,12283,33561868,3424753,1018395,21125,34598080,3445878, +latency,,200,1000,1024,4096,true,6646,5857,12610,33561868,3424753,1018374,21125,34598059,3445878, +latency,,200,1000,1024,4096,true,6576,5882,12564,33561868,3424753,1018395,21125,34598080,3445878, +latency,,200,1000,1024,4096,true,6560,5954,12620,33561868,3424753,1018374,21137,34598059,3445890, +latency,,200,1000,1024,4096,true,6723,5806,12633,33561868,3424753,1018395,21125,34598080,3445878, +latency,,200,1000,1024,4096,true,6737,5848,12691,33561868,3424753,1018374,21125,34598059,3445878, +latency,,200,1000,1024,4096,true,6536,5869,12511,33561868,3424753,1018374,21125,34598059,3445878, +latency,,200,1000,1024,4096,true,6380,5764,12250,33561868,3424741,1018374,21149,34598059,3445890, \ No newline at end of file diff --git a/blog/2025-08-31-benchmarks/data/latency.ipynb b/blog/2025-08-31-benchmarks/data/latency.ipynb new file mode 100644 index 0000000..edd8421 --- /dev/null +++ b/blog/2025-08-31-benchmarks/data/latency.ipynb @@ -0,0 +1,92 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 8, + "id": "d43eeaf8-36c1-49c3-8399-2fe3dc8346b0", + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "import numpy as np\n", + "import matplotlib.pyplot as plt\n", + "from brokenaxes import brokenaxes\n", + "import pandas as pd\n", + "\n", + "for dark in [True, False]:\n", + " if dark:\n", + " plt.style.use(\"dark_background\")\n", + " else:\n", + " plt.style.use(\"default\")\n", + "\n", + " df1 = pd.read_csv(\"latency.native.csv\", header=0)\n", + " df2 = pd.read_csv(\"latency.browser.csv\", header=0)\n", + "\n", + " agg1 = df1.groupby(\"latency\")[\"time_total\"].mean().reset_index()\n", + " agg2 = df2.groupby(\"latency\")[\"time_total\"].mean().reset_index()\n", + "\n", + " plt.plot(agg1[\"latency\"], agg1[\"time_total\"]/1000.0, label=\"native\")\n", + " plt.plot(agg2[\"latency\"], agg2[\"time_total\"]/1000.0, label=\"browser\")\n", + "\n", + " plt.xlim(10, 200)\n", + " plt.ylim(0, 13)\n", + "\n", + " # force ticks, otherwise 10 is not displayed\n", + " plt.xticks([10] + list(range(25, 201, 25)))\n", + "\n", + " plt.xlabel(\"Latency (msec)\")\n", + " plt.ylabel(\"Runtime (sec)\")\n", + " plt.title(\"Latency effect on protocol runtime\")\n", + " plt.legend(loc=\"upper left\") \n", + "\n", + " plt.grid(True, linestyle=\"--\")\n", + "\n", + " svg_name = \"latency_dark.svg\" if dark else \"latency_light.svg\"\n", + "\n", + " plt.savefig(svg_name, bbox_inches=\"tight\")\n", + "\n", + " plt.show()\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "39b91559-3c26-45e1-9348-8fdf2a486122", + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "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.13.3" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/blog/2025-08-31-benchmarks/data/latency.native.csv b/blog/2025-08-31-benchmarks/data/latency.native.csv new file mode 100644 index 0000000..e67093e --- /dev/null +++ b/blog/2025-08-31-benchmarks/data/latency.native.csv @@ -0,0 +1,51 @@ +group,name,latency,bandwidth,upload_size,download_size,defer_decryption,time_preprocess,time_online,time_total,uploaded_preprocess,downloaded_preprocess,uploaded_online,downloaded_online,uploaded_total,downloaded_total,heap_max_bytes +latency,,10,1000,1024,4096,true,1017,849,1880,33561856,3424753,1018350,21113,34598023,3445866, +latency,,10,1000,1024,4096,true,1013,848,1876,33561856,3424753,1018350,21113,34598023,3445866, +latency,,10,1000,1024,4096,true,1009,849,1873,33561844,3424753,1018350,21113,34598011,3445866, +latency,,10,1000,1024,4096,true,1008,849,1872,33561844,3424753,1018350,21113,34598011,3445866, +latency,,10,1000,1024,4096,true,1018,839,1871,33561856,3424753,1018338,21113,34598011,3445866, +latency,,10,1000,1024,4096,true,1028,846,1889,33561844,3424753,1018350,21113,34598011,3445866, +latency,,10,1000,1024,4096,true,1007,845,1868,33561844,3424753,1018350,21113,34598011,3445866, +latency,,10,1000,1024,4096,true,1010,847,1872,33561856,3424753,1018350,21113,34598023,3445866, +latency,,10,1000,1024,4096,true,1004,854,1870,33561856,3424753,1018350,21113,34598023,3445866, +latency,,10,1000,1024,4096,true,1012,845,1871,33561856,3424753,1018350,21113,34598023,3445866, +latency,,25,1000,1024,4096,true,1386,1242,2644,33561856,3424741,1018350,21113,34598023,3445854, +latency,,25,1000,1024,4096,true,1371,1246,2634,33561856,3424753,1018350,21113,34598023,3445866, +latency,,25,1000,1024,4096,true,1420,1218,2654,33561856,3424753,1018338,21113,34598011,3445866, +latency,,25,1000,1024,4096,true,1339,1234,2590,33561856,3424741,1018350,21113,34598023,3445854, +latency,,25,1000,1024,4096,true,1414,1234,2663,33561856,3424753,1018350,21113,34598023,3445866, +latency,,25,1000,1024,4096,true,1368,1237,2623,33561856,3424753,1018350,21113,34598023,3445866, +latency,,25,1000,1024,4096,true,1372,1226,2612,33561856,3424741,1018350,21113,34598023,3445854, +latency,,25,1000,1024,4096,true,1390,1227,2631,33561856,3424753,1018350,21113,34598023,3445866, +latency,,25,1000,1024,4096,true,1384,1230,2631,33561856,3424753,1018350,21113,34598023,3445866, +latency,,25,1000,1024,4096,true,1360,1228,2603,33561856,3424753,1018350,21113,34598023,3445866, +latency,,50,1000,1024,4096,true,2155,1810,3981,33561856,3424741,1018350,21113,34598023,3445854, +latency,,50,1000,1024,4096,true,2155,1756,3924,33561856,3424753,1018338,21113,34598011,3445866, +latency,,50,1000,1024,4096,true,2198,1806,4018,33561832,3424753,1018350,21101,34597999,3445854, +latency,,50,1000,1024,4096,true,2151,1757,3924,33561856,3424753,1018338,21113,34598011,3445866, +latency,,50,1000,1024,4096,true,2151,1757,3925,33561856,3424753,1018338,21113,34598011,3445866, +latency,,50,1000,1024,4096,true,2107,1808,3930,33561856,3424741,1018350,21113,34598023,3445854, +latency,,50,1000,1024,4096,true,2197,1813,4027,33561844,3424753,1018350,21101,34598011,3445854, +latency,,50,1000,1024,4096,true,2153,1805,3972,33561856,3424753,1018350,21113,34598023,3445866, +latency,,50,1000,1024,4096,true,2155,1757,3926,33561856,3424753,1018338,21113,34598011,3445866, +latency,,50,1000,1024,4096,true,2250,1756,4021,33561832,3424753,1018338,21101,34597987,3445854, +latency,,100,1000,1024,4096,true,3947,2896,6860,33561856,3424777,1018338,21113,34598011,3445890, +latency,,100,1000,1024,4096,true,3753,2901,6668,33561856,3424753,1018338,21113,34598011,3445866, +latency,,100,1000,1024,4096,true,3751,2906,6672,33561856,3424753,1018338,21113,34598011,3445866, +latency,,100,1000,1024,4096,true,3744,2898,6656,33561856,3424753,1018338,21113,34598011,3445866, +latency,,100,1000,1024,4096,true,3755,2904,6671,33561856,3424753,1018338,21113,34598011,3445866, +latency,,100,1000,1024,4096,true,3947,2891,6853,33561832,3424753,1018338,21101,34597987,3445854, +latency,,100,1000,1024,4096,true,3783,2908,6708,33561856,3424753,1018338,21113,34598011,3445866, +latency,,100,1000,1024,4096,true,3656,2895,6566,33561856,3424753,1018338,21113,34598011,3445866, +latency,,100,1000,1024,4096,true,3674,2899,6592,33561856,3424753,1018338,21113,34598011,3445866, +latency,,100,1000,1024,4096,true,3848,2899,6766,33561856,3424753,1018338,21113,34598011,3445866, +latency,,200,1000,1024,4096,true,7145,5191,12350,33561856,3424777,1018362,21125,34598035,3445902, +latency,,200,1000,1024,4096,true,7146,5196,12358,33561856,3424765,1018362,21137,34598035,3445902, +latency,,200,1000,1024,4096,true,7349,5403,12766,33561856,3424777,1018374,21137,34598047,3445914, +latency,,200,1000,1024,4096,true,7350,5394,12760,33561856,3424777,1018374,21137,34598047,3445914, +latency,,200,1000,1024,4096,true,7350,5398,12763,33561856,3424777,1018374,21137,34598047,3445914, +latency,,200,1000,1024,4096,true,7151,5192,12358,33561844,3424777,1018362,21137,34598023,3445914, +latency,,200,1000,1024,4096,true,7347,5401,12763,33561856,3424777,1018374,21137,34598047,3445914, +latency,,200,1000,1024,4096,true,7346,5406,12769,33561856,3424777,1018374,21137,34598047,3445914, +latency,,200,1000,1024,4096,true,7154,5198,12367,33561844,3424753,1018362,21137,34598023,3445890, +latency,,200,1000,1024,4096,true,7350,5392,12757,33561856,3424777,1018374,21137,34598047,3445914, \ No newline at end of file diff --git a/blog/2025-08-31-benchmarks/data/latency.svg b/blog/2025-08-31-benchmarks/data/latency.svg new file mode 100644 index 0000000..8a49e99 --- /dev/null +++ b/blog/2025-08-31-benchmarks/data/latency.svg @@ -0,0 +1,1171 @@ + + + + + + + + 1980-01-01T00:00:00+00:00 + image/svg+xml + + + Matplotlib v3.10.5, https://matplotlib.org/ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/blog/2025-08-31-benchmarks/data/latency_dark.svg b/blog/2025-08-31-benchmarks/data/latency_dark.svg new file mode 100644 index 0000000..ed24a24 --- /dev/null +++ b/blog/2025-08-31-benchmarks/data/latency_dark.svg @@ -0,0 +1,1171 @@ + + + + + + + + 1980-01-01T00:00:00+00:00 + image/svg+xml + + + Matplotlib v3.10.5, https://matplotlib.org/ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/blog/2025-08-31-benchmarks/data/latency_light.svg b/blog/2025-08-31-benchmarks/data/latency_light.svg new file mode 100644 index 0000000..b69166a --- /dev/null +++ b/blog/2025-08-31-benchmarks/data/latency_light.svg @@ -0,0 +1,1171 @@ + + + + + + + + 1980-01-01T00:00:00+00:00 + image/svg+xml + + + Matplotlib v3.10.5, https://matplotlib.org/ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/blog/2025-08-31-benchmarks/index.md b/blog/2025-08-31-benchmarks/index.md new file mode 100644 index 0000000..5644527 --- /dev/null +++ b/blog/2025-08-31-benchmarks/index.md @@ -0,0 +1,101 @@ +--- +title: TLSNotary Performance Benchmarks (August 2025) +authors: [dan, heeckhau] +--- + +Over the past months, we’ve made major performance leaps in TLSNotary. We implemented the VOLE-based IZK backend (QuickSilver) and introduced control-flow and MPC optimizations across the stack. + +Starting with v0.1.0-alpha.8, QuickSilver replaced the older garbled-circuit proof backend, reducing bandwidth usage and sensitivity to latency. Subsequent releases added transcript hash commitments, low-bandwidth modes, faster APIs, and more. (https://github.com/tlsnotary/tlsn/releases) + +These changes yield significant performance gains in both native and browser builds. + +In this post, we share results from our new benchmarking harness and highlight how different network conditions (bandwidth, latency, response size) affect real-world performance. + + + +## Why is performance important? + +TLSNotary is an interactive protocol: the Prover and Verifier exchange data while the TLS session is ongoing. That means runtime is more than a benchmark number, it directly affects usability. + +If proving takes too long: +- Connections may **timeout** before notarization completes. +- Users may experience **slow, blocking interactions**. + +A key objective is minimizing the **online time**: the period when the Prover is actively connected to the Server. If this phase runs too long, the server will simply close the connection. + +TLSNotary addresses this by allowing the Prover and Verifier to **preprocess** much of the MPC work *before* the Prover connects to the Server. +The protocol is designed to make both the preprocessing and the online phase as short as possible; fast enough for smooth end-user experiences, without compromising security or privacy. + +## How did we measure? + +To ensure performance results are both **reliable** and **reproducible**, we created a dedicated benchmarking harness. It executes the full TLSNotary protocol in both **native** and **browser-based (WebAssembly)** environments, enabling apples-to-apples comparisons. + +For simulating network conditions, the harness uses robust, low-level Linux tooling (`ip`, `iptables`, and `tc`) to precisely emulate real-world scenarios: + +- **Bandwidth throttling**, to model tight or abundant network capacity. +- **Custom latency**, to reflect different round-trip times. +- **Packet shaping**, which can introduce jitter, chunking, or drops. + +Combined with the ability to tweak **request** and **response** sizes, this gives us a controlled environment to isolate how each factor—network and payload—impacts runtime in native versus browser builds. + +As all TLSNotary code, the harness is open source, so anyone can reproduce our results or adapt it for their own testing: +https://github.com/tlsnotary/tlsn/tree/783355772ac34af469048d0e67bb161fc620c6ac/crates/harness + +Raw data and notebooks are available on [GitHub](https://github.com/tlsnotary/website/tree/master/blog/2025-08-31-benchmarks/data). + +## How does Prover Upload Bandwidth impact performance? + +[ +![bandwidth benchmark](./data/bandwidth_light.svg#gh-light-mode-only) +![bandwidth benchmark](./data/bandwidth_dark.svg#gh-dark-mode-only) +]( + https://github.com/tlsnotary/website/blob/master/blog/2025-08-31-benchmarks/data/download.ipynb +) +*Benchmark parameters: latency = 25 ms, request size = 1 KB, response size = 4 KB.* + +On low-bandwidth connections, protocol runtime is dominated by the volume of MPC data the prover must upload to the verifier. Once bandwidth reaches around **100 Mbps**, the impact diminishes significantly and no longer drives the overall runtime. + +## How does Network Latency impact performance? + +[ +![latency benchmark](./data/latency_light.svg#gh-light-mode-only) +![latency benchmark](./data/latency_dark.svg#gh-dark-mode-only) +]( + https://github.com/tlsnotary/website/blob/master/blog/2025-08-31-benchmarks/data/latency.ipynb +) +*Benchmark parameters: bandwidth = 1000 Mbps (to isolate latency), request size = 1 KB, response size = 4 KB.* + +As expected, latency has a direct proportional impact on runtime. Since our MPC-TLS protocol involves ~40 communication rounds, higher RTT values linearly increase total runtime. At higher latencies, the cost of communication dominates, and the **native build’s speed advantage** is effectively canceled out — its runtime converges to that of the browser build. + +## How does Server Response Size impact performance? + +[ +![response size benchmark](./data/download_light.svg#gh-light-mode-only) +![response size benchmark](./data/download_dark.svg#gh-dark-mode-only) +]( + https://github.com/tlsnotary/website/blob/master/blog/2025-08-31-benchmarks/data/download.ipynb +) +*Benchmark parameters: latency = 10 ms, bandwidth = 200 Mbps, request size = 2 KB.* + +Runtime also scales with server response size. In many real-world use cases, a response size of ~10 KB is sufficient. Under these conditions, the **native build completes in ~5 s**, while the **browser build takes ~10 s** — still responsive enough for a smooth end-user experience. + +:::info + +Note: The benchmarks above measure proving statements over the entire server response. If selective disclosure is not required, TLSNotary can process much larger resources, such as images or video, without a significant impact on runtime. In these cases, obtaining a ciphertext commitment is fast and largely independent of response size. This scenario will be covered in a separate benchmark in the upcoming alpha.13 release. + +::: + +## Conclusions + +Overall, as demonstrated in the final benchmark where bandwidth and latency are not the limiting factors, the **browser build runs about 3× slower than the native build**. The main reason is the absence of hardware acceleration in the browser’s WebAssembly environment. The underlying cryptography relies heavily on SIMD instructions and hardware-accelerated cryptographic operations for optimal performance, which are fully available in native builds but not yet accessible in browsers. + +In conclusion, the performance is good enough for practical use, but still leaves room for optimization in the browser. For example, an AES implementation which leverages the WASM SIMD extension could narrow the gap some more. Contributions welcome! + +--- + +## Benchmark Details + +- **Hardware:** All benchmarks were run on an AWS c5.4xlarge instance (16 vCPU, 3.0 GHz, 32 GB RAM). +- **Deferred Decryption:** Enabled (TLSNotary feature that defers decryption until the full TLS transcript is available, reducing MPC workload). +- **TCP_NODELAY:** Enabled to disable Nagle’s algorithm, ensuring immediate packet transmission and reducing latency for faster interactive proving. [Learn more](https://en.wikipedia.org/wiki/Nagle%27s_algorithm). +- **Reproducibility:** You can reproduce these results using our open-source benchmarking harness: [tlsnotary/tlsn/crates/harness](https://github.com/tlsnotary/tlsn/tree/783355772ac34af469048d0e67bb161fc620c6ac/crates/harness). diff --git a/blog/authors.yml b/blog/authors.yml index 1765e53..b373de5 100644 --- a/blog/authors.yml +++ b/blog/authors.yml @@ -35,3 +35,11 @@ kichong: url: https://kichongtran.substack.com/ ethereum-papers: https://mirror.xyz/ethpapers.eth farcaster: https://farcaster.xyz/kichong + +dan: + name: Dan + url: https://github.com/themighty1 + image_url: https://github.com/themighty1.png + page: true + socials: + github: themighty1