feat(optimal ttl): Added calculation for optimal ttl of each object

Signed-off-by: Tuan-Dat Tran <tuan-dat.tran@tudattr.dev>
This commit is contained in:
Tuan-Dat Tran 2024-12-03 15:15:56 +01:00
parent 272f722f23
commit 0ea1fb5d07
2 changed files with 697 additions and 11 deletions

View File

@ -40,9 +40,6 @@
"def eta_star(db_object_count, c_f, cache_sz, c_delta, lambda_vals):\n",
" num = (db_object_count * c_f - cache_sz * c_delta)\n",
" denom = np.sum(1.0/lambda_vals)\n",
" if denom == 0:\n",
" print(\"sum(1.0/lambda_vals) == 0\")\n",
" print(db_object_count, c_f, cache_sz, c_delta, lambda_vals)\n",
" return max(0, num/denom)"
]
},
@ -160,12 +157,29 @@
{
"cell_type": "code",
"execution_count": 9,
"id": "a289bb1a-0385-4835-bc92-88304c1834df",
"metadata": {},
"outputs": [],
"source": [
"def optimize_ttl(optimized_hitrates, lambda_vals):\n",
" ti_values = np.where(\n",
" optimized_hitrates < 1,\n",
" -1 / lambda_vals * np.log(1 - optimized_hitrates),\n",
" np.inf\n",
" )\n",
" \n",
" return ti_values"
]
},
{
"cell_type": "code",
"execution_count": 10,
"id": "bd4536e9-273b-4f49-b06c-2f00605e0f7d",
"metadata": {},
"outputs": [],
"source": [
"# Define the task to be parallelized\n",
"def grid_search_task(db_object_count, cache_size, c_f, c_delta, db_object_counts, cache_sizes, c_f_values, c_delta_values):\n",
"def grid_search_task(db_object_count, cache_size, c_f, c_delta):\n",
" if db_object_count < cache_size:\n",
" return None # Skip this combination if db_object_count < cache_size\n",
" \n",
@ -175,10 +189,12 @@
" # Call the optimization function\n",
" optimized_hitrates = optimize_hitrates(db_object_count, cache_size, c_f, c_delta, lambda_vals)\n",
"\n",
" optimized_ttl = optimize_ttl(optimized_hitrates, lambda_vals)\n",
" \n",
" # Compute the objective function\n",
" objective = objective_function(optimized_hitrates, c_f, c_delta, lambda_vals)\n",
"\n",
" return (objective, db_object_count, cache_size, c_f, c_delta)\n",
" return (objective, optimized_ttl, db_object_count, cache_size, c_f, c_delta)\n",
"\n",
"# Perform grid search with parallelization and tqdm progress bar\n",
"def grid_search(db_object_counts, cache_sizes, c_f_values, c_delta_values):\n",
@ -187,7 +203,7 @@
" \n",
" # Use Parallel from joblib to parallelize the grid search\n",
" task_results = Parallel(n_jobs=-1, verbose=1)(\n",
" delayed(grid_search_task)(db_object_count, cache_size, c_f, c_delta, db_object_counts, cache_sizes, c_f_values, c_delta_values)\n",
" delayed(grid_search_task)(db_object_count, cache_size, c_f, c_delta)\n",
" for db_object_count, cache_size, c_f, c_delta in itertools.product(db_object_counts, cache_sizes, c_f_values, c_delta_values)\n",
" )\n",
"\n",
@ -197,23 +213,155 @@
" results.append(result)\n",
" \n",
" # Convert the results into a pandas DataFrame\n",
" df = pd.DataFrame(results, columns=[\"Objective\", \"db_object_count\", \"cache_size\", \"c_f (Miss Cost)\", \"c_delta (Refresh Cost)\"])\n",
" df = pd.DataFrame(results, columns=[\"Objective\", \"Optimal TTL\", \"db_object_count\", \"cache_size\", \"c_f (Miss Cost)\", \"c_delta (Refresh Cost)\"])\n",
" \n",
" return df\n"
]
},
{
"cell_type": "code",
"execution_count": 11,
"execution_count": null,
"id": "a92c6772-6609-41a8-a3d1-4d640b69a864",
"metadata": {},
"outputs": [
{
"name": "stdout",
"name": "stderr",
"output_type": "stream",
"text": [
"CPU times: user 7.96 ms, sys: 21.6 ms, total: 29.6 ms\n",
"Wall time: 27 ms\n"
"[Parallel(n_jobs=-1)]: Using backend LokyBackend with 12 concurrent workers.\n",
"/tmp/ipykernel_137117/3256270718.py:4: RuntimeWarning: divide by zero encountered in log\n",
"/tmp/ipykernel_137117/3256270718.py:4: RuntimeWarning: divide by zero encountered in log\n",
"/tmp/ipykernel_137117/3256270718.py:4: RuntimeWarning: divide by zero encountered in log\n",
"/tmp/ipykernel_137117/3256270718.py:4: RuntimeWarning: divide by zero encountered in log\n",
"[Parallel(n_jobs=-1)]: Done 26 tasks | elapsed: 0.6s\n",
"/tmp/ipykernel_137117/3256270718.py:4: RuntimeWarning: divide by zero encountered in log\n",
"/tmp/ipykernel_137117/3256270718.py:4: RuntimeWarning: divide by zero encountered in log\n",
"/tmp/ipykernel_137117/3256270718.py:4: RuntimeWarning: divide by zero encountered in log\n",
"/tmp/ipykernel_137117/3256270718.py:4: RuntimeWarning: divide by zero encountered in log\n",
"/tmp/ipykernel_137117/3256270718.py:4: RuntimeWarning: divide by zero encountered in log\n",
"/tmp/ipykernel_137117/3256270718.py:4: RuntimeWarning: divide by zero encountered in log\n",
"/tmp/ipykernel_137117/3256270718.py:4: RuntimeWarning: divide by zero encountered in log\n",
"/tmp/ipykernel_137117/3256270718.py:4: RuntimeWarning: divide by zero encountered in log\n",
"/tmp/ipykernel_137117/3256270718.py:4: RuntimeWarning: divide by zero encountered in log\n",
"/tmp/ipykernel_137117/3256270718.py:4: RuntimeWarning: divide by zero encountered in log\n",
"/tmp/ipykernel_137117/3256270718.py:4: RuntimeWarning: divide by zero encountered in log\n",
"/tmp/ipykernel_137117/3256270718.py:4: RuntimeWarning: divide by zero encountered in log\n",
"/tmp/ipykernel_137117/3256270718.py:4: RuntimeWarning: divide by zero encountered in log\n",
"/tmp/ipykernel_137117/3256270718.py:4: RuntimeWarning: divide by zero encountered in log\n",
"/tmp/ipykernel_137117/3256270718.py:4: RuntimeWarning: divide by zero encountered in log\n",
"/tmp/ipykernel_137117/3256270718.py:4: RuntimeWarning: divide by zero encountered in log\n",
"/tmp/ipykernel_137117/3256270718.py:4: RuntimeWarning: divide by zero encountered in log\n",
"/tmp/ipykernel_137117/3256270718.py:4: RuntimeWarning: divide by zero encountered in log\n",
"/tmp/ipykernel_137117/3256270718.py:4: RuntimeWarning: divide by zero encountered in log\n",
"/tmp/ipykernel_137117/3256270718.py:4: RuntimeWarning: divide by zero encountered in log\n",
"/tmp/ipykernel_137117/3256270718.py:4: RuntimeWarning: divide by zero encountered in log\n",
"/tmp/ipykernel_137117/3256270718.py:4: RuntimeWarning: divide by zero encountered in log\n",
"/tmp/ipykernel_137117/3256270718.py:4: RuntimeWarning: divide by zero encountered in log\n",
"/tmp/ipykernel_137117/3256270718.py:4: RuntimeWarning: divide by zero encountered in log\n",
"/tmp/ipykernel_137117/3256270718.py:4: RuntimeWarning: divide by zero encountered in log\n",
"/tmp/ipykernel_137117/3256270718.py:4: RuntimeWarning: divide by zero encountered in log\n",
"/tmp/ipykernel_137117/3256270718.py:4: RuntimeWarning: divide by zero encountered in log\n",
"/tmp/ipykernel_137117/3256270718.py:4: RuntimeWarning: divide by zero encountered in log\n",
"/tmp/ipykernel_137117/3256270718.py:4: RuntimeWarning: divide by zero encountered in log\n",
"/tmp/ipykernel_137117/3256270718.py:4: RuntimeWarning: divide by zero encountered in log\n",
"/tmp/ipykernel_137117/3256270718.py:4: RuntimeWarning: divide by zero encountered in log\n",
"/tmp/ipykernel_137117/3256270718.py:4: RuntimeWarning: divide by zero encountered in log\n",
"/tmp/ipykernel_137117/3256270718.py:4: RuntimeWarning: divide by zero encountered in log\n",
"/tmp/ipykernel_137117/3256270718.py:4: RuntimeWarning: divide by zero encountered in log\n",
"/tmp/ipykernel_137117/3256270718.py:4: RuntimeWarning: divide by zero encountered in log\n",
"/tmp/ipykernel_137117/3256270718.py:4: RuntimeWarning: divide by zero encountered in log\n",
"/tmp/ipykernel_137117/3256270718.py:4: RuntimeWarning: divide by zero encountered in log\n",
"/tmp/ipykernel_137117/3256270718.py:4: RuntimeWarning: divide by zero encountered in log\n",
"/tmp/ipykernel_137117/3256270718.py:4: RuntimeWarning: divide by zero encountered in log\n",
"/tmp/ipykernel_137117/3256270718.py:4: RuntimeWarning: divide by zero encountered in log\n",
"/tmp/ipykernel_137117/3256270718.py:4: RuntimeWarning: divide by zero encountered in log\n",
"/tmp/ipykernel_137117/3256270718.py:4: RuntimeWarning: divide by zero encountered in log\n",
"/tmp/ipykernel_137117/3256270718.py:4: RuntimeWarning: divide by zero encountered in log\n",
"/tmp/ipykernel_137117/3256270718.py:4: RuntimeWarning: divide by zero encountered in log\n",
"/tmp/ipykernel_137117/3256270718.py:4: RuntimeWarning: divide by zero encountered in log\n",
"/tmp/ipykernel_137117/3256270718.py:4: RuntimeWarning: divide by zero encountered in log\n",
"/tmp/ipykernel_137117/3256270718.py:4: RuntimeWarning: divide by zero encountered in log\n",
"/tmp/ipykernel_137117/3256270718.py:4: RuntimeWarning: divide by zero encountered in log\n",
"/tmp/ipykernel_137117/3256270718.py:4: RuntimeWarning: divide by zero encountered in log\n",
"/tmp/ipykernel_137117/3256270718.py:4: RuntimeWarning: divide by zero encountered in log\n",
"/tmp/ipykernel_137117/3256270718.py:4: RuntimeWarning: divide by zero encountered in log\n",
"/tmp/ipykernel_137117/3256270718.py:4: RuntimeWarning: divide by zero encountered in log\n",
"/tmp/ipykernel_137117/3256270718.py:4: RuntimeWarning: divide by zero encountered in log\n",
"/tmp/ipykernel_137117/3256270718.py:4: RuntimeWarning: divide by zero encountered in log\n",
"/tmp/ipykernel_137117/3256270718.py:4: RuntimeWarning: divide by zero encountered in log\n",
"/tmp/ipykernel_137117/3256270718.py:4: RuntimeWarning: divide by zero encountered in log\n",
"/tmp/ipykernel_137117/3256270718.py:4: RuntimeWarning: divide by zero encountered in log\n",
"/tmp/ipykernel_137117/3256270718.py:4: RuntimeWarning: divide by zero encountered in log\n",
"/tmp/ipykernel_137117/3256270718.py:4: RuntimeWarning: divide by zero encountered in log\n",
"/tmp/ipykernel_137117/3256270718.py:4: RuntimeWarning: divide by zero encountered in log\n",
"/tmp/ipykernel_137117/3256270718.py:4: RuntimeWarning: divide by zero encountered in log\n",
"/tmp/ipykernel_137117/3256270718.py:4: RuntimeWarning: divide by zero encountered in log\n",
"/tmp/ipykernel_137117/3256270718.py:4: RuntimeWarning: divide by zero encountered in log\n",
"/tmp/ipykernel_137117/3256270718.py:4: RuntimeWarning: divide by zero encountered in log\n",
"/tmp/ipykernel_137117/3256270718.py:4: RuntimeWarning: divide by zero encountered in log\n",
"/tmp/ipykernel_137117/3256270718.py:4: RuntimeWarning: divide by zero encountered in log\n",
"/tmp/ipykernel_137117/3256270718.py:4: RuntimeWarning: divide by zero encountered in log\n",
"/tmp/ipykernel_137117/3256270718.py:4: RuntimeWarning: divide by zero encountered in log\n",
"/tmp/ipykernel_137117/3256270718.py:4: RuntimeWarning: divide by zero encountered in log\n",
"/tmp/ipykernel_137117/3256270718.py:4: RuntimeWarning: divide by zero encountered in log\n",
"/tmp/ipykernel_137117/3256270718.py:4: RuntimeWarning: divide by zero encountered in log\n",
"/tmp/ipykernel_137117/3256270718.py:4: RuntimeWarning: divide by zero encountered in log\n",
"/tmp/ipykernel_137117/3256270718.py:4: RuntimeWarning: divide by zero encountered in log\n",
"/tmp/ipykernel_137117/3256270718.py:4: RuntimeWarning: divide by zero encountered in log\n",
"/tmp/ipykernel_137117/3256270718.py:4: RuntimeWarning: divide by zero encountered in log\n",
"/tmp/ipykernel_137117/3256270718.py:4: RuntimeWarning: divide by zero encountered in log\n",
"/tmp/ipykernel_137117/3256270718.py:4: RuntimeWarning: divide by zero encountered in log\n",
"/tmp/ipykernel_137117/3256270718.py:4: RuntimeWarning: divide by zero encountered in log\n",
"/tmp/ipykernel_137117/3256270718.py:4: RuntimeWarning: divide by zero encountered in log\n",
"/tmp/ipykernel_137117/3256270718.py:4: RuntimeWarning: divide by zero encountered in log\n",
"/tmp/ipykernel_137117/3256270718.py:4: RuntimeWarning: divide by zero encountered in log\n",
"/tmp/ipykernel_137117/3256270718.py:4: RuntimeWarning: divide by zero encountered in log\n",
"/tmp/ipykernel_137117/3256270718.py:4: RuntimeWarning: divide by zero encountered in log\n",
"/tmp/ipykernel_137117/3256270718.py:4: RuntimeWarning: divide by zero encountered in log\n",
"/tmp/ipykernel_137117/3256270718.py:4: RuntimeWarning: divide by zero encountered in log\n",
"/tmp/ipykernel_137117/3256270718.py:4: RuntimeWarning: divide by zero encountered in log\n",
"/tmp/ipykernel_137117/3256270718.py:4: RuntimeWarning: divide by zero encountered in log\n",
"/tmp/ipykernel_137117/3256270718.py:4: RuntimeWarning: divide by zero encountered in log\n",
"/tmp/ipykernel_137117/3256270718.py:4: RuntimeWarning: divide by zero encountered in log\n",
"/tmp/ipykernel_137117/3256270718.py:4: RuntimeWarning: divide by zero encountered in log\n",
"/tmp/ipykernel_137117/3256270718.py:4: RuntimeWarning: divide by zero encountered in log\n",
"/tmp/ipykernel_137117/3256270718.py:4: RuntimeWarning: divide by zero encountered in log\n",
"/tmp/ipykernel_137117/3256270718.py:4: RuntimeWarning: divide by zero encountered in log\n",
"/tmp/ipykernel_137117/3256270718.py:4: RuntimeWarning: divide by zero encountered in log\n",
"/tmp/ipykernel_137117/3256270718.py:4: RuntimeWarning: divide by zero encountered in log\n",
"/tmp/ipykernel_137117/3256270718.py:4: RuntimeWarning: divide by zero encountered in log\n",
"[Parallel(n_jobs=-1)]: Done 1420 tasks | elapsed: 1.3s\n",
"/tmp/ipykernel_137117/3256270718.py:4: RuntimeWarning: divide by zero encountered in log\n",
"/tmp/ipykernel_137117/3256270718.py:4: RuntimeWarning: divide by zero encountered in log\n",
"/tmp/ipykernel_137117/3256270718.py:4: RuntimeWarning: divide by zero encountered in log\n",
"/tmp/ipykernel_137117/3256270718.py:4: RuntimeWarning: divide by zero encountered in log\n",
"/tmp/ipykernel_137117/3256270718.py:4: RuntimeWarning: divide by zero encountered in log\n",
"/tmp/ipykernel_137117/3256270718.py:4: RuntimeWarning: divide by zero encountered in log\n",
"/tmp/ipykernel_137117/3256270718.py:4: RuntimeWarning: divide by zero encountered in log\n",
"/tmp/ipykernel_137117/3256270718.py:4: RuntimeWarning: divide by zero encountered in log\n",
"/tmp/ipykernel_137117/3256270718.py:4: RuntimeWarning: divide by zero encountered in log\n",
"/tmp/ipykernel_137117/3256270718.py:4: RuntimeWarning: divide by zero encountered in log\n",
"/tmp/ipykernel_137117/3256270718.py:4: RuntimeWarning: divide by zero encountered in log\n",
"/tmp/ipykernel_137117/3256270718.py:4: RuntimeWarning: divide by zero encountered in log\n",
"/tmp/ipykernel_137117/3256270718.py:4: RuntimeWarning: divide by zero encountered in log\n",
"/tmp/ipykernel_137117/3256270718.py:4: RuntimeWarning: divide by zero encountered in log\n",
"/tmp/ipykernel_137117/3256270718.py:4: RuntimeWarning: divide by zero encountered in log\n",
"/tmp/ipykernel_137117/3256270718.py:4: RuntimeWarning: divide by zero encountered in log\n",
"/tmp/ipykernel_137117/3256270718.py:4: RuntimeWarning: divide by zero encountered in log\n",
"/tmp/ipykernel_137117/3256270718.py:4: RuntimeWarning: divide by zero encountered in log\n",
"/tmp/ipykernel_137117/3256270718.py:4: RuntimeWarning: divide by zero encountered in log\n",
"/tmp/ipykernel_137117/3256270718.py:4: RuntimeWarning: divide by zero encountered in log\n",
"/tmp/ipykernel_137117/3256270718.py:4: RuntimeWarning: divide by zero encountered in log\n",
"/tmp/ipykernel_137117/3256270718.py:4: RuntimeWarning: divide by zero encountered in log\n",
"/tmp/ipykernel_137117/3256270718.py:4: RuntimeWarning: divide by zero encountered in log\n",
"/tmp/ipykernel_137117/3256270718.py:4: RuntimeWarning: divide by zero encountered in log\n",
"/tmp/ipykernel_137117/3256270718.py:4: RuntimeWarning: divide by zero encountered in log\n",
"/tmp/ipykernel_137117/3256270718.py:4: RuntimeWarning: divide by zero encountered in log\n",
"/tmp/ipykernel_137117/3256270718.py:4: RuntimeWarning: divide by zero encountered in log\n",
"/tmp/ipykernel_137117/3256270718.py:4: RuntimeWarning: divide by zero encountered in log\n",
"/tmp/ipykernel_137117/3256270718.py:4: RuntimeWarning: divide by zero encountered in log\n",
"/tmp/ipykernel_137117/3256270718.py:4: RuntimeWarning: divide by zero encountered in log\n",
"/tmp/ipykernel_137117/3256270718.py:4: RuntimeWarning: divide by zero encountered in log\n"
]
}
],

File diff suppressed because one or more lines are too long