Skip to content

Instantly share code, notes, and snippets.

@rohitx007
Last active September 16, 2018 20:17
Show Gist options
  • Save rohitx007/a218a8015433e62554f424dcd6207e59 to your computer and use it in GitHub Desktop.
Save rohitx007/a218a8015433e62554f424dcd6207e59 to your computer and use it in GitHub Desktop.
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"cell_type": "code",
"execution_count": 36,
"metadata": {
"scrolled": true
},
"outputs": [],
"source": [
"import random\n",
"import sys\n",
"import pandas as pd\n",
"import matplotlib.pyplot as plt\n",
"\n",
"# here 1-10 are coming 90 times each and 11-99 are coming 1 times each and 100 is coming 11 times\n",
"workload_size = 1000\n",
"uniqe_pages = 100\n",
"workload=[]\n",
"for j in range(1,11):\n",
" for i in range(90):\n",
" workload.append(j)\n",
"for k in range(11,101):\n",
" workload.append(k)\n",
"for z in range(10):\n",
" workload.append(100)\n",
"\n",
"random.shuffle(workload)\n",
"\n",
"def fifo(cache_size):\n",
" cache_content = []\n",
" hit_count = 0\n",
" miss_count = 0\n",
" # print(\"Iteration\", \"page\", \"cache_content (after)\")\n",
" for iteration, page in enumerate(workload):\n",
" if page in cache_content:\n",
" # Hit!\n",
" #print(\"Cache hit!\")\n",
" hit_count +=1\n",
" else:\n",
" miss_count +=1\n",
" # print(\"Cache miss!\")\n",
" if len(cache_content) < cache_size:\n",
" cache_content.append(page)\n",
" else:\n",
" # Need to evict\n",
" page_evict = cache_content[0]\n",
" #print(\"Removing {}\".format(page_evict))\n",
" cache_content.remove(page_evict)\n",
" cache_content.append(page)\n",
" assert(len(cache_content)==cache_size)\n",
" #print(iteration, page, cache_content)\n",
"\n",
" #print(\"Hit count for seed {} is {}\".format(seed, hit_count))\n",
" assert(hit_count+miss_count==len(workload))\n",
" return hit_count\n",
" \n",
"def lru(cache_size):\n",
" cache_content = []\n",
" hit_count = 0\n",
" miss_count = 0\n",
" # print(\"Iteration\", \"page\", \"cache_content (after)\")\n",
" for iteration, page in enumerate(workload):\n",
" if page in cache_content:\n",
" # Hit!\n",
" #print(\"Cache hit!\")\n",
" hit_count +=1\n",
" cache_content.remove(page)\n",
" cache_content.append(page)\n",
" else:\n",
" miss_count +=1\n",
" # print(\"Cache miss!\")\n",
" if len(cache_content) < cache_size:\n",
" cache_content.append(page)\n",
" else:\n",
" # Need to evict\n",
" page_evict = cache_content[0]\n",
" #print(\"Removing {}\".format(page_evict))\n",
" cache_content.remove(page_evict)\n",
" cache_content.append(page)\n",
" assert(len(cache_content)==cache_size)\n",
" #print(iteration, page, cache_content)\n",
"\n",
" #print(\"Hit count for seed {} is {}\".format(seed, hit_count))\n",
" assert(hit_count+miss_count==len(workload))\n",
" return hit_count\n",
"\n",
"def optimal(cache_size):\n",
" cache_content = []\n",
" hit_count = 0\n",
" miss_count = 0\n",
" # print(\"Iteration\", \"page\", \"cache_content (after)\")\n",
" for iteration, page in enumerate(workload):\n",
" if page in cache_content:\n",
" # Hit!\n",
" #print(\"Cache hit!\")\n",
" hit_count +=1\n",
" else:\n",
" miss_count +=1\n",
" # print(\"Cache miss!\")\n",
" if len(cache_content) < cache_size:\n",
" cache_content.append(page)\n",
" else:\n",
" fake_cache = cache_content[:]\n",
" while(len(fake_cache)>1 and (iteration<len(workload)-1)):\n",
" if (workload[iteration+1] in cache_content) and (workload[iteration+1] in fake_cache):\n",
" p=workload[iteration+1]\n",
" fake_cache.remove(p)\n",
" iteration = iteration+1 \n",
" # Need to evict \n",
" page_evict = fake_cache[-1]\n",
" #print(\"Removing {}\".format(page_evict))\n",
" cache_content.remove(page_evict)\n",
" cache_content.append(page)\n",
" \n",
" #print(iteration, page, cache_content)\n",
"\n",
" #print(\"Hit count for seed {} is {}\".format(seed, hit_count))\n",
" assert(hit_count+miss_count==len(workload))\n",
" return hit_count\n",
"\n",
"def r_replacement(seed,cache_size):\n",
" random.seed(seed)\n",
" cache_content = []\n",
" hit_count = 0\n",
" miss_count = 0\n",
" #print(\"Iteration\", \"page\", \"cache_content (after)\")\n",
" for iteration, page in enumerate(workload):\n",
" if page in cache_content:\n",
" # Hit!\n",
" #print(\"Cache hit!\")\n",
" hit_count +=1\n",
" else:\n",
" miss_count +=1\n",
" #print(\"Cache miss!\")\n",
" if len(cache_content) < cache_size:\n",
" cache_content.append(page)\n",
" else:\n",
" # Need to evict\n",
" page_evict = random.choice(cache_content)\n",
" #print(\"Removing {}\".format(page_evict))\n",
" cache_content.remove(page_evict)\n",
" cache_content.append(page)\n",
" assert(len(cache_content)==cache_size)\n",
" #print(iteration, page, cache_content)\n",
"\n",
" #print(\"Hit count for seed {} is {}\".format(seed, hit_count))\n",
" assert(hit_count+miss_count==len(workload))\n",
" return hit_count\n",
"\n",
"\n",
"\n"
]
},
{
"cell_type": "code",
"execution_count": 37,
"metadata": {
"scrolled": true
},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"import numpy as np\n",
"mean=[0]*100\n",
"stddev=[0]*100\n",
"for cache in range(2,100):\n",
" lis=[]\n",
" for seed in range(2,100):\n",
" lis.append(r_replacement(seed,cache))\n",
" mean[cache] = np.mean(lis)\n",
" stddev[cache] = np.std(lis)\n",
" \n",
"x=[i for i in range(2,100)]\n",
"y=mean[2:]\n",
"e=stddev[2:]\n",
"plt.plot(x,y,label=\"Mean\")\n",
"\n",
"\n",
"plt.xlabel(\"Cache Size\")\n",
"plt.ylabel(\"Mean Hits\")\n",
"plt.title(\"Mean of Random Page Replacement Policy\")\n",
"plt.show()\n",
"plt.plot(x,e,label=\"Standard Deviation\")\n",
"\n",
"\n",
"plt.xlabel(\"Cache Size\")\n",
"plt.ylabel(\"Std. Dev. Hits\")\n",
"plt.title(\"Std. Dev. of Random Page Replacement Policy\")\n",
"plt.show()\n",
"\n"
]
},
{
"cell_type": "code",
"execution_count": 38,
"metadata": {
"scrolled": false
},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"hit_cache1 = {}\n",
"for cache in range(2,100):\n",
" hit_cache1[cache] = optimal(cache)\n",
"x=[i for i in range(2,100)]\n",
"y=[hit_cache1[i] for i in range(2,100)]\n",
"plt.plot(x,y,label=\"Optimal\")\n",
"\n",
"hit_cache2 = {}\n",
"for cache in range(2,100):\n",
" hit_cache2[cache] = lru(cache)\n",
"x=[i for i in range(2,100)]\n",
"y=[hit_cache2[i] for i in range(2,100)]\n",
"plt.plot(x,y,label=\"LRU\")\n",
"\n",
"hit_cache3 = {}\n",
"for cache in range(2,100):\n",
" hit_cache3[cache] = fifo(cache)\n",
"x=[i for i in range(2,100)]\n",
"y=[hit_cache3[i] for i in range(2,100)]\n",
"plt.plot(x,y,label=\"FIFO\")\n",
"\n",
"hit_cache3 = {}\n",
"for cache in range(2,100):\n",
" hit_cache3[cache] = r_replacement(50,int(cache))\n",
"x=[i for i in range(2,100)]\n",
"y=[hit_cache3[i] for i in range(2,100)]\n",
"plt.plot(x,y,label=\"Random\")\n",
"\n",
"plt.xlabel(\"Cache Size\")\n",
"plt.ylabel(\"Number of Hits\")\n",
"plt.title(\"Optimal, LRU and FIFO Page Replacement Policy\")\n",
"plt.legend()\n",
"plt.show()"
]
},
{
"cell_type": "code",
"execution_count": 39,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"<Figure size 216x288 with 0 Axes>"
]
},
"execution_count": 39,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/plain": [
"<Figure size 216x288 with 0 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"pages = [0]*101\n",
"for i in workload:\n",
" pages[i] = pages[i]+1\n",
"x=[i for i in range(101)]\n",
"y=[pages[i] for i in range(101)]\n",
"#pd.Series(pages).plot(kind='hist')\n",
"plt.bar(x,y)\n",
"plt.xlabel(\"Pages\")\n",
"plt.ylabel(\"Number of Times in Workload\")\n",
"plt.title(\"Proving 90-10 ratio\")\n",
"plt.figure(figsize=(3,4))\n",
"\n",
"# here 1-10 are coming 90 times each and 11-99 are coming 1 times each and 100 is coming 11 times "
]
},
{
"cell_type": "code",
"execution_count": 40,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"<Figure size 216x288 with 0 Axes>"
]
},
"execution_count": 40,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/plain": [
"<Figure size 216x288 with 0 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"pages = [0]*101\n",
"for i in workload:\n",
" pages[i] = pages[i]+1\n",
"x=[i for i in range(101)]\n",
"a=[pages[i] for i in range(101)]\n",
"y=np.cumsum(a)\n",
"plt.plot(x,y)\n",
"plt.xlabel(\"Pages\")\n",
"plt.ylabel(\"Cumulative Sum\")\n",
"plt.title(\"Sum of Hot and Non-Hot Pages\")\n",
"plt.figure(figsize=(3,4))"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 2",
"language": "python",
"name": "python2"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 2
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython2",
"version": "2.7.15rc1"
}
},
"nbformat": 4,
"nbformat_minor": 2
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment