Files
age_cache_simulation/aoi_cache_experiment_eval.ipynb
2024-11-28 16:50:10 +01:00

442 lines
62 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

{
"cells": [
{
"cell_type": "code",
"execution_count": 1,
"id": "ae430903-55a2-47ed-87c6-677b1fb44198",
"metadata": {},
"outputs": [],
"source": [
"from enum import Enum\n",
"import os\n",
"import pandas as pd\n",
"import matplotlib.pyplot as plt"
]
},
{
"cell_type": "code",
"execution_count": 2,
"id": "9d6920fc-8633-4754-a762-ece23af18877",
"metadata": {},
"outputs": [],
"source": [
"# Types of cache\n",
"class CacheType(Enum):\n",
" LRU = 1\n",
" RANDOM_EVICTION = 2\n",
"\n",
"\n",
"DATABASE_OBJECTS = 100 # Number of objects in the database"
]
},
{
"cell_type": "code",
"execution_count": 3,
"id": "9b8c0686-1bab-47a4-9f9f-e5a11167ea8c",
"metadata": {},
"outputs": [],
"source": [
"configurations = {\n",
" \"default\": (DATABASE_OBJECTS, 10, CacheType.LRU, 5),\n",
" \"No Refresh\": (DATABASE_OBJECTS, 0, CacheType.LRU, 5),\n",
" \"Infinite TTL\": (int(DATABASE_OBJECTS / 2), 0, CacheType.LRU, 0),\n",
" \"Random Eviction\": (int(DATABASE_OBJECTS / 2), 10, CacheType.RANDOM_EVICTION, 5),\n",
" \"RE without Refresh\": (int(DATABASE_OBJECTS / 2), 0, CacheType.RANDOM_EVICTION, 5),\n",
" \"No Refresh (0.5s ttl)\": (DATABASE_OBJECTS, 0, CacheType.LRU, 0.5),\n",
" \"No Refresh (1.0s ttl)\": (DATABASE_OBJECTS, 0, CacheType.LRU, 1),\n",
" \"No Refresh (2.0s ttl)\": (DATABASE_OBJECTS, 0, CacheType.LRU, 2),\n",
" \"No Refresh (3.0s ttl)\": (DATABASE_OBJECTS, 0, CacheType.LRU, 3),\n",
" \"No Refresh (4.0s ttl)\": (DATABASE_OBJECTS, 0, CacheType.LRU, 4),\n",
" \"No Refresh (5.0s ttl)\": (DATABASE_OBJECTS, 0, CacheType.LRU, 5),\n",
"}\n",
"\n",
"experiments = [k.replace(\" \", \"_\").replace(\"(\", \"\").replace(\")\", \"\").replace(\".\", \"_\") for k in configurations.keys()]\n",
"experiments = [os.path.join(\"./experiments/\",e, \"overall_hit_age.csv\") for e in experiments if \"_ttl\" in e]\n",
"experiments = [{'ttl': '.'.join(file.split('/')[2].split(\"_\")[2:4]),'data': pd.read_csv(file)} for file in experiments]"
]
},
{
"cell_type": "code",
"execution_count": 4,
"id": "5be1df01-5dc8-43fe-a597-72ba76eefc0f",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"[{'ttl': '0.5s',\n",
" 'data': {'hit_rate': 0.458669533255314, 'avg_age': 0.1106194370534208}},\n",
" {'ttl': '1.0s',\n",
" 'data': {'hit_rate': 0.619673736493892, 'avg_age': 0.3072731620786534}},\n",
" {'ttl': '2.0s',\n",
" 'data': {'hit_rate': 0.769815289387402, 'avg_age': 0.7718808361404631}},\n",
" {'ttl': '3.0s',\n",
" 'data': {'hit_rate': 0.7906927824364712, 'avg_age': 1.1699029289276106}},\n",
" {'ttl': '4.0s',\n",
" 'data': {'hit_rate': 0.8461611168860607, 'avg_age': 1.6633213831159597}},\n",
" {'ttl': '5.0s',\n",
" 'data': {'hit_rate': 0.8689161003980432, 'avg_age': 2.145385684680086}}]"
]
},
"execution_count": 4,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"stats = [\n",
" {'ttl': e['ttl'],\n",
" 'data': {\n",
" \"hit_rate\": e['data']['hit_rate'][1], \n",
" \"avg_age\": e['data']['avg_age'][1]\n",
" }\n",
" } for e in experiments]\n",
"stats"
]
},
{
"cell_type": "code",
"execution_count": 5,
"id": "26030d03-b970-4e88-9c9a-e96ef79181c6",
"metadata": {},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAA90AAAJOCAYAAACqS2TfAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuMCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy80BEi2AAAACXBIWXMAAA9hAAAPYQGoP6dpAACTXUlEQVR4nOzdd3hUVf7H8c+kd3pNAgHpSO9FQoQQEBGMKGBDXBFd0Ci6ruyqiO7K+lMxqCAWBN0FARHUFUFCqAoiRRBQQxEpobeEBAjJ5P7+uJsZhiSQQCYzk7xfzzNPMufeO/OdcIx8OOeeYzEMwxAAAAAAAChxXq4uAAAAAACAsorQDQAAAACAkxC6AQAAAABwEkI3AAAAAABOQugGAAAAAMBJCN0AAAAAADgJoRsAAAAAACchdAMAAAAA4CSEbgAAAAAAnITQDQCAE0RFRemBBx5wdRkAAMDFCN0AAFzFzJkzZbFYtHHjxgKP9+zZUzfeeOMVX+OXX37Riy++qD/++KNI7/niiy/KYrHYHr6+voqKitLjjz+uM2fOFPMTmA4dOqQXX3xRW7ZsuabrXSEqKsrh51DYo6jnzZw5U5JksVg0ZswY1344AEC54OPqAgAAKItSUlLk5WX/t+1ffvlFEyZMUM+ePRUVFVXk13n33XcVEhKizMxMJScn6+2339bmzZv13XffFbumQ4cOacKECYqKilLr1q2Lfb0rJCYmKiMjw/b8m2++0aeffqo333xTVatWtbUfO3ZM1atXv+p5Xbt2LZ3CAQD4H0I3AABO4O/vXyKvM3jwYFtoHDVqlIYOHaq5c+fqxx9/VMeOHUvkPdzZoEGDHJ4fOXJEn376qQYNGnTFf7wo6nkAADgb08sBAHCCS+/pnjlzpu68805JUkxMjG2q88qVK4v9ujfddJMkac+ePba2U6dO6emnn1aLFi0UEhKisLAw9evXT1u3brWds3LlSnXo0EGSNGLEiHzTrSVp/fr16tu3rypUqKCgoCBFR0fr+++/v2I9R48elY+PjyZMmJDvWEpKiiwWi9555x1JUnZ2tiZMmKCGDRsqICBAVapUUffu3ZWUlFTsnwMAAJ6CkW4AAIooLS1NJ06cyNeenZ19xet69Oihxx9/XG+99Zb+9re/qWnTppJk+1ocefeEV6pUydb2+++/64svvtCdd96pevXq6ejRo3rvvfcUHR2tX375RbVr11bTpk310ksv6YUXXtDDDz9sC+95062XL1+ufv36qV27dho/fry8vLw0Y8YM3XzzzVqzZk2ho+o1atRQdHS05s2bp/Hjxzscmzt3rry9vW3/4PDiiy9q4sSJeuihh9SxY0elp6dr48aN2rx5s2JjY4v9swAAwBMQugEAKKLevXsXeqx58+aFHqtfv75uuukmvfXWW4qNjVXPnj2L/J6nTp2SJGVmZmr58uWaMmWKqlWrph49etjOadGihXbu3OlwD/l9992nJk2aaPr06Xr++edVo0YN9evXTy+88IK6dOmie++913auYRh65JFHFBMTo8WLF8tisUgyp7M3b95czz33nJYuXVpojUOGDNGoUaO0fft2hwXl5s6dq+joaNWoUUOStGjRIt1yyy16//33i/z5AQDwdIRuAACKaMqUKWrUqFG+9qeeekpWq9Up79m4cWOH5y1atNCMGTMUFBRka7v0/nGr1aozZ84oJCREjRs31ubNm6/6Hlu2bNGuXbv03HPP6eTJkw7HevXqpX//+9/Kzc11CPWXio+P1+jRozV37lxb6N6+fbt++eUXJSQk2M6rWLGiduzYoV27dqlhw4ZX//AAAJQBhG4AAIqoY8eOat++fb72SpUqFTjtvCR8/vnnCgsL0/Hjx/XWW29p7969CgwMdDgnNzdXkydP1tSpU7V3716HfwCoUqXKVd9j165dkqThw4cXek5aWprDlPZLVa1aVb169dK8efP08ssvSzJHuX18fBQfH28776WXXtLAgQPVqFEj3Xjjjerbt6/uu+8+tWzZ8qo1AgDgqQjdAAC4sR49ethWLx8wYIBatGihe+65R5s2bbKNPL/yyit6/vnn9eCDD+rll19W5cqV5eXlpSeeeEK5ublXfY+8c1577bVCtxILCQm54msMHTpUI0aM0JYtW9S6dWvNmzdPvXr1ctiuq0ePHtqzZ4++/PJLLV26VB9++KHefPNNTZs2TQ899FBRfhwAAHgcQjcAAKUg7z7p6xESEqLx48drxIgRmjdvnoYOHSpJmj9/vmJiYjR9+nSH88+cOeMQegur4YYbbpAkhYWFXfG+9SsZNGiQRo0apblz50qSdu7cqXHjxuU7r3LlyhoxYoRGjBihjIwM9ejRQy+++CKhGwBQZrFlGAAApSA4OFiSGYSvxz333KOIiAi9+uqr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xfnz52vevHnav3+/w57ZkrR58+ZivdaQIUN0/PhxvfDCCzpy5Ihat26tJUuW2BZX279/v7y8vByuSUlJ0Xfffaell+6jAwBuZM8ec2/tjz6Szpwx2wIDpXvuMffWbt3aldUBAACgtBQ7dL/11lv6+9//rgceeEBffvmlRowYoT179mjDhg0aPXr0NRUxZsyYQqeTr1y5Ml9b48aNZRjGNb0XADhLbq707bfmqPbixeaUckmqX1/685+lESOkypVdWyMAAABKV7FD99SpU/X+++9r2LBhmjlzpp555hnVr19fL7zwgk6dOuWMGgHArZ05I82YYY5s795tb+/b15xC3rev5O3tsvIAAADgQsUO3fv377dtDRYYGKizZ89Kku677z517txZ77zzTslWCABuats2acoU6d//lvK2aaxQwRzR/vOfpYYNXVsfAAAAXK/YobtmzZo6deqU6tatqzp16uiHH35Qq1attHfvXqZ8AyjzsrOlL780p5CvWmVvv/FGc1T7nnukkBDX1QcAAAD3UuzQffPNN+urr75SmzZtNGLECD355JOaP3++Nm7cqPj4eGfUCAAud/So9MEH0rRpUmqq2ebtLd1+uxm2e/SQLBbX1ggAAAD3U+zQ/f777ys3N1eSNHr0aFWpUkVr167VbbfdplGjRpV4gQDgKoYhrV9vjmrPm2eOcktS9erSww9Lo0ZJERGurREAAADurdih28vLy2ELr6FDh2ro0KGSpNTUVIWHh5dcdQDgAufPS3PnmmF70yZ7e+fO5qj24MGSv7/r6gMAAIDn8Lr6KVd35MgRPfbYY2rIqkEAPNi+fdKzz0qRkeZiaJs2meH6gQekDRukdevMe7YJ3AAAACiqIofu06dPa9iwYapatapq166tt956S7m5uXrhhRdUv359bdiwQTNmzHBmrQBQ4gxDWrZMGjTI3E/71VelkyelOnWkiROlgwfN7cDat3d1pQAAAPBERZ5e/uyzz2rt2rV64IEH9O233+rJJ5/UkiVL5OXlpeXLl6tz587OrBMASlR6uvTJJ+aWX7/9Zm/v1cucQn7rrZJPsW/AAQAAABwV+a+Uixcv1syZM3XzzTdrzJgxql+/vlq3bq1XXnnFmfUBQIn67TfzXu2PP5YyMsy2kBBp+HBp9GipaVPX1gcAAICypcih+9ChQ2r6v7+NRkVFKSAgQPfe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atUy/Pz8jPDwcGPIkCHG7t27bcfLet+0GAb7+AAAAAAA4Azc0w0AAAAAgJMQugEAAAAAcBJCNwAAAAAATkLoBgAAAADASQjdAAAAAAA4CaEbAAAAAAAnIXQDAAAAAOAkhG4AAAAAAJyE0A0AQBmUkpKimjVr6uzZs64u5bpERUUpMTGxSOd27txZn3/+uXMLAgCgmAjdAAA4icViueKjZ8+eVz0uFS945hk3bpwee+wxhYaGlvwHc1PPPfecnn32WeXm5rq6FAAAbHxcXQAAAGXV4cOHbd/PnTtXL7zwglJSUmxtFy9elJ+fnyTpwIED6tixo5YtW6bmzZtLku1Yce3fv19ff/213n777euo3vP069dPDz30kBYvXqz+/fu7uhwAACQx0g0AgNPUrFnT9qhQoYIsFotDW506dWzfV6tWTZJUpUoVW1vlypWv6X3nzZunVq1aKTw83Na2b98+DRgwQJUqVVJwcLCaN2+ub775xnZ8+/bt6tevn0JCQlSjRg3dd999OnHihO14bm6u/u///k8NGjSQv7+/6tSpo3/+85+249u2bdPNN9+swMBAValSRQ8//LAyMjJsxx944AENGjRIr7/+umrVqqUqVapo9OjRys7Otp1z7NgxDRgwQIGBgapXr55mzZrl8LkMw9CLL76oOnXqyN/fX7Vr19bjjz9uO+7t7a1bbrlFc+bMuaafGwAAzkDoBgCgjFmzZo3at2/v0DZ69GhlZWVp9erV2rZtm1599VWFhIRIks6cOaObb75Zbdq00caNG7VkyRIdPXpUd911l+36cePG6V//+peef/55/fLLL5o9e7Zq1KghScrMzFRcXJwqVaqkDRs26LPPPtOyZcs0ZswYhxpWrFihPXv2aMWKFfr44481c+ZMzZw503b8gQce0IEDB7RixQrNnz9fU6dO1bFjx2zHP//8c7355pt67733tGvXLn3xxRdq0aKFw3t07NhRa9asKZGfIwAAJYHp5QAAlDH79u3LF7r379+vO+64wxZS69evbzv2zjvvqE2bNnrllVdsbR999JEiIyO1c+dO1apVS5MnT9Y777yj4cOHS5JuuOEGde/eXZI0e/ZsXbhwQZ988omCg4NtrzlgwAC9+uqrtnBeqVIlvfPOO/L29laTJk3Uv39/JScna+TIkdq5c6cWL16sH3/8UR06dJAkTZ8+XU2bNnX4DDVr1lTv3r3l6+urOnXqqGPHjg6fs3bt2jpw4IByc3Pl5cXYAgDA9fi/EQAAZcz58+cVEBDg0Pb444/rH//4h7p166bx48fr559/th3bunWrVqxYoZCQENujSZMmkqQ9e/bo119/VVZWlnr16lXg+/36669q1aqVLXBLUrdu3ZSbm+twD3vz5s3l7e1te16rVi3bSPavv/4qHx8ftWvXzna8SZMmqlixou35nXfeqfPnz6t+/foaOXKkFi5cqJycHIdaAgMDlZubq6ysrKL+uAAAcCpCNwAAZUzVqlV1+vRph7aHHnpIv//+u+677z5t27ZN7du3ty20lpGRoQEDBmjLli0Oj127dqlHjx4KDAwskbp8fX0dnlsslmKtNB4ZGamUlBRNnTpVgYGB+vOf/6wePXo43Bd+6tQpBQcHl1jNAABcL0I3AABlTJs2bfTLL7/ka4+MjNQjjzyiBQsW6KmnntIHH3wgSWrbtq127NihqKgoNWjQwOERHByshg0bKjAwUMnJyQW+X9OmTbV161ZlZmba2r7//nt5eXmpcePGRaq5SZMmysnJ0aZNm2xtKSkpOnPmjMN5gYGBGjBggN566y2tXLlS69at07Zt22zHt2/frjZt2hTpPQEAKA2EbgAAPEBqamq+kejLR7PzxMXFad26dbJarba2J554Qt9++6327t2rzZs3a8WKFbb7pUePHq1Tp05p2LBh2rBhg/bs2aNvv/1WI0aMkNVqVUBAgP7617/qmWee0SeffKI9e/bohx9+0PTp0yVJ99xzjwICAjR8+HBt375dK1as0GOPPab77rvPdj/31TRu3Fh9+/bVqFGjtH79em3atEkPPfSQw4j1zJkzNX36dG3fvl2///67/vOf/ygwMFB169a1nbNmzRr16dOn2D9fAACchdANAIAHeP3119WmTRuHx6JFiwo8t1+/fvLx8dGyZctsbVarVaNHj1bTpk3Vt29fNWrUSFOnTpVkLj72/fffy2q1qk+fPmrRooWeeOIJVaxY0bYY2fPPP6+nnnpKL7zwgpo2baohQ4bY7scOCgrSt99+q1OnTqlDhw4aPHiwevXqpXfeeadYn3HGjBmqXbu2oqOjFR8fr4cffljVq1e3Ha9YsaI++OADdevWTS1bttSyZcv03//+V1WqVJFk/sPE2rVrNWLEiGK9LwAAzmQxDMNwdREAAKBkTZkyRV999ZW+/fZbV5dSav7617/q9OnTev/9911dCgAANmwZBgBAGTRq1CidOXNGZ8+eVWhoqKvLKRXVq1fX2LFjXV0GAAAOGOkGAAAAAMBJuKcbAAAAAAAnIXQDAAAAAOAkhG4AAAAAAJyE0A0AAAAAgJMQugEAAAAAcBJCNwAAAAAATkLoBgAAAADASQjdAAAAAAA4CaEbAAAAAAAnIXQDAAAAAOAkhG4AAAAAAJyE0A0AAAAAgJMQugEAAAAAcBJCNwAAAAAATkLoBgAAAADASQjdAAAU0dSpU2WxWNSpUydXlyLJ/epxhp49e8pisVz1UdTzXnzxRUlSVFSUbr31Vtd+OABAuWAxDMNwdREAAHiCbt266dChQ/rjjz+0a9cuNWjQgHqcLCkpSUePHrU937Bhg9566y397W9/U9OmTW3tJ0+eVJUqVa56XsuWLdWyZUtFRUXpxhtv1Ndff106HwQAUG75uLoAAAA8wd69e7V27VotWLBAo0aN0qxZszR+/HjqcbLY2FiH5wEBAXrrrbcUGxurnj17FnpdUc8DAMDZmF4OAEARzJo1S5UqVVL//v01ePBgzZo1y3YsOztblStX1ogRI/Jdl56eroCAAD399NO2tn379um2225TcHCwqlevrieffFLffvutLBaLVq5ced31XOrkyZO67777FBYWpooVK2r48OHaunWrLBaLZs6c6XDub7/9psGDB6ty5coKCAhQ+/bt9dVXX12xjuJ+9rffflvNmzdXUFCQKlWqpPbt22v27NlF+swAAHgiQjcAAEUwa9YsxcfHy8/PT8OGDdOuXbu0YcMGSZKvr69uv/12ffHFF7p48aLDdV988YWysrI0dOhQSVJmZqZuvvlmLVu2TI8//rj+/ve/a+3atfrrX/9aYvXkyc3N1YABA/Tpp59q+PDh+uc//6nDhw9r+PDh+V5vx44d6ty5s3799Vc9++yzeuONNxQcHKxBgwZp4cKFhdZRnM/+wQcf6PHHH1ezZs2UmJioCRMmqHXr1lq/fn2xPjsAAJ6E6eUAAFzFpk2b9Ntvv+ntt9+WJHXv3l0RERGaNWuWOnToIEkaMmSIPvroIy1dutRhga65c+eqfv36at++vSTpvffe0++//64vvvhCAwcOlCSNGjVKbdq0KdF6JDP0rlu3TomJiUpISJAkPfroo/mmbEtSQkKC6tSpow0bNsjf31+S9Oc//1ndu3fXX//6V91+++2F1lPUz75o0SI1b95cn332WZE/KwAAno6RbgAArmLWrFmqUaOGYmJiJEkWi0VDhgzRnDlzZLVaJUk333yzqlatqrlz59quO336tJKSkjRkyBBb25IlSxQeHq7bbrvN1hYQEKCRI0eWaD157+Xr6+vw2l5eXho9erTD6506dUrLly/XXXfdpbNnz+rEiRM6ceKETp48qbi4OO3atUupqamF1lPUz16xYkUdPHgw34g8AABlGaEbAIArsFqtmjNnjmJiYrR3717t3r1bu3fvVqdOnXT06FElJydLknx8fHTHHXfoyy+/VFZWliRpwYIFys7Odgie+/bt0w033CCLxeLwPkVdebyo9eS9V61atRQUFHTF99q9e7cMw9Dzzz+vatWqOTzyFmc7duxYoTUV9bP/9a9/VUhIiDp27KiGDRtq9OjR+v7774v0uQEA8FSEbgAArmD58uU6fPiw5syZo4YNG9oed911lyQ5LGA2dOhQnT17VosXL5YkzZs3T02aNFGrVq1cUk9R5ebmSpKefvppJSUlFfi42j8KFOWzN23aVCkpKZozZ466d++uzz//XN27dy+Tq64DAJCHe7oBALiCWbNmqXr16poyZUq+YwsWLNDChQs1bdo0BQYGqkePHqpVq5bmzp2r7t27a/ny5fr73//ucE3dunX1yy+/yDAMh9Hu3bt3l3g9devW1YoVK3Tu3DmH0e7L36t+/fqSzEXRevfuXaQ6LleUzy5JwcHBGjJkiIYMGaKLFy8qPj5e//znPzVu3DgFBARc03sDAODOGOkGAKAQ58+f14IFC3Trrbdq8ODB+R5jxozR2bNnbdtqeXl5afDgwfrvf/+rf//738rJyXGYXi1JcXFxSk1NddiK68KFC/rggw9KvJ64uDhlZ2c7vHZubm6+wF69enX17NlT7733ng4fPpzvfY8fP37V2ory2U+ePOnw3M/PT82aNZNhGMrOzr7qewAA4IkY6QYAoBBfffWVzp4967Do2aU6d+6satWqadasWbaAOWTIEL399tsaP368WrRooaZNmzpcM2rUKL3zzjsaNmyYEhISVKtWLc2aNcs2ynv5vd7XU8+gQYPUsWNHPfXUU9q9e7eaNGmir776SqdOncr3XlOmTFH37t3VokULjRw5UvXr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D9nr1kmnTuU/r2FDe8Du2lVq1owFyQAAHqPYoTstLU3Hjh3LN3X8+PHjSk9PlyRVrFhRFy9evOprZWZmqlWrVnrwwQcVX4T9Kvfu3av+/fvrkUce0axZs5ScnKyHHnpItWrVUlxcXHE/CgAAKC2GIe3b5ziKvXWreY/2pQICpI4d7SG7SxepWjXX1AwAQAm4punlDz74oN544w116NBBkrRhwwY9/fTTtlHqH3/8UY0aNbrqa/Xr10/9+vUr8ntPmzZN9erV0xtvvCFJatq0qb777ju9+eabhG4AANxJVpa0ebNjyD58OP95kZH2cN21q9SqVclv2wUAgAsVO3S/9957evLJJzV06FDl5OSYL+Ljo+HDh+vNN9+UJDVp0kQffvhhyVYqad26derdu7dDW1xcnJ544okSfy8AAFAMhw87rii+aZO5X/alfHyktm3tITtv2y4AAMqwYofukJAQffDBB3rzzTf1+/+26Khfv75CQkJs57Ru3brECrzUkSNHVKNGDYe2GjVqKD09XefPn1dgYGC+a7KyspR1yV6deVPgs7OzlZ2d7ZQ6S0Jebe5cI8on+ibcFX2zFOXkSNu2yeuHH2RZt06WH36Q5Y8/8p1mVKsmo3NnGV26mF/btZMu/391Ofjzom/CXdE34a48pW8Wtb5ih+7//Oc/io+PV0hIiFq2bFnswkrbxIkTNWHChHztS5cuVZAH7NeZlJTk6hKAAtE34a7omyXP9+xZVUpJUeWUFFX+7TdV2rVLPhcuOJxjWCxKr1tXp5o00anGjXWqSROdq1nTvm1Xerq0YoULqncf9E24K/om3JW7981z584V6bxih+4nn3xSjzzyiG677Tbde++9iouLk3cprSBas2ZNHT161KHt6NGjCgsLK3CUW5LGjRunsWPH2p6np6crMjJSffr0cViB3d1kZ2crKSlJsbGx8vX1dXU5gA19E+6KvllCcnOllBRZfvhBXuvWmSPZKSn5TjPCwszR67yR7A4dFBQWpiBJEaVftVujb8Jd0Tfhrjylb+bNor6aYofuw4cPa8mSJfr000911113KSgoSHfeeafuuecede3atdiFFkeXLl30zTffOLQlJSWpS5cuhV7j7+8vf3//fO2+vr5u/QeYx1PqRPlD34S7om8WU0aGfduuvEXPzpzJf16jRvYtu7p2laVpU1m8vEq9XE9G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",
"text/plain": [
"<Figure size 1000x600 with 2 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"# Extract TTL, hit_rate, and avg_age from data\n",
"ttls = [entry['ttl'] for entry in stats]\n",
"hit_rates = [entry['data']['hit_rate'] for entry in stats]\n",
"avg_ages = [entry['data']['avg_age'] for entry in stats]\n",
"\n",
"# Plotting\n",
"plt.figure(figsize=(10, 6))\n",
"\n",
"# Plot hit_rate\n",
"plt.subplot(2, 1, 1)\n",
"plt.plot(ttls, hit_rates, marker='o', color='b', label='Hit Rate')\n",
"plt.xlabel('TTL (seconds)')\n",
"plt.ylabel('Hit Rate')\n",
"plt.title('Hit Rate vs TTL')\n",
"plt.grid(True)\n",
"\n",
"# Plot avg_age\n",
"plt.subplot(2, 1, 2)\n",
"plt.plot(ttls, avg_ages, marker='o', color='r', label='Avg Age')\n",
"plt.xlabel('TTL (seconds)')\n",
"plt.ylabel('Avg Age')\n",
"plt.title('Avg Age vs TTL')\n",
"plt.grid(True)\n",
"\n",
"# Show the plots\n",
"plt.tight_layout()\n",
"plt.savefig(\"./experiments/hr_and_age_vs_ttl\")\n",
"plt.show()\n"
]
},
{
"cell_type": "code",
"execution_count": 6,
"id": "c4a8220e-9a21-42db-889a-26d901672f5e",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"['0.5s', '1.0s', '2.0s', '3.0s', '4.0s', '5.0s']"
]
},
"execution_count": 6,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"ttls"
]
},
{
"cell_type": "code",
"execution_count": 7,
"id": "58a7865b-6ce6-4960-8dc5-c926d5463949",
"metadata": {},
"outputs": [],
"source": [
"pd.DataFrame(hit_rates, columns=[\"hit_rates\"], index=ttls).to_markdown('./experiments/hit_rates.md')\n",
"pd.DataFrame(avg_ages, columns=[\"avg_ages\"], index=ttls).to_markdown('./experiments/avg_ages.md')"
]
},
{
"cell_type": "code",
"execution_count": 8,
"id": "a92dcf86-d0ae-4f5c-937f-aeac45ac0dea",
"metadata": {},
"outputs": [],
"source": [
"details = [k.replace(\" \", \"_\").replace(\"(\", \"\").replace(\")\", \"\").replace(\".\", \"_\") for k in configurations.keys()]\n",
"details = [os.path.join(\"./experiments/\",e, \"details.csv\") for e in details if \"_ttl\" in e]"
]
},
{
"cell_type": "code",
"execution_count": 9,
"id": "0ffb1366-83ea-49ab-83ca-945ed993ef3f",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"['./experiments/No_Refresh_0_5s_ttl/details.csv',\n",
" './experiments/No_Refresh_1_0s_ttl/details.csv',\n",
" './experiments/No_Refresh_2_0s_ttl/details.csv',\n",
" './experiments/No_Refresh_3_0s_ttl/details.csv',\n",
" './experiments/No_Refresh_4_0s_ttl/details.csv',\n",
" './experiments/No_Refresh_5_0s_ttl/details.csv']"
]
},
"execution_count": 9,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"details"
]
},
{
"cell_type": "code",
"execution_count": 10,
"id": "6e48f78f-15a3-4788-8ac9-6ad1fabbee26",
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>0.5s</th>\n",
" <th>1.0s</th>\n",
" <th>2.0s</th>\n",
" <th>3.0s</th>\n",
" <th>4.0s</th>\n",
" <th>5.0s</th>\n",
" </tr>\n",
" <tr>\n",
" <th>obj_id</th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>1</td>\n",
" <td>1</td>\n",
" <td>5</td>\n",
" <td>1</td>\n",
" <td>1</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>3</td>\n",
" <td>2</td>\n",
" <td>2</td>\n",
" <td>1</td>\n",
" <td>1</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>1</td>\n",
" <td>3</td>\n",
" <td>3</td>\n",
" <td>1</td>\n",
" <td>1</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>1</td>\n",
" <td>2</td>\n",
" <td>6</td>\n",
" <td>1</td>\n",
" <td>3</td>\n",
" <td>3</td>\n",
" </tr>\n",
" <tr>\n",
" <th>5</th>\n",
" <td>2</td>\n",
" <td>1</td>\n",
" <td>1</td>\n",
" <td>1</td>\n",
" <td>2</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>...</th>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>96</th>\n",
" <td>1</td>\n",
" <td>1</td>\n",
" <td>2</td>\n",
" <td>45</td>\n",
" <td>1</td>\n",
" <td>7</td>\n",
" </tr>\n",
" <tr>\n",
" <th>97</th>\n",
" <td>1</td>\n",
" <td>3</td>\n",
" <td>7</td>\n",
" <td>1</td>\n",
" <td>1</td>\n",
" <td>3</td>\n",
" </tr>\n",
" <tr>\n",
" <th>98</th>\n",
" <td>37</td>\n",
" <td>1</td>\n",
" <td>52</td>\n",
" <td>2</td>\n",
" <td>13</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>99</th>\n",
" <td>4</td>\n",
" <td>1</td>\n",
" <td>18</td>\n",
" <td>3</td>\n",
" <td>19</td>\n",
" <td>2</td>\n",
" </tr>\n",
" <tr>\n",
" <th>100</th>\n",
" <td>2</td>\n",
" <td>1</td>\n",
" <td>1</td>\n",
" <td>1</td>\n",
" <td>1</td>\n",
" <td>2</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"<p>100 rows × 6 columns</p>\n",
"</div>"
],
"text/plain": [
" 0.5s 1.0s 2.0s 3.0s 4.0s 5.0s\n",
"obj_id \n",
"1 1 1 5 1 1 1\n",
"2 3 2 2 1 1 1\n",
"3 1 3 3 1 1 1\n",
"4 1 2 6 1 3 3\n",
"5 2 1 1 1 2 1\n",
"... ... ... ... ... ... ...\n",
"96 1 1 2 45 1 7\n",
"97 1 3 7 1 1 3\n",
"98 37 1 52 2 13 1\n",
"99 4 1 18 3 19 2\n",
"100 2 1 1 1 1 2\n",
"\n",
"[100 rows x 6 columns]"
]
},
"execution_count": 10,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"pd.concat([pd.read_csv(file,index_col=\"obj_id\")['lambda'].rename(f\"{'.'.join(file.split('/')[2].split(\"_\")[2:4])}\") for file in details], axis=1)"
]
},
{
"cell_type": "code",
"execution_count": 11,
"id": "3e0ddc4a-bede-4921-8ce8-427ef028e19e",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"43624"
]
},
"execution_count": 11,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"sum(pd.read_csv(\"./experiments/No_Refresh_0_5s_ttl/details.csv\",index_col=\"obj_id\")['access_count'])"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "e324fbe8-24a6-49e8-96b9-d1a1a49f9644",
"metadata": {},
"outputs": [],
"source": []
}
],
"metadata": {
"kernelspec": {
"display_name": "graphs",
"language": "python",
"name": "graphs"
},
"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.12.7"
}
},
"nbformat": 4,
"nbformat_minor": 5
}