Skip to content

Instantly share code, notes, and snippets.

@bridgesign
Last active February 29, 2020 04:45
Show Gist options
  • Save bridgesign/8e8419ce2c5dee9cf1537547b1bf6b3b to your computer and use it in GitHub Desktop.
Save bridgesign/8e8419ce2c5dee9cf1537547b1bf6b3b to your computer and use it in GitHub Desktop.
Simulation of different cache replacement policies
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [],
"source": [
"import numpy as np\n",
"import matplotlib.pyplot as plt\n",
"import mpld3"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [],
"source": [
"mpld3.enable_notebook()"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {},
"outputs": [],
"source": [
"#Class for simulating cache, pages, workload and policies\n",
"class workload_generator:\n",
" def __init__(self, pages):\n",
" self.pages = pages\n",
" self.work = []\n",
" self.size = 0\n",
" \n",
" #Generates workload and returns it as numpy as array\n",
" #workload given is a dictionary containing teh details of workload\n",
" def generate_workload(self, workload):\n",
" if type(workload) is not type({}):\n",
" self.size = 0\n",
" raise TypeError(\"Workload must be a dict\")\n",
" return\n",
" if type(workload['size']) is not type(1) or workload['size']<1:\n",
" self.size = 0\n",
" raise ValueError(\"Size of workload must be a positive integer\")\n",
" return\n",
" #Random Workload\n",
" if workload['type'].lower()==\"random\":\n",
" self.work = np.random.randint(self.pages, size=workload['size'])\n",
" self.size = workload['size']\n",
" return\n",
" #Locality based workload. Hot page percentage need to given as parameter\n",
" if workload['type'].lower()==\"locality\":\n",
" try:\n",
" if (type(workload['percent']) is not int):\n",
" self.size = 0\n",
" raise TypeError(\"Percentage of workload must be integer\")\n",
" return\n",
" if(\n",
" (workload['percent']<0)\n",
" or (workload['percent']>100)\n",
" ):\n",
" self.size = 0\n",
" raise ValueError(\"Percentage of workload must be integer between 0 to 100\")\n",
" return\n",
" except KeyError:\n",
" self.size = 0\n",
" raise KeyError(\"Percentage of hot pages must be defined for locality workload\")\n",
" return\n",
" freq_size = workload['percent']*workload['size']//100\n",
" freq_pages = (100-workload['percent'])*self.pages//100\n",
" freq_work = np.random.randint(freq_pages, size=freq_size)\n",
" afreq_work = np.random.randint(low=freq_pages, high=self.pages, size=workload['size']-freq_size)\n",
" work = np.concatenate((freq_work, afreq_work))\n",
" np.random.shuffle(work)\n",
" self.work = work\n",
" self.size = workload['size']\n",
" return\n",
" #Loop type workload. Size of loop in number of cache pages needs to be given\n",
" if workload['type'].lower()=='loop':\n",
" try:\n",
" if (type(workload['loop_size']) is not int):\n",
" self.size = 0\n",
" raise TypeError(\"Loop size must be of type int\")\n",
" return\n",
" if(\n",
" (workload['loop_size'] > workload['size'])\n",
" or (workload['loop_size'] < 1)\n",
" ):\n",
" self.size = 0\n",
" raise ValueError(\"Loop size must be a positive inetger less than workload size\")\n",
" return\n",
" except KeyError:\n",
" raise KeyError(\"Loop size must be defined for loop type workload\")\n",
" return\n",
" work = []\n",
" for i in range(workload['size']):\n",
" work.append(i%workload['loop_size'])\n",
" self.work = work\n",
" self.size = workload['size']\n",
" return\n",
"\n",
" \n",
"class policy_simulator:\n",
" def __init__(self, cache_size=0, work=[], size=0):\n",
" self.cache_size = cache_size\n",
" self.work = work\n",
" self.size = size\n",
"\n",
"class fifo_policy(policy_simulator):\n",
" def simulate(self):\n",
" if self.cache_size == 0:\n",
" return 0\n",
" if self.size==0:\n",
" raise ValueError(\"Size of workload must be a positive integer\")\n",
" cache = []\n",
" count = 0\n",
" hit_rate = 0\n",
" for j in self.work:\n",
" if j in cache:\n",
" hit_rate+=1\n",
" elif count==self.cache_size:\n",
" cache.pop(0)\n",
" cache.append(j)\n",
" else:\n",
" cache.append(j)\n",
" count+=1\n",
" return float(hit_rate)*100/self.size\n",
" \n",
"class lru_policy(policy_simulator):\n",
" def simulate(self):\n",
" if self.cache_size == 0:\n",
" return 0\n",
" if self.size==0:\n",
" raise ValueError(\"Size of workload must be a positive integer\")\n",
" cache = []\n",
" count = 0\n",
" hit_rate = 0\n",
" for j in self.work:\n",
" if j in cache:\n",
" cache.remove(j)\n",
" cache.append(j)\n",
" hit_rate+=1\n",
" elif count==self.cache_size:\n",
" cache.pop(0)\n",
" cache.append(j)\n",
" else:\n",
" cache.append(j)\n",
" count+=1\n",
" return float(hit_rate)*100/self.size\n",
"\n",
"class random_policy(policy_simulator):\n",
" def simulate(self):\n",
" if self.cache_size == 0:\n",
" return 0\n",
" if self.size==0:\n",
" raise ValueError(\"Size of workload must be a positive integer\")\n",
" cache = []\n",
" count = 0\n",
" hit_rate = 0\n",
" for j in self.work:\n",
" if j in cache:\n",
" hit_rate+=1\n",
" elif count==self.cache_size:\n",
" cache.pop(np.random.randint(count))\n",
" cache.append(j)\n",
" else:\n",
" cache.append(j)\n",
" count+=1\n",
" return float(hit_rate)*100/self.size\n",
"\n",
"class oracle_policy(policy_simulator):\n",
" def simulate(self):\n",
" if self.cache_size == 0:\n",
" return 0\n",
" if self.size==0:\n",
" raise ValueError(\"Size of workload must be a positive integer\")\n",
" cache = []\n",
" count = 0\n",
" hit_rate = 0\n",
" for j in range(self.size):\n",
" if self.work[j] in cache:\n",
" hit_rate+=1\n",
" elif count==self.cache_size:\n",
" visited = np.zeros((count))\n",
" for i in range(j+1, self.size):\n",
" if self.work[i] in cache:\n",
" index = cache.index(self.work[i])\n",
" visited[index]+=1\n",
" if np.sum(visited==0)==0:\n",
" cache.pop(index)\n",
" break\n",
" else:\n",
" cache.pop(np.where(visited==0)[0][0])\n",
" cache.append(self.work[j])\n",
" else:\n",
" cache.append(self.work[j])\n",
" count+=1\n",
" return float(hit_rate)*100/self.size\n",
"\n",
"class approx_lru_policy(policy_simulator):\n",
" def simulate(self):\n",
" if self.cache_size == 0:\n",
" return 0\n",
" if self.size==0:\n",
" raise ValueError(\"Size of workload must be a positive integer\")\n",
" cache = []\n",
" count = 0\n",
" hit_rate = 0\n",
" clock = 0\n",
" ref_bit = np.zeros(self.cache_size)\n",
" for j in self.work:\n",
" if j in cache:\n",
" hit_rate+=1\n",
" ref_bit[cache.index(j)]=1\n",
" elif count==self.cache_size:\n",
" for i in range(self.cache_size+1):\n",
" if ref_bit[clock]==0:\n",
" cache.pop(clock)\n",
" break\n",
" ref_bit[clock] = 0\n",
" clock = (clock + 1)%self.cache_size\n",
" cache.append(j)\n",
" ref_bit[-1]=1\n",
" else:\n",
" ref_bit[-1]=1\n",
" cache.append(j)\n",
" count+=1\n",
" return float(hit_rate)*100/self.size\n",
"\n",
"class lfu_policy(policy_simulator):\n",
" def simulate(self):\n",
" if self.cache_size == 0:\n",
" return 0\n",
" if self.size==0:\n",
" raise ValueError(\"Size of workload must be a positive integer\")\n",
" cache = []\n",
" freq = []\n",
" count = 0\n",
" hit_rate = 0\n",
" for j in self.work:\n",
" if j in cache:\n",
" hit_rate+=1\n",
" ind = cache.index(j)\n",
" freq[ind]+=1\n",
" elif count==self.cache_size:\n",
" ind = np.argmin(freq)\n",
" cache.pop(ind)\n",
" freq.pop(ind)\n",
" cache.append(j)\n",
" freq.append(1)\n",
" else:\n",
" cache.append(j)\n",
" freq.append(1)\n",
" count+=1\n",
" return float(hit_rate)*100/self.size"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"........\n",
"----------------------------------------------------------------------\n",
"Ran 8 tests in 0.008s\n",
"\n",
"OK\n"
]
}
],
"source": [
"# Unit test\n",
"import unittest\n",
"\n",
"class WorkloadnPolicyTest(unittest.TestCase):\n",
" \n",
" def test_random_work(self):\n",
" workload = {'type':'random', 'size': 10000}\n",
" work_gen = workload_generator(100)\n",
" work_gen.generate_workload(workload)\n",
" self.assertTrue(np.std(work_gen.work) <= 101*np.sqrt(1/12))\n",
" \n",
" def test_loop_work(self):\n",
" workload = {'type':'loop', 'size': 9, 'loop_size':3}\n",
" work_gen = workload_generator(9)\n",
" work_gen.generate_workload(workload)\n",
" self.assertEqual(work_gen.work, [0,1,2]*3)\n",
" \n",
" def test_locality_work(self):\n",
" workload = {'type':'locality', 'size': 100, 'percent':80}\n",
" work_gen = workload_generator(10)\n",
" work_gen.generate_workload(workload)\n",
" self.assertEqual(list(work_gen.work).count(0)+list(work_gen.work).count(1), 80)\n",
" \n",
" def test_lru(self):\n",
" lru_sim = lru_policy(work = [0,1,0,2,1,1], size = 6)\n",
" lru_sim.cache_size = 2\n",
" self.assertEqual(lru_sim.simulate(), float(100)/3)\n",
" \n",
" def test_approx_lru(self):\n",
" clock_sim = approx_lru_policy(work = [0,1,2,3,0,1,2,3,4,2,0,3], size =12)\n",
" clock_sim.cache_size = 4\n",
" self.assertEqual(clock_sim.simulate(), float(6*100)/12)\n",
" \n",
" def test_lfu(self):\n",
" lfu_sim = lfu_policy(work = [0,1,0,1,1,2,0,0,1], size = 9)\n",
" lfu_sim.cache_size = 2\n",
" self.assertEqual(lfu_sim.simulate(), float(5*100)/9)\n",
" \n",
" def test_fifo(self):\n",
" fifo_sim = fifo_policy(work = [0,1,2,0,1,2], size = 6)\n",
" fifo_sim.cache_size = 2\n",
" self.assertEqual(fifo_sim.simulate(), 0)\n",
" \n",
" def test_orcale(self):\n",
" oracle_sim = oracle_policy(work = [0,1,1,2,3,0,2,4], size = 8)\n",
" oracle_sim.cache_size = 3\n",
" self.assertEqual(oracle_sim.simulate(), float(3*100)/8)\n",
"\n",
"if __name__ == '__main__':\n",
" unittest.main(argv=['first-arg-is-ignored'], exit=False)"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {},
"outputs": [],
"source": [
"pages=100\n",
"work_gen = workload_generator(pages)"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"<matplotlib.legend.Legend at 0x7f157a4d8908>"
]
},
"execution_count": 6,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\n",
"text/html": [
"\n",
"\n",
"<style>\n",
"\n",
"</style>\n",
"\n",
"<div id=\"fig_el29841397302232464169860180705\"></div>\n",
"<script>\n",
"function mpld3_load_lib(url, callback){\n",
" var s = document.createElement('script');\n",
" s.src = url;\n",
" s.async = true;\n",
" s.onreadystatechange = s.onload = callback;\n",
" s.onerror = function(){console.warn(\"failed to load library \" + url);};\n",
" document.getElementsByTagName(\"head\")[0].appendChild(s);\n",
"}\n",
"\n",
"if(typeof(mpld3) !== \"undefined\" && mpld3._mpld3IsLoaded){\n",
" // already loaded: just create the figure\n",
" !function(mpld3){\n",
" \n",
" mpld3.draw_figure(\"fig_el29841397302232464169860180705\", {\"width\": 432.0, \"height\": 288.0, \"axes\": [{\"bbox\": [0.125, 0.125, 0.775, 0.755], \"xlim\": [-5.0, 105.0], \"ylim\": [-4.95, 103.95], \"xdomain\": [-5.0, 105.0], \"ydomain\": [-4.95, 103.95], \"xscale\": \"linear\", \"yscale\": \"linear\", \"axes\": [{\"position\": \"bottom\", \"nticks\": 8, \"tickvalues\": null, \"tickformat\": null, \"scale\": \"linear\", \"fontsize\": 10.0, \"grid\": {\"gridOn\": false}, \"visible\": true}, {\"position\": \"left\", \"nticks\": 8, \"tickvalues\": null, \"tickformat\": null, \"scale\": \"linear\", \"fontsize\": 10.0, \"grid\": {\"gridOn\": false}, \"visible\": true}], \"axesbg\": \"#FFFFFF\", \"axesbgalpha\": null, \"zoomable\": true, \"id\": \"el2984139730223165568\", \"lines\": [{\"data\": \"data01\", \"xindex\": 0, \"yindex\": 1, \"coordinates\": \"data\", \"id\": \"el2984139729380195800\", \"color\": \"#1F77B4\", \"linewidth\": 1.5, \"dasharray\": \"none\", \"alpha\": 0.7, \"zorder\": 2, \"drawstyle\": \"default\"}, {\"data\": \"data01\", \"xindex\": 0, \"yindex\": 2, \"coordinates\": \"data\", \"id\": \"el2984139730223247088\", \"color\": \"#FF7F0E\", \"linewidth\": 1.5, \"dasharray\": \"none\", \"alpha\": 0.7, \"zorder\": 2, \"drawstyle\": \"default\"}, {\"data\": \"data01\", \"xindex\": 0, \"yindex\": 3, \"coordinates\": \"data\", \"id\": \"el2984139729380196136\", \"color\": \"#2CA02C\", \"linewidth\": 1.5, \"dasharray\": \"none\", \"alpha\": 0.7, \"zorder\": 2, \"drawstyle\": \"default\"}, {\"data\": \"data01\", \"xindex\": 0, \"yindex\": 4, \"coordinates\": \"data\", \"id\": \"el2984139729380263864\", \"color\": \"#D62728\", \"linewidth\": 1.5, \"dasharray\": \"none\", \"alpha\": 0.7, \"zorder\": 2, \"drawstyle\": \"default\"}, {\"data\": \"data01\", \"xindex\": 0, \"yindex\": 5, \"coordinates\": \"data\", \"id\": \"el2984139729380264648\", \"color\": \"#9467BD\", \"linewidth\": 1.5, \"dasharray\": \"none\", \"alpha\": 0.7, \"zorder\": 2, \"drawstyle\": \"default\"}, {\"data\": \"data01\", \"xindex\": 0, \"yindex\": 6, \"coordinates\": \"data\", \"id\": \"el2984139729380265432\", \"color\": \"#8C564B\", \"linewidth\": 1.5, \"dasharray\": \"none\", \"alpha\": 0.7, \"zorder\": 2, \"drawstyle\": \"default\"}, {\"data\": \"data02\", \"xindex\": 0, \"yindex\": 1, \"coordinates\": \"axes\", \"id\": \"el2984139729380328896\", \"color\": \"#1F77B4\", \"linewidth\": 1.5, \"dasharray\": \"none\", \"alpha\": 0.7, \"zorder\": 1000002.0, \"drawstyle\": \"default\"}, {\"data\": \"data02\", \"xindex\": 0, \"yindex\": 2, \"coordinates\": \"axes\", \"id\": \"el2984139729380328840\", \"color\": \"#FF7F0E\", \"linewidth\": 1.5, \"dasharray\": \"none\", \"alpha\": 0.7, \"zorder\": 1000002.0, \"drawstyle\": \"default\"}, {\"data\": \"data02\", \"xindex\": 0, \"yindex\": 3, \"coordinates\": \"axes\", \"id\": \"el2984139729380329960\", \"color\": \"#2CA02C\", \"linewidth\": 1.5, \"dasharray\": \"none\", \"alpha\": 0.7, \"zorder\": 1000002.0, \"drawstyle\": \"default\"}, {\"data\": \"data02\", \"xindex\": 0, \"yindex\": 4, \"coordinates\": \"axes\", \"id\": \"el2984139729380331024\", \"color\": \"#D62728\", \"linewidth\": 1.5, \"dasharray\": \"none\", \"alpha\": 0.7, \"zorder\": 1000002.0, \"drawstyle\": \"default\"}, {\"data\": \"data02\", \"xindex\": 0, \"yindex\": 5, \"coordinates\": \"axes\", \"id\": \"el2984139729380377208\", \"color\": \"#9467BD\", \"linewidth\": 1.5, \"dasharray\": \"none\", \"alpha\": 0.7, \"zorder\": 1000002.0, \"drawstyle\": \"default\"}, {\"data\": \"data02\", \"xindex\": 0, \"yindex\": 6, \"coordinates\": \"axes\", \"id\": \"el2984139729380378272\", \"color\": \"#8C564B\", \"linewidth\": 1.5, \"dasharray\": \"none\", \"alpha\": 0.7, \"zorder\": 1000002.0, \"drawstyle\": \"default\"}], \"paths\": [{\"data\": \"data03\", \"xindex\": 0, \"yindex\": 1, \"coordinates\": \"axes\", \"pathcodes\": [\"M\", \"L\", \"S\", \"L\", \"S\", \"L\", \"S\", \"L\", \"S\", \"Z\"], \"id\": \"el2984139730223165848\", \"dasharray\": \"none\", \"alpha\": 0.8, \"facecolor\": \"#FFFFFF\", \"edgecolor\": \"#CCCCCC\", \"edgewidth\": 1.0, \"zorder\": 1000000.0}], \"markers\": [], \"texts\": [{\"text\": \"Cache Size\", \"position\": [0.49999999999999994, -0.09657836644591611], \"coordinates\": \"axes\", \"h_anchor\": \"middle\", \"v_baseline\": \"hanging\", \"rotation\": -0.0, \"fontsize\": 10.0, \"color\": \"#000000\", \"alpha\": 1, \"zorder\": 3, \"id\": \"el2984139730223462888\"}, {\"text\": \"Hit Rate\", \"position\": [-0.08923237753882915, 0.49999999999999994], \"coordinates\": \"axes\", \"h_anchor\": \"middle\", \"v_baseline\": \"auto\", \"rotation\": -90.0, \"fontsize\": 10.0, \"color\": \"#000000\", \"alpha\": 1, \"zorder\": 3, \"id\": \"el2984139730223454472\"}, {\"text\": \"No-Locality Workload\", \"position\": [0.49999999999999994, 1.0275938189845473], \"coordinates\": \"axes\", \"h_anchor\": \"middle\", \"v_baseline\": \"auto\", \"rotation\": -0.0, \"fontsize\": 12.0, \"color\": \"#000000\", \"alpha\": 1, \"zorder\": 3, \"id\": \"el2984139730222942192\"}, {\"text\": \"FIFO\\t\", \"position\": [0.11051373954599761, 0.9218175128771156], \"coordinates\": \"axes\", \"h_anchor\": \"start\", \"v_baseline\": \"auto\", \"rotation\": -0.0, \"fontsize\": 10.0, \"color\": \"#000000\", \"alpha\": 1, \"zorder\": 1000003.0, \"id\": \"el2984139729380328336\"}, {\"text\": \"LFU\\t\", \"position\": [0.11051373954599761, 0.8528329654157469], \"coordinates\": \"axes\", \"h_anchor\": \"start\", \"v_baseline\": \"auto\", \"rotation\": -0.0, \"fontsize\": 10.0, \"color\": \"#000000\", \"alpha\": 1, \"zorder\": 1000003.0, \"id\": \"el2984139729380329512\"}, {\"text\": \"LRU\\t\", \"position\": [0.11051373954599761, 0.7838484179543782], \"coordinates\": \"axes\", \"h_anchor\": \"start\", \"v_baseline\": \"auto\", \"rotation\": -0.0, \"fontsize\": 10.0, \"color\": \"#000000\", \"alpha\": 1, \"zorder\": 1000003.0, \"id\": \"el2984139729380330576\"}, {\"text\": \"CLOCK\\t\", \"position\": [0.11051373954599761, 0.7148638704930096], \"coordinates\": \"axes\", \"h_anchor\": \"start\", \"v_baseline\": \"auto\", \"rotation\": -0.0, \"fontsize\": 10.0, \"color\": \"#000000\", \"alpha\": 1, \"zorder\": 1000003.0, \"id\": \"el2984139729380376760\"}, {\"text\": \"RAND\\t\", \"position\": [0.11051373954599761, 0.6458793230316409], \"coordinates\": \"axes\", \"h_anchor\": \"start\", \"v_baseline\": \"auto\", \"rotation\": -0.0, \"fontsize\": 10.0, \"color\": \"#000000\", \"alpha\": 1, \"zorder\": 1000003.0, \"id\": \"el2984139729380377824\"}, {\"text\": \"OPT\\t\", \"position\": [0.11051373954599761, 0.5768947755702722], \"coordinates\": \"axes\", \"h_anchor\": \"start\", \"v_baseline\": \"auto\", \"rotation\": -0.0, \"fontsize\": 10.0, \"color\": \"#000000\", \"alpha\": 1, \"zorder\": 1000003.0, \"id\": \"el2984139729380378888\"}], \"collections\": [], \"images\": [], \"sharex\": [], \"sharey\": []}], \"data\": {\"data01\": [[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [10.0, 10.14, 10.19, 10.18, 10.07, 9.93, 35.28], [20.0, 20.19, 19.92, 20.48, 20.34, 20.45, 51.84], [30.0, 30.14, 30.29, 30.32, 29.86, 29.9, 63.16], [40.0, 39.96, 40.18, 40.02, 40.43, 40.08, 71.99], [50.0, 50.11, 49.76, 50.01, 49.98, 50.42, 78.99], [60.0, 60.26, 59.93, 60.06, 59.86, 60.39, 84.88], [70.0, 69.98, 69.67, 69.77, 69.77, 69.36, 89.7], [80.0, 80.14, 79.41, 80.11, 79.02, 79.22, 93.65], [90.0, 89.62, 89.14, 89.67, 89.56, 89.78, 96.76], [100.0, 99.0, 99.0, 99.0, 99.0, 99.0, 99.0]], \"data02\": [[0.026881720430107503, 0.9379139072847682, 0.8689293598233996, 0.7999448123620309, 0.7309602649006622, 0.6619757174392935, 0.5929911699779249], [0.08661887694145756, 0.9379139072847682, 0.8689293598233996, 0.7999448123620309, 0.7309602649006622, 0.6619757174392935, 0.5929911699779249]], \"data03\": [[0.020908004778972505, 0.5493009565857248], [0.23446833930704894, 0.5493009565857248], [0.24044205495818397, 0.5493009565857248], [0.24044205495818397, 0.5584988962472406], [0.24044205495818397, 0.9678072111846947], [0.24044205495818397, 0.9770051508462105], [0.23446833930704894, 0.9770051508462105], [0.020908004778972505, 0.9770051508462105], [0.014934289127837508, 0.9770051508462105], [0.014934289127837508, 0.9678072111846947], [0.014934289127837508, 0.5584988962472406], [0.014934289127837508, 0.5493009565857248], [0.020908004778972505, 0.5493009565857248]]}, \"id\": \"el2984139730223246416\", \"plugins\": [{\"type\": \"reset\"}, {\"type\": \"zoom\", \"button\": true, \"enabled\": false}, {\"type\": \"boxzoom\", \"button\": true, \"enabled\": false}]});\n",
" }(mpld3);\n",
"}else if(typeof define === \"function\" && define.amd){\n",
" // require.js is available: use it to load d3/mpld3\n",
" require.config({paths: {d3: \"https://mpld3.github.io/js/d3.v3.min\"}});\n",
" require([\"d3\"], function(d3){\n",
" window.d3 = d3;\n",
" mpld3_load_lib(\"https://mpld3.github.io/js/mpld3.v0.3.1.dev1.js\", function(){\n",
" \n",
" mpld3.draw_figure(\"fig_el29841397302232464169860180705\", {\"width\": 432.0, \"height\": 288.0, \"axes\": [{\"bbox\": [0.125, 0.125, 0.775, 0.755], \"xlim\": [-5.0, 105.0], \"ylim\": [-4.95, 103.95], \"xdomain\": [-5.0, 105.0], \"ydomain\": [-4.95, 103.95], \"xscale\": \"linear\", \"yscale\": \"linear\", \"axes\": [{\"position\": \"bottom\", \"nticks\": 8, \"tickvalues\": null, \"tickformat\": null, \"scale\": \"linear\", \"fontsize\": 10.0, \"grid\": {\"gridOn\": false}, \"visible\": true}, {\"position\": \"left\", \"nticks\": 8, \"tickvalues\": null, \"tickformat\": null, \"scale\": \"linear\", \"fontsize\": 10.0, \"grid\": {\"gridOn\": false}, \"visible\": true}], \"axesbg\": \"#FFFFFF\", \"axesbgalpha\": null, \"zoomable\": true, \"id\": \"el2984139730223165568\", \"lines\": [{\"data\": \"data01\", \"xindex\": 0, \"yindex\": 1, \"coordinates\": \"data\", \"id\": \"el2984139729380195800\", \"color\": \"#1F77B4\", \"linewidth\": 1.5, \"dasharray\": \"none\", \"alpha\": 0.7, \"zorder\": 2, \"drawstyle\": \"default\"}, {\"data\": \"data01\", \"xindex\": 0, \"yindex\": 2, \"coordinates\": \"data\", \"id\": \"el2984139730223247088\", \"color\": \"#FF7F0E\", \"linewidth\": 1.5, \"dasharray\": \"none\", \"alpha\": 0.7, \"zorder\": 2, \"drawstyle\": \"default\"}, {\"data\": \"data01\", \"xindex\": 0, \"yindex\": 3, \"coordinates\": \"data\", \"id\": \"el2984139729380196136\", \"color\": \"#2CA02C\", \"linewidth\": 1.5, \"dasharray\": \"none\", \"alpha\": 0.7, \"zorder\": 2, \"drawstyle\": \"default\"}, {\"data\": \"data01\", \"xindex\": 0, \"yindex\": 4, \"coordinates\": \"data\", \"id\": \"el2984139729380263864\", \"color\": \"#D62728\", \"linewidth\": 1.5, \"dasharray\": \"none\", \"alpha\": 0.7, \"zorder\": 2, \"drawstyle\": \"default\"}, {\"data\": \"data01\", \"xindex\": 0, \"yindex\": 5, \"coordinates\": \"data\", \"id\": \"el2984139729380264648\", \"color\": \"#9467BD\", \"linewidth\": 1.5, \"dasharray\": \"none\", \"alpha\": 0.7, \"zorder\": 2, \"drawstyle\": \"default\"}, {\"data\": \"data01\", \"xindex\": 0, \"yindex\": 6, \"coordinates\": \"data\", \"id\": \"el2984139729380265432\", \"color\": \"#8C564B\", \"linewidth\": 1.5, \"dasharray\": \"none\", \"alpha\": 0.7, \"zorder\": 2, \"drawstyle\": \"default\"}, {\"data\": \"data02\", \"xindex\": 0, \"yindex\": 1, \"coordinates\": \"axes\", \"id\": \"el2984139729380328896\", \"color\": \"#1F77B4\", \"linewidth\": 1.5, \"dasharray\": \"none\", \"alpha\": 0.7, \"zorder\": 1000002.0, \"drawstyle\": \"default\"}, {\"data\": \"data02\", \"xindex\": 0, \"yindex\": 2, \"coordinates\": \"axes\", \"id\": \"el2984139729380328840\", \"color\": \"#FF7F0E\", \"linewidth\": 1.5, \"dasharray\": \"none\", \"alpha\": 0.7, \"zorder\": 1000002.0, \"drawstyle\": \"default\"}, {\"data\": \"data02\", \"xindex\": 0, \"yindex\": 3, \"coordinates\": \"axes\", \"id\": \"el2984139729380329960\", \"color\": \"#2CA02C\", \"linewidth\": 1.5, \"dasharray\": \"none\", \"alpha\": 0.7, \"zorder\": 1000002.0, \"drawstyle\": \"default\"}, {\"data\": \"data02\", \"xindex\": 0, \"yindex\": 4, \"coordinates\": \"axes\", \"id\": \"el2984139729380331024\", \"color\": \"#D62728\", \"linewidth\": 1.5, \"dasharray\": \"none\", \"alpha\": 0.7, \"zorder\": 1000002.0, \"drawstyle\": \"default\"}, {\"data\": \"data02\", \"xindex\": 0, \"yindex\": 5, \"coordinates\": \"axes\", \"id\": \"el2984139729380377208\", \"color\": \"#9467BD\", \"linewidth\": 1.5, \"dasharray\": \"none\", \"alpha\": 0.7, \"zorder\": 1000002.0, \"drawstyle\": \"default\"}, {\"data\": \"data02\", \"xindex\": 0, \"yindex\": 6, \"coordinates\": \"axes\", \"id\": \"el2984139729380378272\", \"color\": \"#8C564B\", \"linewidth\": 1.5, \"dasharray\": \"none\", \"alpha\": 0.7, \"zorder\": 1000002.0, \"drawstyle\": \"default\"}], \"paths\": [{\"data\": \"data03\", \"xindex\": 0, \"yindex\": 1, \"coordinates\": \"axes\", \"pathcodes\": [\"M\", \"L\", \"S\", \"L\", \"S\", \"L\", \"S\", \"L\", \"S\", \"Z\"], \"id\": \"el2984139730223165848\", \"dasharray\": \"none\", \"alpha\": 0.8, \"facecolor\": \"#FFFFFF\", \"edgecolor\": \"#CCCCCC\", \"edgewidth\": 1.0, \"zorder\": 1000000.0}], \"markers\": [], \"texts\": [{\"text\": \"Cache Size\", \"position\": [0.49999999999999994, -0.09657836644591611], \"coordinates\": \"axes\", \"h_anchor\": \"middle\", \"v_baseline\": \"hanging\", \"rotation\": -0.0, \"fontsize\": 10.0, \"color\": \"#000000\", \"alpha\": 1, \"zorder\": 3, \"id\": \"el2984139730223462888\"}, {\"text\": \"Hit Rate\", \"position\": [-0.08923237753882915, 0.49999999999999994], \"coordinates\": \"axes\", \"h_anchor\": \"middle\", \"v_baseline\": \"auto\", \"rotation\": -90.0, \"fontsize\": 10.0, \"color\": \"#000000\", \"alpha\": 1, \"zorder\": 3, \"id\": \"el2984139730223454472\"}, {\"text\": \"No-Locality Workload\", \"position\": [0.49999999999999994, 1.0275938189845473], \"coordinates\": \"axes\", \"h_anchor\": \"middle\", \"v_baseline\": \"auto\", \"rotation\": -0.0, \"fontsize\": 12.0, \"color\": \"#000000\", \"alpha\": 1, \"zorder\": 3, \"id\": \"el2984139730222942192\"}, {\"text\": \"FIFO\\t\", \"position\": [0.11051373954599761, 0.9218175128771156], \"coordinates\": \"axes\", \"h_anchor\": \"start\", \"v_baseline\": \"auto\", \"rotation\": -0.0, \"fontsize\": 10.0, \"color\": \"#000000\", \"alpha\": 1, \"zorder\": 1000003.0, \"id\": \"el2984139729380328336\"}, {\"text\": \"LFU\\t\", \"position\": [0.11051373954599761, 0.8528329654157469], \"coordinates\": \"axes\", \"h_anchor\": \"start\", \"v_baseline\": \"auto\", \"rotation\": -0.0, \"fontsize\": 10.0, \"color\": \"#000000\", \"alpha\": 1, \"zorder\": 1000003.0, \"id\": \"el2984139729380329512\"}, {\"text\": \"LRU\\t\", \"position\": [0.11051373954599761, 0.7838484179543782], \"coordinates\": \"axes\", \"h_anchor\": \"start\", \"v_baseline\": \"auto\", \"rotation\": -0.0, \"fontsize\": 10.0, \"color\": \"#000000\", \"alpha\": 1, \"zorder\": 1000003.0, \"id\": \"el2984139729380330576\"}, {\"text\": \"CLOCK\\t\", \"position\": [0.11051373954599761, 0.7148638704930096], \"coordinates\": \"axes\", \"h_anchor\": \"start\", \"v_baseline\": \"auto\", \"rotation\": -0.0, \"fontsize\": 10.0, \"color\": \"#000000\", \"alpha\": 1, \"zorder\": 1000003.0, \"id\": \"el2984139729380376760\"}, {\"text\": \"RAND\\t\", \"position\": [0.11051373954599761, 0.6458793230316409], \"coordinates\": \"axes\", \"h_anchor\": \"start\", \"v_baseline\": \"auto\", \"rotation\": -0.0, \"fontsize\": 10.0, \"color\": \"#000000\", \"alpha\": 1, \"zorder\": 1000003.0, \"id\": \"el2984139729380377824\"}, {\"text\": \"OPT\\t\", \"position\": [0.11051373954599761, 0.5768947755702722], \"coordinates\": \"axes\", \"h_anchor\": \"start\", \"v_baseline\": \"auto\", \"rotation\": -0.0, \"fontsize\": 10.0, \"color\": \"#000000\", \"alpha\": 1, \"zorder\": 1000003.0, \"id\": \"el2984139729380378888\"}], \"collections\": [], \"images\": [], \"sharex\": [], \"sharey\": []}], \"data\": {\"data01\": [[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [10.0, 10.14, 10.19, 10.18, 10.07, 9.93, 35.28], [20.0, 20.19, 19.92, 20.48, 20.34, 20.45, 51.84], [30.0, 30.14, 30.29, 30.32, 29.86, 29.9, 63.16], [40.0, 39.96, 40.18, 40.02, 40.43, 40.08, 71.99], [50.0, 50.11, 49.76, 50.01, 49.98, 50.42, 78.99], [60.0, 60.26, 59.93, 60.06, 59.86, 60.39, 84.88], [70.0, 69.98, 69.67, 69.77, 69.77, 69.36, 89.7], [80.0, 80.14, 79.41, 80.11, 79.02, 79.22, 93.65], [90.0, 89.62, 89.14, 89.67, 89.56, 89.78, 96.76], [100.0, 99.0, 99.0, 99.0, 99.0, 99.0, 99.0]], \"data02\": [[0.026881720430107503, 0.9379139072847682, 0.8689293598233996, 0.7999448123620309, 0.7309602649006622, 0.6619757174392935, 0.5929911699779249], [0.08661887694145756, 0.9379139072847682, 0.8689293598233996, 0.7999448123620309, 0.7309602649006622, 0.6619757174392935, 0.5929911699779249]], \"data03\": [[0.020908004778972505, 0.5493009565857248], [0.23446833930704894, 0.5493009565857248], [0.24044205495818397, 0.5493009565857248], [0.24044205495818397, 0.5584988962472406], [0.24044205495818397, 0.9678072111846947], [0.24044205495818397, 0.9770051508462105], [0.23446833930704894, 0.9770051508462105], [0.020908004778972505, 0.9770051508462105], [0.014934289127837508, 0.9770051508462105], [0.014934289127837508, 0.9678072111846947], [0.014934289127837508, 0.5584988962472406], [0.014934289127837508, 0.5493009565857248], [0.020908004778972505, 0.5493009565857248]]}, \"id\": \"el2984139730223246416\", \"plugins\": [{\"type\": \"reset\"}, {\"type\": \"zoom\", \"button\": true, \"enabled\": false}, {\"type\": \"boxzoom\", \"button\": true, \"enabled\": false}]});\n",
" });\n",
" });\n",
"}else{\n",
" // require.js not available: dynamically load d3 & mpld3\n",
" mpld3_load_lib(\"https://mpld3.github.io/js/d3.v3.min.js\", function(){\n",
" mpld3_load_lib(\"https://mpld3.github.io/js/mpld3.v0.3.1.dev1.js\", function(){\n",
" \n",
" mpld3.draw_figure(\"fig_el29841397302232464169860180705\", {\"width\": 432.0, \"height\": 288.0, \"axes\": [{\"bbox\": [0.125, 0.125, 0.775, 0.755], \"xlim\": [-5.0, 105.0], \"ylim\": [-4.95, 103.95], \"xdomain\": [-5.0, 105.0], \"ydomain\": [-4.95, 103.95], \"xscale\": \"linear\", \"yscale\": \"linear\", \"axes\": [{\"position\": \"bottom\", \"nticks\": 8, \"tickvalues\": null, \"tickformat\": null, \"scale\": \"linear\", \"fontsize\": 10.0, \"grid\": {\"gridOn\": false}, \"visible\": true}, {\"position\": \"left\", \"nticks\": 8, \"tickvalues\": null, \"tickformat\": null, \"scale\": \"linear\", \"fontsize\": 10.0, \"grid\": {\"gridOn\": false}, \"visible\": true}], \"axesbg\": \"#FFFFFF\", \"axesbgalpha\": null, \"zoomable\": true, \"id\": \"el2984139730223165568\", \"lines\": [{\"data\": \"data01\", \"xindex\": 0, \"yindex\": 1, \"coordinates\": \"data\", \"id\": \"el2984139729380195800\", \"color\": \"#1F77B4\", \"linewidth\": 1.5, \"dasharray\": \"none\", \"alpha\": 0.7, \"zorder\": 2, \"drawstyle\": \"default\"}, {\"data\": \"data01\", \"xindex\": 0, \"yindex\": 2, \"coordinates\": \"data\", \"id\": \"el2984139730223247088\", \"color\": \"#FF7F0E\", \"linewidth\": 1.5, \"dasharray\": \"none\", \"alpha\": 0.7, \"zorder\": 2, \"drawstyle\": \"default\"}, {\"data\": \"data01\", \"xindex\": 0, \"yindex\": 3, \"coordinates\": \"data\", \"id\": \"el2984139729380196136\", \"color\": \"#2CA02C\", \"linewidth\": 1.5, \"dasharray\": \"none\", \"alpha\": 0.7, \"zorder\": 2, \"drawstyle\": \"default\"}, {\"data\": \"data01\", \"xindex\": 0, \"yindex\": 4, \"coordinates\": \"data\", \"id\": \"el2984139729380263864\", \"color\": \"#D62728\", \"linewidth\": 1.5, \"dasharray\": \"none\", \"alpha\": 0.7, \"zorder\": 2, \"drawstyle\": \"default\"}, {\"data\": \"data01\", \"xindex\": 0, \"yindex\": 5, \"coordinates\": \"data\", \"id\": \"el2984139729380264648\", \"color\": \"#9467BD\", \"linewidth\": 1.5, \"dasharray\": \"none\", \"alpha\": 0.7, \"zorder\": 2, \"drawstyle\": \"default\"}, {\"data\": \"data01\", \"xindex\": 0, \"yindex\": 6, \"coordinates\": \"data\", \"id\": \"el2984139729380265432\", \"color\": \"#8C564B\", \"linewidth\": 1.5, \"dasharray\": \"none\", \"alpha\": 0.7, \"zorder\": 2, \"drawstyle\": \"default\"}, {\"data\": \"data02\", \"xindex\": 0, \"yindex\": 1, \"coordinates\": \"axes\", \"id\": \"el2984139729380328896\", \"color\": \"#1F77B4\", \"linewidth\": 1.5, \"dasharray\": \"none\", \"alpha\": 0.7, \"zorder\": 1000002.0, \"drawstyle\": \"default\"}, {\"data\": \"data02\", \"xindex\": 0, \"yindex\": 2, \"coordinates\": \"axes\", \"id\": \"el2984139729380328840\", \"color\": \"#FF7F0E\", \"linewidth\": 1.5, \"dasharray\": \"none\", \"alpha\": 0.7, \"zorder\": 1000002.0, \"drawstyle\": \"default\"}, {\"data\": \"data02\", \"xindex\": 0, \"yindex\": 3, \"coordinates\": \"axes\", \"id\": \"el2984139729380329960\", \"color\": \"#2CA02C\", \"linewidth\": 1.5, \"dasharray\": \"none\", \"alpha\": 0.7, \"zorder\": 1000002.0, \"drawstyle\": \"default\"}, {\"data\": \"data02\", \"xindex\": 0, \"yindex\": 4, \"coordinates\": \"axes\", \"id\": \"el2984139729380331024\", \"color\": \"#D62728\", \"linewidth\": 1.5, \"dasharray\": \"none\", \"alpha\": 0.7, \"zorder\": 1000002.0, \"drawstyle\": \"default\"}, {\"data\": \"data02\", \"xindex\": 0, \"yindex\": 5, \"coordinates\": \"axes\", \"id\": \"el2984139729380377208\", \"color\": \"#9467BD\", \"linewidth\": 1.5, \"dasharray\": \"none\", \"alpha\": 0.7, \"zorder\": 1000002.0, \"drawstyle\": \"default\"}, {\"data\": \"data02\", \"xindex\": 0, \"yindex\": 6, \"coordinates\": \"axes\", \"id\": \"el2984139729380378272\", \"color\": \"#8C564B\", \"linewidth\": 1.5, \"dasharray\": \"none\", \"alpha\": 0.7, \"zorder\": 1000002.0, \"drawstyle\": \"default\"}], \"paths\": [{\"data\": \"data03\", \"xindex\": 0, \"yindex\": 1, \"coordinates\": \"axes\", \"pathcodes\": [\"M\", \"L\", \"S\", \"L\", \"S\", \"L\", \"S\", \"L\", \"S\", \"Z\"], \"id\": \"el2984139730223165848\", \"dasharray\": \"none\", \"alpha\": 0.8, \"facecolor\": \"#FFFFFF\", \"edgecolor\": \"#CCCCCC\", \"edgewidth\": 1.0, \"zorder\": 1000000.0}], \"markers\": [], \"texts\": [{\"text\": \"Cache Size\", \"position\": [0.49999999999999994, -0.09657836644591611], \"coordinates\": \"axes\", \"h_anchor\": \"middle\", \"v_baseline\": \"hanging\", \"rotation\": -0.0, \"fontsize\": 10.0, \"color\": \"#000000\", \"alpha\": 1, \"zorder\": 3, \"id\": \"el2984139730223462888\"}, {\"text\": \"Hit Rate\", \"position\": [-0.08923237753882915, 0.49999999999999994], \"coordinates\": \"axes\", \"h_anchor\": \"middle\", \"v_baseline\": \"auto\", \"rotation\": -90.0, \"fontsize\": 10.0, \"color\": \"#000000\", \"alpha\": 1, \"zorder\": 3, \"id\": \"el2984139730223454472\"}, {\"text\": \"No-Locality Workload\", \"position\": [0.49999999999999994, 1.0275938189845473], \"coordinates\": \"axes\", \"h_anchor\": \"middle\", \"v_baseline\": \"auto\", \"rotation\": -0.0, \"fontsize\": 12.0, \"color\": \"#000000\", \"alpha\": 1, \"zorder\": 3, \"id\": \"el2984139730222942192\"}, {\"text\": \"FIFO\\t\", \"position\": [0.11051373954599761, 0.9218175128771156], \"coordinates\": \"axes\", \"h_anchor\": \"start\", \"v_baseline\": \"auto\", \"rotation\": -0.0, \"fontsize\": 10.0, \"color\": \"#000000\", \"alpha\": 1, \"zorder\": 1000003.0, \"id\": \"el2984139729380328336\"}, {\"text\": \"LFU\\t\", \"position\": [0.11051373954599761, 0.8528329654157469], \"coordinates\": \"axes\", \"h_anchor\": \"start\", \"v_baseline\": \"auto\", \"rotation\": -0.0, \"fontsize\": 10.0, \"color\": \"#000000\", \"alpha\": 1, \"zorder\": 1000003.0, \"id\": \"el2984139729380329512\"}, {\"text\": \"LRU\\t\", \"position\": [0.11051373954599761, 0.7838484179543782], \"coordinates\": \"axes\", \"h_anchor\": \"start\", \"v_baseline\": \"auto\", \"rotation\": -0.0, \"fontsize\": 10.0, \"color\": \"#000000\", \"alpha\": 1, \"zorder\": 1000003.0, \"id\": \"el2984139729380330576\"}, {\"text\": \"CLOCK\\t\", \"position\": [0.11051373954599761, 0.7148638704930096], \"coordinates\": \"axes\", \"h_anchor\": \"start\", \"v_baseline\": \"auto\", \"rotation\": -0.0, \"fontsize\": 10.0, \"color\": \"#000000\", \"alpha\": 1, \"zorder\": 1000003.0, \"id\": \"el2984139729380376760\"}, {\"text\": \"RAND\\t\", \"position\": [0.11051373954599761, 0.6458793230316409], \"coordinates\": \"axes\", \"h_anchor\": \"start\", \"v_baseline\": \"auto\", \"rotation\": -0.0, \"fontsize\": 10.0, \"color\": \"#000000\", \"alpha\": 1, \"zorder\": 1000003.0, \"id\": \"el2984139729380377824\"}, {\"text\": \"OPT\\t\", \"position\": [0.11051373954599761, 0.5768947755702722], \"coordinates\": \"axes\", \"h_anchor\": \"start\", \"v_baseline\": \"auto\", \"rotation\": -0.0, \"fontsize\": 10.0, \"color\": \"#000000\", \"alpha\": 1, \"zorder\": 1000003.0, \"id\": \"el2984139729380378888\"}], \"collections\": [], \"images\": [], \"sharex\": [], \"sharey\": []}], \"data\": {\"data01\": [[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [10.0, 10.14, 10.19, 10.18, 10.07, 9.93, 35.28], [20.0, 20.19, 19.92, 20.48, 20.34, 20.45, 51.84], [30.0, 30.14, 30.29, 30.32, 29.86, 29.9, 63.16], [40.0, 39.96, 40.18, 40.02, 40.43, 40.08, 71.99], [50.0, 50.11, 49.76, 50.01, 49.98, 50.42, 78.99], [60.0, 60.26, 59.93, 60.06, 59.86, 60.39, 84.88], [70.0, 69.98, 69.67, 69.77, 69.77, 69.36, 89.7], [80.0, 80.14, 79.41, 80.11, 79.02, 79.22, 93.65], [90.0, 89.62, 89.14, 89.67, 89.56, 89.78, 96.76], [100.0, 99.0, 99.0, 99.0, 99.0, 99.0, 99.0]], \"data02\": [[0.026881720430107503, 0.9379139072847682, 0.8689293598233996, 0.7999448123620309, 0.7309602649006622, 0.6619757174392935, 0.5929911699779249], [0.08661887694145756, 0.9379139072847682, 0.8689293598233996, 0.7999448123620309, 0.7309602649006622, 0.6619757174392935, 0.5929911699779249]], \"data03\": [[0.020908004778972505, 0.5493009565857248], [0.23446833930704894, 0.5493009565857248], [0.24044205495818397, 0.5493009565857248], [0.24044205495818397, 0.5584988962472406], [0.24044205495818397, 0.9678072111846947], [0.24044205495818397, 0.9770051508462105], [0.23446833930704894, 0.9770051508462105], [0.020908004778972505, 0.9770051508462105], [0.014934289127837508, 0.9770051508462105], [0.014934289127837508, 0.9678072111846947], [0.014934289127837508, 0.5584988962472406], [0.014934289127837508, 0.5493009565857248], [0.020908004778972505, 0.5493009565857248]]}, \"id\": \"el2984139730223246416\", \"plugins\": [{\"type\": \"reset\"}, {\"type\": \"zoom\", \"button\": true, \"enabled\": false}, {\"type\": \"boxzoom\", \"button\": true, \"enabled\": false}]});\n",
" })\n",
" });\n",
"}\n",
"</script>"
],
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"workload = {'type':'random', 'size': 10000}\n",
"\n",
"work_gen.generate_workload(workload)\n",
"\n",
"fifo_sim = fifo_policy(work = work_gen.work, size = work_gen.size)\n",
"lru_sim = lru_policy(work = work_gen.work, size = work_gen.size)\n",
"rand_sim = random_policy(work = work_gen.work, size = work_gen.size)\n",
"oracle_sim = oracle_policy(work = work_gen.work, size = work_gen.size)\n",
"clock_sim = approx_lru_policy(work = work_gen.work, size = work_gen.size)\n",
"lfu_sim = lfu_policy(work = work_gen.work, size = work_gen.size)\n",
"\n",
"fifo = []\n",
"lru = []\n",
"rand = []\n",
"oracle = []\n",
"clock = []\n",
"lfu = []\n",
"for j in range(0, pages+5, 10):\n",
" fifo_sim.cache_size = j\n",
" lru_sim.cache_size = j\n",
" rand_sim.cache_size = j\n",
" oracle_sim.cache_size = j\n",
" clock_sim.cache_size = j\n",
" lfu_sim.cache_size = j\n",
" fifo.append(fifo_sim.simulate())\n",
" lru.append(lru_sim.simulate())\n",
" rand.append(rand_sim.simulate())\n",
" oracle.append(oracle_sim.simulate())\n",
" clock.append(clock_sim.simulate())\n",
" lfu.append(lfu_sim.simulate())\n",
"\n",
"\n",
"plt.plot(np.arange(0,pages+5,10), fifo, '-', alpha=0.7, label='FIFO\\t')\n",
"plt.plot(np.arange(0,pages+5,10), lfu, '-', alpha=0.7, label='LFU\\t')\n",
"plt.plot(np.arange(0,pages+5,10), lru, '-', alpha=0.7, label='LRU\\t')\n",
"plt.plot(np.arange(0,pages+5,10), clock, '-', alpha=0.7, label='CLOCK\\t')\n",
"plt.plot(np.arange(0,pages+5,10), rand, '-', alpha=0.7, label='RAND\\t')\n",
"plt.plot(np.arange(0,pages+5,10), oracle, '-', alpha=0.7, label='OPT\\t')\n",
"\n",
"plt.xlabel('Cache Size')\n",
"plt.ylabel('Hit Rate')\n",
"plt.title('No-Locality Workload')\n",
"plt.legend()"
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"<matplotlib.legend.Legend at 0x7f1548075208>"
]
},
"execution_count": 7,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\n",
"text/html": [
"\n",
"\n",
"<style>\n",
"\n",
"</style>\n",
"\n",
"<div id=\"fig_el29841397294200498243750329320\"></div>\n",
"<script>\n",
"function mpld3_load_lib(url, callback){\n",
" var s = document.createElement('script');\n",
" s.src = url;\n",
" s.async = true;\n",
" s.onreadystatechange = s.onload = callback;\n",
" s.onerror = function(){console.warn(\"failed to load library \" + url);};\n",
" document.getElementsByTagName(\"head\")[0].appendChild(s);\n",
"}\n",
"\n",
"if(typeof(mpld3) !== \"undefined\" && mpld3._mpld3IsLoaded){\n",
" // already loaded: just create the figure\n",
" !function(mpld3){\n",
" \n",
" mpld3.draw_figure(\"fig_el29841397294200498243750329320\", {\"width\": 432.0, \"height\": 288.0, \"axes\": [{\"bbox\": [0.125, 0.125, 0.775, 0.755], \"xlim\": [-5.0, 105.0], \"ylim\": [-4.95, 103.95], \"xdomain\": [-5.0, 105.0], \"ydomain\": [-4.95, 103.95], \"xscale\": \"linear\", \"yscale\": \"linear\", \"axes\": [{\"position\": \"bottom\", \"nticks\": 8, \"tickvalues\": null, \"tickformat\": null, \"scale\": \"linear\", \"fontsize\": 10.0, \"grid\": {\"gridOn\": false}, \"visible\": true}, {\"position\": \"left\", \"nticks\": 8, \"tickvalues\": null, \"tickformat\": null, \"scale\": \"linear\", \"fontsize\": 10.0, \"grid\": {\"gridOn\": false}, \"visible\": true}], \"axesbg\": \"#FFFFFF\", \"axesbgalpha\": null, \"zoomable\": true, \"id\": \"el2984139729379426600\", \"lines\": [{\"data\": \"data01\", \"xindex\": 0, \"yindex\": 1, \"coordinates\": \"data\", \"id\": \"el2984139729379526584\", \"color\": \"#1F77B4\", \"linewidth\": 1.5, \"dasharray\": \"none\", \"alpha\": 0.7, \"zorder\": 2, \"drawstyle\": \"default\"}, {\"data\": \"data01\", \"xindex\": 0, \"yindex\": 2, \"coordinates\": \"data\", \"id\": \"el2984139729417721056\", \"color\": \"#FF7F0E\", \"linewidth\": 1.5, \"dasharray\": \"none\", \"alpha\": 0.7, \"zorder\": 2, \"drawstyle\": \"default\"}, {\"data\": \"data01\", \"xindex\": 0, \"yindex\": 3, \"coordinates\": \"data\", \"id\": \"el2984139729379810664\", \"color\": \"#2CA02C\", \"linewidth\": 1.5, \"dasharray\": \"none\", \"alpha\": 0.7, \"zorder\": 2, \"drawstyle\": \"default\"}, {\"data\": \"data01\", \"xindex\": 0, \"yindex\": 4, \"coordinates\": \"data\", \"id\": \"el2984139729379528376\", \"color\": \"#D62728\", \"linewidth\": 1.5, \"dasharray\": \"none\", \"alpha\": 0.7, \"zorder\": 2, \"drawstyle\": \"default\"}, {\"data\": \"data01\", \"xindex\": 0, \"yindex\": 5, \"coordinates\": \"data\", \"id\": \"el2984139729379528600\", \"color\": \"#9467BD\", \"linewidth\": 1.5, \"dasharray\": \"none\", \"alpha\": 0.7, \"zorder\": 2, \"drawstyle\": \"default\"}, {\"data\": \"data01\", \"xindex\": 0, \"yindex\": 6, \"coordinates\": \"data\", \"id\": \"el2984139729379527480\", \"color\": \"#8C564B\", \"linewidth\": 1.5, \"dasharray\": \"none\", \"alpha\": 0.7, \"zorder\": 2, \"drawstyle\": \"default\"}, {\"data\": \"data02\", \"xindex\": 0, \"yindex\": 1, \"coordinates\": \"axes\", \"id\": \"el2984139729379590040\", \"color\": \"#1F77B4\", \"linewidth\": 1.5, \"dasharray\": \"none\", \"alpha\": 0.7, \"zorder\": 1000002.0, \"drawstyle\": \"default\"}, {\"data\": \"data02\", \"xindex\": 0, \"yindex\": 2, \"coordinates\": \"axes\", \"id\": \"el2984139729379589984\", \"color\": \"#FF7F0E\", \"linewidth\": 1.5, \"dasharray\": \"none\", \"alpha\": 0.7, \"zorder\": 1000002.0, \"drawstyle\": \"default\"}, {\"data\": \"data02\", \"xindex\": 0, \"yindex\": 3, \"coordinates\": \"axes\", \"id\": \"el2984139729379103744\", \"color\": \"#2CA02C\", \"linewidth\": 1.5, \"dasharray\": \"none\", \"alpha\": 0.7, \"zorder\": 1000002.0, \"drawstyle\": \"default\"}, {\"data\": \"data02\", \"xindex\": 0, \"yindex\": 4, \"coordinates\": \"axes\", \"id\": \"el2984139729379104808\", \"color\": \"#D62728\", \"linewidth\": 1.5, \"dasharray\": \"none\", \"alpha\": 0.7, \"zorder\": 1000002.0, \"drawstyle\": \"default\"}, {\"data\": \"data02\", \"xindex\": 0, \"yindex\": 5, \"coordinates\": \"axes\", \"id\": \"el2984139729379105872\", \"color\": \"#9467BD\", \"linewidth\": 1.5, \"dasharray\": \"none\", \"alpha\": 0.7, \"zorder\": 1000002.0, \"drawstyle\": \"default\"}, {\"data\": \"data02\", \"xindex\": 0, \"yindex\": 6, \"coordinates\": \"axes\", \"id\": \"el2984139729379143864\", \"color\": \"#8C564B\", \"linewidth\": 1.5, \"dasharray\": \"none\", \"alpha\": 0.7, \"zorder\": 1000002.0, \"drawstyle\": \"default\"}], \"paths\": [{\"data\": \"data03\", \"xindex\": 0, \"yindex\": 1, \"coordinates\": \"axes\", \"pathcodes\": [\"M\", \"L\", \"S\", \"L\", \"S\", \"L\", \"S\", \"L\", \"S\", \"Z\"], \"id\": \"el2984139729379426544\", \"dasharray\": \"none\", \"alpha\": 0.8, \"facecolor\": \"#FFFFFF\", \"edgecolor\": \"#CCCCCC\", \"edgewidth\": 1.0, \"zorder\": 1000000.0}], \"markers\": [], \"texts\": [{\"text\": \"Cache Size\", \"position\": [0.49999999999999994, -0.09657836644591611], \"coordinates\": \"axes\", \"h_anchor\": \"middle\", \"v_baseline\": \"hanging\", \"rotation\": -0.0, \"fontsize\": 10.0, \"color\": \"#000000\", \"alpha\": 1, \"zorder\": 3, \"id\": \"el2984139729379429848\"}, {\"text\": \"Hit Rate\", \"position\": [-0.08923237753882915, 0.49999999999999994], \"coordinates\": \"axes\", \"h_anchor\": \"middle\", \"v_baseline\": \"auto\", \"rotation\": -90.0, \"fontsize\": 10.0, \"color\": \"#000000\", \"alpha\": 1, \"zorder\": 3, \"id\": \"el2984139729379447248\"}, {\"text\": \"80-20 Locality Workload\", \"position\": [0.49999999999999994, 1.0275938189845473], \"coordinates\": \"axes\", \"h_anchor\": \"middle\", \"v_baseline\": \"auto\", \"rotation\": -0.0, \"fontsize\": 12.0, \"color\": \"#000000\", \"alpha\": 1, \"zorder\": 3, \"id\": \"el2984139729379479792\"}, {\"text\": \"FIFO\\t\", \"position\": [0.855137395459976, 0.39551140544518026], \"coordinates\": \"axes\", \"h_anchor\": \"start\", \"v_baseline\": \"auto\", \"rotation\": -0.0, \"fontsize\": 10.0, \"color\": \"#000000\", \"alpha\": 1, \"zorder\": 1000003.0, \"id\": \"el2984139729379589424\"}, {\"text\": \"LFU\\t\", \"position\": [0.855137395459976, 0.32652685798381165], \"coordinates\": \"axes\", \"h_anchor\": \"start\", \"v_baseline\": \"auto\", \"rotation\": -0.0, \"fontsize\": 10.0, \"color\": \"#000000\", \"alpha\": 1, \"zorder\": 1000003.0, \"id\": \"el2984139729379103296\"}, {\"text\": \"LRU\\t\", \"position\": [0.855137395459976, 0.2575423105224429], \"coordinates\": \"axes\", \"h_anchor\": \"start\", \"v_baseline\": \"auto\", \"rotation\": -0.0, \"fontsize\": 10.0, \"color\": \"#000000\", \"alpha\": 1, \"zorder\": 1000003.0, \"id\": \"el2984139729379104360\"}, {\"text\": \"CLOCK\\t\", \"position\": [0.855137395459976, 0.18855776306107433], \"coordinates\": \"axes\", \"h_anchor\": \"start\", \"v_baseline\": \"auto\", \"rotation\": -0.0, \"fontsize\": 10.0, \"color\": \"#000000\", \"alpha\": 1, \"zorder\": 1000003.0, \"id\": \"el2984139729379105424\"}, {\"text\": \"RAND\\t\", \"position\": [0.855137395459976, 0.11957321559970566], \"coordinates\": \"axes\", \"h_anchor\": \"start\", \"v_baseline\": \"auto\", \"rotation\": -0.0, \"fontsize\": 10.0, \"color\": \"#000000\", \"alpha\": 1, \"zorder\": 1000003.0, \"id\": \"el2984139729379106488\"}, {\"text\": \"OPT\\t\", \"position\": [0.855137395459976, 0.05058866813833701], \"coordinates\": \"axes\", \"h_anchor\": \"start\", \"v_baseline\": \"auto\", \"rotation\": -0.0, \"fontsize\": 10.0, \"color\": \"#000000\", \"alpha\": 1, \"zorder\": 1000003.0, \"id\": \"el2984139729379144480\"}], \"collections\": [], \"images\": [], \"sharex\": [], \"sharey\": []}], \"data\": {\"data01\": [[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [10.0, 29.54, 39.63, 30.88, 33.34, 29.78, 59.88], [20.0, 51.58, 76.83, 57.31, 61.68, 51.95, 80.02], [30.0, 66.04, 82.31, 76.07, 78.93, 65.59, 87.59], [40.0, 74.81, 84.89, 84.06, 82.58, 75.04, 91.14], [50.0, 81.22, 87.23, 87.19, 85.29, 80.4, 93.48], [60.0, 85.45, 89.61, 89.87, 88.48, 85.91, 95.24], [70.0, 89.59, 92.22, 92.17, 91.67, 89.66, 96.62], [80.0, 93.15, 94.66, 94.47, 93.82, 93.22, 97.71], [90.0, 96.37, 96.8, 96.87, 96.76, 96.27, 98.46], [100.0, 99.0, 99.0, 99.0, 99.0, 99.0, 99.0]], \"data02\": [[0.771505376344086, 0.41160779985283297, 0.34262325239146435, 0.2736387049300956, 0.204654157468727, 0.13566961000735833, 0.0666850625459897], [0.831242532855436, 0.41160779985283297, 0.34262325239146435, 0.2736387049300956, 0.204654157468727, 0.13566961000735833, 0.0666850625459897]], \"data03\": [[0.765531660692951, 0.02299484915378955], [0.9790919952210274, 0.02299484915378955], [0.9850657108721624, 0.02299484915378955], [0.9850657108721624, 0.03219278881530538], [0.9850657108721624, 0.4415011037527594], [0.9850657108721624, 0.45069904341427525], [0.9790919952210274, 0.45069904341427525], [0.765531660692951, 0.45069904341427525], [0.759557945041816, 0.45069904341427525], [0.759557945041816, 0.4415011037527594], [0.759557945041816, 0.03219278881530538], [0.759557945041816, 0.02299484915378955], [0.765531660692951, 0.02299484915378955]]}, \"id\": \"el2984139729420049824\", \"plugins\": [{\"type\": \"reset\"}, {\"type\": \"zoom\", \"button\": true, \"enabled\": false}, {\"type\": \"boxzoom\", \"button\": true, \"enabled\": false}]});\n",
" }(mpld3);\n",
"}else if(typeof define === \"function\" && define.amd){\n",
" // require.js is available: use it to load d3/mpld3\n",
" require.config({paths: {d3: \"https://mpld3.github.io/js/d3.v3.min\"}});\n",
" require([\"d3\"], function(d3){\n",
" window.d3 = d3;\n",
" mpld3_load_lib(\"https://mpld3.github.io/js/mpld3.v0.3.1.dev1.js\", function(){\n",
" \n",
" mpld3.draw_figure(\"fig_el29841397294200498243750329320\", {\"width\": 432.0, \"height\": 288.0, \"axes\": [{\"bbox\": [0.125, 0.125, 0.775, 0.755], \"xlim\": [-5.0, 105.0], \"ylim\": [-4.95, 103.95], \"xdomain\": [-5.0, 105.0], \"ydomain\": [-4.95, 103.95], \"xscale\": \"linear\", \"yscale\": \"linear\", \"axes\": [{\"position\": \"bottom\", \"nticks\": 8, \"tickvalues\": null, \"tickformat\": null, \"scale\": \"linear\", \"fontsize\": 10.0, \"grid\": {\"gridOn\": false}, \"visible\": true}, {\"position\": \"left\", \"nticks\": 8, \"tickvalues\": null, \"tickformat\": null, \"scale\": \"linear\", \"fontsize\": 10.0, \"grid\": {\"gridOn\": false}, \"visible\": true}], \"axesbg\": \"#FFFFFF\", \"axesbgalpha\": null, \"zoomable\": true, \"id\": \"el2984139729379426600\", \"lines\": [{\"data\": \"data01\", \"xindex\": 0, \"yindex\": 1, \"coordinates\": \"data\", \"id\": \"el2984139729379526584\", \"color\": \"#1F77B4\", \"linewidth\": 1.5, \"dasharray\": \"none\", \"alpha\": 0.7, \"zorder\": 2, \"drawstyle\": \"default\"}, {\"data\": \"data01\", \"xindex\": 0, \"yindex\": 2, \"coordinates\": \"data\", \"id\": \"el2984139729417721056\", \"color\": \"#FF7F0E\", \"linewidth\": 1.5, \"dasharray\": \"none\", \"alpha\": 0.7, \"zorder\": 2, \"drawstyle\": \"default\"}, {\"data\": \"data01\", \"xindex\": 0, \"yindex\": 3, \"coordinates\": \"data\", \"id\": \"el2984139729379810664\", \"color\": \"#2CA02C\", \"linewidth\": 1.5, \"dasharray\": \"none\", \"alpha\": 0.7, \"zorder\": 2, \"drawstyle\": \"default\"}, {\"data\": \"data01\", \"xindex\": 0, \"yindex\": 4, \"coordinates\": \"data\", \"id\": \"el2984139729379528376\", \"color\": \"#D62728\", \"linewidth\": 1.5, \"dasharray\": \"none\", \"alpha\": 0.7, \"zorder\": 2, \"drawstyle\": \"default\"}, {\"data\": \"data01\", \"xindex\": 0, \"yindex\": 5, \"coordinates\": \"data\", \"id\": \"el2984139729379528600\", \"color\": \"#9467BD\", \"linewidth\": 1.5, \"dasharray\": \"none\", \"alpha\": 0.7, \"zorder\": 2, \"drawstyle\": \"default\"}, {\"data\": \"data01\", \"xindex\": 0, \"yindex\": 6, \"coordinates\": \"data\", \"id\": \"el2984139729379527480\", \"color\": \"#8C564B\", \"linewidth\": 1.5, \"dasharray\": \"none\", \"alpha\": 0.7, \"zorder\": 2, \"drawstyle\": \"default\"}, {\"data\": \"data02\", \"xindex\": 0, \"yindex\": 1, \"coordinates\": \"axes\", \"id\": \"el2984139729379590040\", \"color\": \"#1F77B4\", \"linewidth\": 1.5, \"dasharray\": \"none\", \"alpha\": 0.7, \"zorder\": 1000002.0, \"drawstyle\": \"default\"}, {\"data\": \"data02\", \"xindex\": 0, \"yindex\": 2, \"coordinates\": \"axes\", \"id\": \"el2984139729379589984\", \"color\": \"#FF7F0E\", \"linewidth\": 1.5, \"dasharray\": \"none\", \"alpha\": 0.7, \"zorder\": 1000002.0, \"drawstyle\": \"default\"}, {\"data\": \"data02\", \"xindex\": 0, \"yindex\": 3, \"coordinates\": \"axes\", \"id\": \"el2984139729379103744\", \"color\": \"#2CA02C\", \"linewidth\": 1.5, \"dasharray\": \"none\", \"alpha\": 0.7, \"zorder\": 1000002.0, \"drawstyle\": \"default\"}, {\"data\": \"data02\", \"xindex\": 0, \"yindex\": 4, \"coordinates\": \"axes\", \"id\": \"el2984139729379104808\", \"color\": \"#D62728\", \"linewidth\": 1.5, \"dasharray\": \"none\", \"alpha\": 0.7, \"zorder\": 1000002.0, \"drawstyle\": \"default\"}, {\"data\": \"data02\", \"xindex\": 0, \"yindex\": 5, \"coordinates\": \"axes\", \"id\": \"el2984139729379105872\", \"color\": \"#9467BD\", \"linewidth\": 1.5, \"dasharray\": \"none\", \"alpha\": 0.7, \"zorder\": 1000002.0, \"drawstyle\": \"default\"}, {\"data\": \"data02\", \"xindex\": 0, \"yindex\": 6, \"coordinates\": \"axes\", \"id\": \"el2984139729379143864\", \"color\": \"#8C564B\", \"linewidth\": 1.5, \"dasharray\": \"none\", \"alpha\": 0.7, \"zorder\": 1000002.0, \"drawstyle\": \"default\"}], \"paths\": [{\"data\": \"data03\", \"xindex\": 0, \"yindex\": 1, \"coordinates\": \"axes\", \"pathcodes\": [\"M\", \"L\", \"S\", \"L\", \"S\", \"L\", \"S\", \"L\", \"S\", \"Z\"], \"id\": \"el2984139729379426544\", \"dasharray\": \"none\", \"alpha\": 0.8, \"facecolor\": \"#FFFFFF\", \"edgecolor\": \"#CCCCCC\", \"edgewidth\": 1.0, \"zorder\": 1000000.0}], \"markers\": [], \"texts\": [{\"text\": \"Cache Size\", \"position\": [0.49999999999999994, -0.09657836644591611], \"coordinates\": \"axes\", \"h_anchor\": \"middle\", \"v_baseline\": \"hanging\", \"rotation\": -0.0, \"fontsize\": 10.0, \"color\": \"#000000\", \"alpha\": 1, \"zorder\": 3, \"id\": \"el2984139729379429848\"}, {\"text\": \"Hit Rate\", \"position\": [-0.08923237753882915, 0.49999999999999994], \"coordinates\": \"axes\", \"h_anchor\": \"middle\", \"v_baseline\": \"auto\", \"rotation\": -90.0, \"fontsize\": 10.0, \"color\": \"#000000\", \"alpha\": 1, \"zorder\": 3, \"id\": \"el2984139729379447248\"}, {\"text\": \"80-20 Locality Workload\", \"position\": [0.49999999999999994, 1.0275938189845473], \"coordinates\": \"axes\", \"h_anchor\": \"middle\", \"v_baseline\": \"auto\", \"rotation\": -0.0, \"fontsize\": 12.0, \"color\": \"#000000\", \"alpha\": 1, \"zorder\": 3, \"id\": \"el2984139729379479792\"}, {\"text\": \"FIFO\\t\", \"position\": [0.855137395459976, 0.39551140544518026], \"coordinates\": \"axes\", \"h_anchor\": \"start\", \"v_baseline\": \"auto\", \"rotation\": -0.0, \"fontsize\": 10.0, \"color\": \"#000000\", \"alpha\": 1, \"zorder\": 1000003.0, \"id\": \"el2984139729379589424\"}, {\"text\": \"LFU\\t\", \"position\": [0.855137395459976, 0.32652685798381165], \"coordinates\": \"axes\", \"h_anchor\": \"start\", \"v_baseline\": \"auto\", \"rotation\": -0.0, \"fontsize\": 10.0, \"color\": \"#000000\", \"alpha\": 1, \"zorder\": 1000003.0, \"id\": \"el2984139729379103296\"}, {\"text\": \"LRU\\t\", \"position\": [0.855137395459976, 0.2575423105224429], \"coordinates\": \"axes\", \"h_anchor\": \"start\", \"v_baseline\": \"auto\", \"rotation\": -0.0, \"fontsize\": 10.0, \"color\": \"#000000\", \"alpha\": 1, \"zorder\": 1000003.0, \"id\": \"el2984139729379104360\"}, {\"text\": \"CLOCK\\t\", \"position\": [0.855137395459976, 0.18855776306107433], \"coordinates\": \"axes\", \"h_anchor\": \"start\", \"v_baseline\": \"auto\", \"rotation\": -0.0, \"fontsize\": 10.0, \"color\": \"#000000\", \"alpha\": 1, \"zorder\": 1000003.0, \"id\": \"el2984139729379105424\"}, {\"text\": \"RAND\\t\", \"position\": [0.855137395459976, 0.11957321559970566], \"coordinates\": \"axes\", \"h_anchor\": \"start\", \"v_baseline\": \"auto\", \"rotation\": -0.0, \"fontsize\": 10.0, \"color\": \"#000000\", \"alpha\": 1, \"zorder\": 1000003.0, \"id\": \"el2984139729379106488\"}, {\"text\": \"OPT\\t\", \"position\": [0.855137395459976, 0.05058866813833701], \"coordinates\": \"axes\", \"h_anchor\": \"start\", \"v_baseline\": \"auto\", \"rotation\": -0.0, \"fontsize\": 10.0, \"color\": \"#000000\", \"alpha\": 1, \"zorder\": 1000003.0, \"id\": \"el2984139729379144480\"}], \"collections\": [], \"images\": [], \"sharex\": [], \"sharey\": []}], \"data\": {\"data01\": [[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [10.0, 29.54, 39.63, 30.88, 33.34, 29.78, 59.88], [20.0, 51.58, 76.83, 57.31, 61.68, 51.95, 80.02], [30.0, 66.04, 82.31, 76.07, 78.93, 65.59, 87.59], [40.0, 74.81, 84.89, 84.06, 82.58, 75.04, 91.14], [50.0, 81.22, 87.23, 87.19, 85.29, 80.4, 93.48], [60.0, 85.45, 89.61, 89.87, 88.48, 85.91, 95.24], [70.0, 89.59, 92.22, 92.17, 91.67, 89.66, 96.62], [80.0, 93.15, 94.66, 94.47, 93.82, 93.22, 97.71], [90.0, 96.37, 96.8, 96.87, 96.76, 96.27, 98.46], [100.0, 99.0, 99.0, 99.0, 99.0, 99.0, 99.0]], \"data02\": [[0.771505376344086, 0.41160779985283297, 0.34262325239146435, 0.2736387049300956, 0.204654157468727, 0.13566961000735833, 0.0666850625459897], [0.831242532855436, 0.41160779985283297, 0.34262325239146435, 0.2736387049300956, 0.204654157468727, 0.13566961000735833, 0.0666850625459897]], \"data03\": [[0.765531660692951, 0.02299484915378955], [0.9790919952210274, 0.02299484915378955], [0.9850657108721624, 0.02299484915378955], [0.9850657108721624, 0.03219278881530538], [0.9850657108721624, 0.4415011037527594], [0.9850657108721624, 0.45069904341427525], [0.9790919952210274, 0.45069904341427525], [0.765531660692951, 0.45069904341427525], [0.759557945041816, 0.45069904341427525], [0.759557945041816, 0.4415011037527594], [0.759557945041816, 0.03219278881530538], [0.759557945041816, 0.02299484915378955], [0.765531660692951, 0.02299484915378955]]}, \"id\": \"el2984139729420049824\", \"plugins\": [{\"type\": \"reset\"}, {\"type\": \"zoom\", \"button\": true, \"enabled\": false}, {\"type\": \"boxzoom\", \"button\": true, \"enabled\": false}]});\n",
" });\n",
" });\n",
"}else{\n",
" // require.js not available: dynamically load d3 & mpld3\n",
" mpld3_load_lib(\"https://mpld3.github.io/js/d3.v3.min.js\", function(){\n",
" mpld3_load_lib(\"https://mpld3.github.io/js/mpld3.v0.3.1.dev1.js\", function(){\n",
" \n",
" mpld3.draw_figure(\"fig_el29841397294200498243750329320\", {\"width\": 432.0, \"height\": 288.0, \"axes\": [{\"bbox\": [0.125, 0.125, 0.775, 0.755], \"xlim\": [-5.0, 105.0], \"ylim\": [-4.95, 103.95], \"xdomain\": [-5.0, 105.0], \"ydomain\": [-4.95, 103.95], \"xscale\": \"linear\", \"yscale\": \"linear\", \"axes\": [{\"position\": \"bottom\", \"nticks\": 8, \"tickvalues\": null, \"tickformat\": null, \"scale\": \"linear\", \"fontsize\": 10.0, \"grid\": {\"gridOn\": false}, \"visible\": true}, {\"position\": \"left\", \"nticks\": 8, \"tickvalues\": null, \"tickformat\": null, \"scale\": \"linear\", \"fontsize\": 10.0, \"grid\": {\"gridOn\": false}, \"visible\": true}], \"axesbg\": \"#FFFFFF\", \"axesbgalpha\": null, \"zoomable\": true, \"id\": \"el2984139729379426600\", \"lines\": [{\"data\": \"data01\", \"xindex\": 0, \"yindex\": 1, \"coordinates\": \"data\", \"id\": \"el2984139729379526584\", \"color\": \"#1F77B4\", \"linewidth\": 1.5, \"dasharray\": \"none\", \"alpha\": 0.7, \"zorder\": 2, \"drawstyle\": \"default\"}, {\"data\": \"data01\", \"xindex\": 0, \"yindex\": 2, \"coordinates\": \"data\", \"id\": \"el2984139729417721056\", \"color\": \"#FF7F0E\", \"linewidth\": 1.5, \"dasharray\": \"none\", \"alpha\": 0.7, \"zorder\": 2, \"drawstyle\": \"default\"}, {\"data\": \"data01\", \"xindex\": 0, \"yindex\": 3, \"coordinates\": \"data\", \"id\": \"el2984139729379810664\", \"color\": \"#2CA02C\", \"linewidth\": 1.5, \"dasharray\": \"none\", \"alpha\": 0.7, \"zorder\": 2, \"drawstyle\": \"default\"}, {\"data\": \"data01\", \"xindex\": 0, \"yindex\": 4, \"coordinates\": \"data\", \"id\": \"el2984139729379528376\", \"color\": \"#D62728\", \"linewidth\": 1.5, \"dasharray\": \"none\", \"alpha\": 0.7, \"zorder\": 2, \"drawstyle\": \"default\"}, {\"data\": \"data01\", \"xindex\": 0, \"yindex\": 5, \"coordinates\": \"data\", \"id\": \"el2984139729379528600\", \"color\": \"#9467BD\", \"linewidth\": 1.5, \"dasharray\": \"none\", \"alpha\": 0.7, \"zorder\": 2, \"drawstyle\": \"default\"}, {\"data\": \"data01\", \"xindex\": 0, \"yindex\": 6, \"coordinates\": \"data\", \"id\": \"el2984139729379527480\", \"color\": \"#8C564B\", \"linewidth\": 1.5, \"dasharray\": \"none\", \"alpha\": 0.7, \"zorder\": 2, \"drawstyle\": \"default\"}, {\"data\": \"data02\", \"xindex\": 0, \"yindex\": 1, \"coordinates\": \"axes\", \"id\": \"el2984139729379590040\", \"color\": \"#1F77B4\", \"linewidth\": 1.5, \"dasharray\": \"none\", \"alpha\": 0.7, \"zorder\": 1000002.0, \"drawstyle\": \"default\"}, {\"data\": \"data02\", \"xindex\": 0, \"yindex\": 2, \"coordinates\": \"axes\", \"id\": \"el2984139729379589984\", \"color\": \"#FF7F0E\", \"linewidth\": 1.5, \"dasharray\": \"none\", \"alpha\": 0.7, \"zorder\": 1000002.0, \"drawstyle\": \"default\"}, {\"data\": \"data02\", \"xindex\": 0, \"yindex\": 3, \"coordinates\": \"axes\", \"id\": \"el2984139729379103744\", \"color\": \"#2CA02C\", \"linewidth\": 1.5, \"dasharray\": \"none\", \"alpha\": 0.7, \"zorder\": 1000002.0, \"drawstyle\": \"default\"}, {\"data\": \"data02\", \"xindex\": 0, \"yindex\": 4, \"coordinates\": \"axes\", \"id\": \"el2984139729379104808\", \"color\": \"#D62728\", \"linewidth\": 1.5, \"dasharray\": \"none\", \"alpha\": 0.7, \"zorder\": 1000002.0, \"drawstyle\": \"default\"}, {\"data\": \"data02\", \"xindex\": 0, \"yindex\": 5, \"coordinates\": \"axes\", \"id\": \"el2984139729379105872\", \"color\": \"#9467BD\", \"linewidth\": 1.5, \"dasharray\": \"none\", \"alpha\": 0.7, \"zorder\": 1000002.0, \"drawstyle\": \"default\"}, {\"data\": \"data02\", \"xindex\": 0, \"yindex\": 6, \"coordinates\": \"axes\", \"id\": \"el2984139729379143864\", \"color\": \"#8C564B\", \"linewidth\": 1.5, \"dasharray\": \"none\", \"alpha\": 0.7, \"zorder\": 1000002.0, \"drawstyle\": \"default\"}], \"paths\": [{\"data\": \"data03\", \"xindex\": 0, \"yindex\": 1, \"coordinates\": \"axes\", \"pathcodes\": [\"M\", \"L\", \"S\", \"L\", \"S\", \"L\", \"S\", \"L\", \"S\", \"Z\"], \"id\": \"el2984139729379426544\", \"dasharray\": \"none\", \"alpha\": 0.8, \"facecolor\": \"#FFFFFF\", \"edgecolor\": \"#CCCCCC\", \"edgewidth\": 1.0, \"zorder\": 1000000.0}], \"markers\": [], \"texts\": [{\"text\": \"Cache Size\", \"position\": [0.49999999999999994, -0.09657836644591611], \"coordinates\": \"axes\", \"h_anchor\": \"middle\", \"v_baseline\": \"hanging\", \"rotation\": -0.0, \"fontsize\": 10.0, \"color\": \"#000000\", \"alpha\": 1, \"zorder\": 3, \"id\": \"el2984139729379429848\"}, {\"text\": \"Hit Rate\", \"position\": [-0.08923237753882915, 0.49999999999999994], \"coordinates\": \"axes\", \"h_anchor\": \"middle\", \"v_baseline\": \"auto\", \"rotation\": -90.0, \"fontsize\": 10.0, \"color\": \"#000000\", \"alpha\": 1, \"zorder\": 3, \"id\": \"el2984139729379447248\"}, {\"text\": \"80-20 Locality Workload\", \"position\": [0.49999999999999994, 1.0275938189845473], \"coordinates\": \"axes\", \"h_anchor\": \"middle\", \"v_baseline\": \"auto\", \"rotation\": -0.0, \"fontsize\": 12.0, \"color\": \"#000000\", \"alpha\": 1, \"zorder\": 3, \"id\": \"el2984139729379479792\"}, {\"text\": \"FIFO\\t\", \"position\": [0.855137395459976, 0.39551140544518026], \"coordinates\": \"axes\", \"h_anchor\": \"start\", \"v_baseline\": \"auto\", \"rotation\": -0.0, \"fontsize\": 10.0, \"color\": \"#000000\", \"alpha\": 1, \"zorder\": 1000003.0, \"id\": \"el2984139729379589424\"}, {\"text\": \"LFU\\t\", \"position\": [0.855137395459976, 0.32652685798381165], \"coordinates\": \"axes\", \"h_anchor\": \"start\", \"v_baseline\": \"auto\", \"rotation\": -0.0, \"fontsize\": 10.0, \"color\": \"#000000\", \"alpha\": 1, \"zorder\": 1000003.0, \"id\": \"el2984139729379103296\"}, {\"text\": \"LRU\\t\", \"position\": [0.855137395459976, 0.2575423105224429], \"coordinates\": \"axes\", \"h_anchor\": \"start\", \"v_baseline\": \"auto\", \"rotation\": -0.0, \"fontsize\": 10.0, \"color\": \"#000000\", \"alpha\": 1, \"zorder\": 1000003.0, \"id\": \"el2984139729379104360\"}, {\"text\": \"CLOCK\\t\", \"position\": [0.855137395459976, 0.18855776306107433], \"coordinates\": \"axes\", \"h_anchor\": \"start\", \"v_baseline\": \"auto\", \"rotation\": -0.0, \"fontsize\": 10.0, \"color\": \"#000000\", \"alpha\": 1, \"zorder\": 1000003.0, \"id\": \"el2984139729379105424\"}, {\"text\": \"RAND\\t\", \"position\": [0.855137395459976, 0.11957321559970566], \"coordinates\": \"axes\", \"h_anchor\": \"start\", \"v_baseline\": \"auto\", \"rotation\": -0.0, \"fontsize\": 10.0, \"color\": \"#000000\", \"alpha\": 1, \"zorder\": 1000003.0, \"id\": \"el2984139729379106488\"}, {\"text\": \"OPT\\t\", \"position\": [0.855137395459976, 0.05058866813833701], \"coordinates\": \"axes\", \"h_anchor\": \"start\", \"v_baseline\": \"auto\", \"rotation\": -0.0, \"fontsize\": 10.0, \"color\": \"#000000\", \"alpha\": 1, \"zorder\": 1000003.0, \"id\": \"el2984139729379144480\"}], \"collections\": [], \"images\": [], \"sharex\": [], \"sharey\": []}], \"data\": {\"data01\": [[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [10.0, 29.54, 39.63, 30.88, 33.34, 29.78, 59.88], [20.0, 51.58, 76.83, 57.31, 61.68, 51.95, 80.02], [30.0, 66.04, 82.31, 76.07, 78.93, 65.59, 87.59], [40.0, 74.81, 84.89, 84.06, 82.58, 75.04, 91.14], [50.0, 81.22, 87.23, 87.19, 85.29, 80.4, 93.48], [60.0, 85.45, 89.61, 89.87, 88.48, 85.91, 95.24], [70.0, 89.59, 92.22, 92.17, 91.67, 89.66, 96.62], [80.0, 93.15, 94.66, 94.47, 93.82, 93.22, 97.71], [90.0, 96.37, 96.8, 96.87, 96.76, 96.27, 98.46], [100.0, 99.0, 99.0, 99.0, 99.0, 99.0, 99.0]], \"data02\": [[0.771505376344086, 0.41160779985283297, 0.34262325239146435, 0.2736387049300956, 0.204654157468727, 0.13566961000735833, 0.0666850625459897], [0.831242532855436, 0.41160779985283297, 0.34262325239146435, 0.2736387049300956, 0.204654157468727, 0.13566961000735833, 0.0666850625459897]], \"data03\": [[0.765531660692951, 0.02299484915378955], [0.9790919952210274, 0.02299484915378955], [0.9850657108721624, 0.02299484915378955], [0.9850657108721624, 0.03219278881530538], [0.9850657108721624, 0.4415011037527594], [0.9850657108721624, 0.45069904341427525], [0.9790919952210274, 0.45069904341427525], [0.765531660692951, 0.45069904341427525], [0.759557945041816, 0.45069904341427525], [0.759557945041816, 0.4415011037527594], [0.759557945041816, 0.03219278881530538], [0.759557945041816, 0.02299484915378955], [0.765531660692951, 0.02299484915378955]]}, \"id\": \"el2984139729420049824\", \"plugins\": [{\"type\": \"reset\"}, {\"type\": \"zoom\", \"button\": true, \"enabled\": false}, {\"type\": \"boxzoom\", \"button\": true, \"enabled\": false}]});\n",
" })\n",
" });\n",
"}\n",
"</script>"
],
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"workload = {'type':'locality', 'size': 10000, 'percent':80}\n",
"\n",
"work_gen.generate_workload(workload)\n",
"\n",
"fifo_sim = fifo_policy(work = work_gen.work, size = work_gen.size)\n",
"lru_sim = lru_policy(work = work_gen.work, size = work_gen.size)\n",
"rand_sim = random_policy(work = work_gen.work, size = work_gen.size)\n",
"oracle_sim = oracle_policy(work = work_gen.work, size = work_gen.size)\n",
"clock_sim = approx_lru_policy(work = work_gen.work, size = work_gen.size)\n",
"lfu_sim = lfu_policy(work = work_gen.work, size = work_gen.size)\n",
"\n",
"fifo = []\n",
"lru = []\n",
"rand = []\n",
"oracle = []\n",
"clock = []\n",
"lfu = []\n",
"for j in range(0, pages+5, 10):\n",
" fifo_sim.cache_size = j\n",
" lru_sim.cache_size = j\n",
" rand_sim.cache_size = j\n",
" oracle_sim.cache_size = j\n",
" clock_sim.cache_size = j\n",
" lfu_sim.cache_size = j\n",
" fifo.append(fifo_sim.simulate())\n",
" lru.append(lru_sim.simulate())\n",
" rand.append(rand_sim.simulate())\n",
" oracle.append(oracle_sim.simulate())\n",
" clock.append(clock_sim.simulate())\n",
" lfu.append(lfu_sim.simulate())\n",
"\n",
"\n",
"plt.plot(np.arange(0,pages+5,10), fifo, '-', alpha=0.7, label='FIFO\\t')\n",
"plt.plot(np.arange(0,pages+5,10), lfu, '-', alpha=0.7, label='LFU\\t')\n",
"plt.plot(np.arange(0,pages+5,10), lru, '-', alpha=0.7, label='LRU\\t')\n",
"plt.plot(np.arange(0,pages+5,10), clock, '-', alpha=0.7, label='CLOCK\\t')\n",
"plt.plot(np.arange(0,pages+5,10), rand, '-', alpha=0.7, label='RAND\\t')\n",
"plt.plot(np.arange(0,pages+5,10), oracle, '-', alpha=0.7, label='OPT\\t')\n",
"plt.xlabel('Cache Size')\n",
"plt.ylabel('Hit Rate')\n",
"plt.title('80-20 Locality Workload')\n",
"plt.legend()"
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"<matplotlib.legend.Legend at 0x7f1547ffb4e0>"
]
},
"execution_count": 8,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\n",
"text/html": [
"\n",
"\n",
"<style>\n",
"\n",
"</style>\n",
"\n",
"<div id=\"fig_el29841397302234543045239579540\"></div>\n",
"<script>\n",
"function mpld3_load_lib(url, callback){\n",
" var s = document.createElement('script');\n",
" s.src = url;\n",
" s.async = true;\n",
" s.onreadystatechange = s.onload = callback;\n",
" s.onerror = function(){console.warn(\"failed to load library \" + url);};\n",
" document.getElementsByTagName(\"head\")[0].appendChild(s);\n",
"}\n",
"\n",
"if(typeof(mpld3) !== \"undefined\" && mpld3._mpld3IsLoaded){\n",
" // already loaded: just create the figure\n",
" !function(mpld3){\n",
" \n",
" mpld3.draw_figure(\"fig_el29841397302234543045239579540\", {\"width\": 432.0, \"height\": 288.0, \"axes\": [{\"bbox\": [0.125, 0.125, 0.775, 0.755], \"xlim\": [-5.0, 105.0], \"ylim\": [-4.9750000000000005, 104.475], \"xdomain\": [-5.0, 105.0], \"ydomain\": [-4.9750000000000005, 104.475], \"xscale\": \"linear\", \"yscale\": \"linear\", \"axes\": [{\"position\": \"bottom\", \"nticks\": 8, \"tickvalues\": null, \"tickformat\": null, \"scale\": \"linear\", \"fontsize\": 10.0, \"grid\": {\"gridOn\": false}, \"visible\": true}, {\"position\": \"left\", \"nticks\": 8, \"tickvalues\": null, \"tickformat\": null, \"scale\": \"linear\", \"fontsize\": 10.0, \"grid\": {\"gridOn\": false}, \"visible\": true}], \"axesbg\": \"#FFFFFF\", \"axesbgalpha\": null, \"zoomable\": true, \"id\": \"el2984139729378957184\", \"lines\": [{\"data\": \"data01\", \"xindex\": 0, \"yindex\": 1, \"coordinates\": \"data\", \"id\": \"el2984139729379035904\", \"color\": \"#1F77B4\", \"linewidth\": 1.5, \"dasharray\": \"none\", \"alpha\": 0.7, \"zorder\": 2, \"drawstyle\": \"default\"}, {\"data\": \"data01\", \"xindex\": 0, \"yindex\": 1, \"coordinates\": \"data\", \"id\": \"el2984139729379426488\", \"color\": \"#FF7F0E\", \"linewidth\": 1.5, \"dasharray\": \"none\", \"alpha\": 0.7, \"zorder\": 2, \"drawstyle\": \"default\"}, {\"data\": \"data01\", \"xindex\": 0, \"yindex\": 1, \"coordinates\": \"data\", \"id\": \"el2984139729379290080\", \"color\": \"#2CA02C\", \"linewidth\": 1.5, \"dasharray\": \"none\", \"alpha\": 0.7, \"zorder\": 2, \"drawstyle\": \"default\"}, {\"data\": \"data01\", \"xindex\": 0, \"yindex\": 1, \"coordinates\": \"data\", \"id\": \"el2984139729379037136\", \"color\": \"#D62728\", \"linewidth\": 1.5, \"dasharray\": \"none\", \"alpha\": 0.7, \"zorder\": 2, \"drawstyle\": \"default\"}, {\"data\": \"data01\", \"xindex\": 0, \"yindex\": 2, \"coordinates\": \"data\", \"id\": \"el2984139729379036800\", \"color\": \"#9467BD\", \"linewidth\": 1.5, \"dasharray\": \"none\", \"alpha\": 0.7, \"zorder\": 2, \"drawstyle\": \"default\"}, {\"data\": \"data01\", \"xindex\": 0, \"yindex\": 3, \"coordinates\": \"data\", \"id\": \"el2984139729378576480\", \"color\": \"#8C564B\", \"linewidth\": 1.5, \"dasharray\": \"none\", \"alpha\": 0.7, \"zorder\": 2, \"drawstyle\": \"default\"}, {\"data\": \"data02\", \"xindex\": 0, \"yindex\": 1, \"coordinates\": \"axes\", \"id\": \"el2984139729378607960\", \"color\": \"#1F77B4\", \"linewidth\": 1.5, \"dasharray\": \"none\", \"alpha\": 0.7, \"zorder\": 1000002.0, \"drawstyle\": \"default\"}, {\"data\": \"data02\", \"xindex\": 0, \"yindex\": 2, \"coordinates\": \"axes\", \"id\": \"el2984139729378607904\", \"color\": \"#FF7F0E\", \"linewidth\": 1.5, \"dasharray\": \"none\", \"alpha\": 0.7, \"zorder\": 1000002.0, \"drawstyle\": \"default\"}, {\"data\": \"data02\", \"xindex\": 0, \"yindex\": 3, \"coordinates\": \"axes\", \"id\": \"el2984139729378609024\", \"color\": \"#2CA02C\", \"linewidth\": 1.5, \"dasharray\": \"none\", \"alpha\": 0.7, \"zorder\": 1000002.0, \"drawstyle\": \"default\"}, {\"data\": \"data02\", \"xindex\": 0, \"yindex\": 4, \"coordinates\": \"axes\", \"id\": \"el2984139729378610088\", \"color\": \"#D62728\", \"linewidth\": 1.5, \"dasharray\": \"none\", \"alpha\": 0.7, \"zorder\": 1000002.0, \"drawstyle\": \"default\"}, {\"data\": \"data02\", \"xindex\": 0, \"yindex\": 5, \"coordinates\": \"axes\", \"id\": \"el2984139729378611152\", \"color\": \"#9467BD\", \"linewidth\": 1.5, \"dasharray\": \"none\", \"alpha\": 0.7, \"zorder\": 1000002.0, \"drawstyle\": \"default\"}, {\"data\": \"data02\", \"xindex\": 0, \"yindex\": 6, \"coordinates\": \"axes\", \"id\": \"el2984139729378653240\", \"color\": \"#8C564B\", \"linewidth\": 1.5, \"dasharray\": \"none\", \"alpha\": 0.7, \"zorder\": 1000002.0, \"drawstyle\": \"default\"}], \"paths\": [{\"data\": \"data03\", \"xindex\": 0, \"yindex\": 1, \"coordinates\": \"axes\", \"pathcodes\": [\"M\", \"L\", \"S\", \"L\", \"S\", \"L\", \"S\", \"L\", \"S\", \"Z\"], \"id\": \"el2984139729378577488\", \"dasharray\": \"none\", \"alpha\": 0.8, \"facecolor\": \"#FFFFFF\", \"edgecolor\": \"#CCCCCC\", \"edgewidth\": 1.0, \"zorder\": 1000000.0}], \"markers\": [], \"texts\": [{\"text\": \"Cache Size\", \"position\": [0.49999999999999994, -0.09657836644591611], \"coordinates\": \"axes\", \"h_anchor\": \"middle\", \"v_baseline\": \"hanging\", \"rotation\": -0.0, \"fontsize\": 10.0, \"color\": \"#000000\", \"alpha\": 1, \"zorder\": 3, \"id\": \"el2984139729378951408\"}, {\"text\": \"Hit Rate\", \"position\": [-0.08923237753882915, 0.49999999999999994], \"coordinates\": \"axes\", \"h_anchor\": \"middle\", \"v_baseline\": \"auto\", \"rotation\": -90.0, \"fontsize\": 10.0, \"color\": \"#000000\", \"alpha\": 1, \"zorder\": 3, \"id\": \"el2984139729378952360\"}, {\"text\": \"Looping-Sequential Workload\", \"position\": [0.49999999999999994, 1.0275938189845473], \"coordinates\": \"axes\", \"h_anchor\": \"middle\", \"v_baseline\": \"auto\", \"rotation\": -0.0, \"fontsize\": 12.0, \"color\": \"#000000\", \"alpha\": 1, \"zorder\": 3, \"id\": \"el2984139729378980808\"}, {\"text\": \"FIFO\\t\", \"position\": [0.11051373954599761, 0.9218175128771156], \"coordinates\": \"axes\", \"h_anchor\": \"start\", \"v_baseline\": \"auto\", \"rotation\": -0.0, \"fontsize\": 10.0, \"color\": \"#000000\", \"alpha\": 1, \"zorder\": 1000003.0, \"id\": \"el2984139729378607344\"}, {\"text\": \"LFU\\t\", \"position\": [0.11051373954599761, 0.8528329654157469], \"coordinates\": \"axes\", \"h_anchor\": \"start\", \"v_baseline\": \"auto\", \"rotation\": -0.0, \"fontsize\": 10.0, \"color\": \"#000000\", \"alpha\": 1, \"zorder\": 1000003.0, \"id\": \"el2984139729378608576\"}, {\"text\": \"LRU\\t\", \"position\": [0.11051373954599761, 0.7838484179543782], \"coordinates\": \"axes\", \"h_anchor\": \"start\", \"v_baseline\": \"auto\", \"rotation\": -0.0, \"fontsize\": 10.0, \"color\": \"#000000\", \"alpha\": 1, \"zorder\": 1000003.0, \"id\": \"el2984139729378609640\"}, {\"text\": \"CLOCK\\t\", \"position\": [0.11051373954599761, 0.7148638704930096], \"coordinates\": \"axes\", \"h_anchor\": \"start\", \"v_baseline\": \"auto\", \"rotation\": -0.0, \"fontsize\": 10.0, \"color\": \"#000000\", \"alpha\": 1, \"zorder\": 1000003.0, \"id\": \"el2984139729378610704\"}, {\"text\": \"RAND\\t\", \"position\": [0.11051373954599761, 0.6458793230316409], \"coordinates\": \"axes\", \"h_anchor\": \"start\", \"v_baseline\": \"auto\", \"rotation\": -0.0, \"fontsize\": 10.0, \"color\": \"#000000\", \"alpha\": 1, \"zorder\": 1000003.0, \"id\": \"el2984139729378652792\"}, {\"text\": \"OPT\\t\", \"position\": [0.11051373954599761, 0.5768947755702722], \"coordinates\": \"axes\", \"h_anchor\": \"start\", \"v_baseline\": \"auto\", \"rotation\": -0.0, \"fontsize\": 10.0, \"color\": \"#000000\", \"alpha\": 1, \"zorder\": 1000003.0, \"id\": \"el2984139729378653856\"}], \"collections\": [], \"images\": [], \"sharex\": [], \"sharey\": []}], \"data\": {\"data01\": [[0.0, 0.0, 0.0, 0.0], [10.0, 0.0, 0.58, 18.3], [20.0, 0.0, 10.16, 38.6], [30.0, 0.0, 31.63, 58.9], [40.0, 0.0, 62.26, 79.2], [50.0, 99.5, 99.5, 99.5], [60.0, 99.5, 99.5, 99.5], [70.0, 99.5, 99.5, 99.5], [80.0, 99.5, 99.5, 99.5], [90.0, 99.5, 99.5, 99.5], [100.0, 99.5, 99.5, 99.5]], \"data02\": [[0.026881720430107503, 0.9379139072847682, 0.8689293598233996, 0.7999448123620309, 0.7309602649006622, 0.6619757174392935, 0.5929911699779249], [0.08661887694145756, 0.9379139072847682, 0.8689293598233996, 0.7999448123620309, 0.7309602649006622, 0.6619757174392935, 0.5929911699779249]], \"data03\": [[0.020908004778972505, 0.5493009565857248], [0.23446833930704894, 0.5493009565857248], [0.24044205495818397, 0.5493009565857248], [0.24044205495818397, 0.5584988962472406], [0.24044205495818397, 0.9678072111846947], [0.24044205495818397, 0.9770051508462105], [0.23446833930704894, 0.9770051508462105], [0.020908004778972505, 0.9770051508462105], [0.014934289127837508, 0.9770051508462105], [0.014934289127837508, 0.9678072111846947], [0.014934289127837508, 0.5584988962472406], [0.014934289127837508, 0.5493009565857248], [0.020908004778972505, 0.5493009565857248]]}, \"id\": \"el2984139730223454304\", \"plugins\": [{\"type\": \"reset\"}, {\"type\": \"zoom\", \"button\": true, \"enabled\": false}, {\"type\": \"boxzoom\", \"button\": true, \"enabled\": false}]});\n",
" }(mpld3);\n",
"}else if(typeof define === \"function\" && define.amd){\n",
" // require.js is available: use it to load d3/mpld3\n",
" require.config({paths: {d3: \"https://mpld3.github.io/js/d3.v3.min\"}});\n",
" require([\"d3\"], function(d3){\n",
" window.d3 = d3;\n",
" mpld3_load_lib(\"https://mpld3.github.io/js/mpld3.v0.3.1.dev1.js\", function(){\n",
" \n",
" mpld3.draw_figure(\"fig_el29841397302234543045239579540\", {\"width\": 432.0, \"height\": 288.0, \"axes\": [{\"bbox\": [0.125, 0.125, 0.775, 0.755], \"xlim\": [-5.0, 105.0], \"ylim\": [-4.9750000000000005, 104.475], \"xdomain\": [-5.0, 105.0], \"ydomain\": [-4.9750000000000005, 104.475], \"xscale\": \"linear\", \"yscale\": \"linear\", \"axes\": [{\"position\": \"bottom\", \"nticks\": 8, \"tickvalues\": null, \"tickformat\": null, \"scale\": \"linear\", \"fontsize\": 10.0, \"grid\": {\"gridOn\": false}, \"visible\": true}, {\"position\": \"left\", \"nticks\": 8, \"tickvalues\": null, \"tickformat\": null, \"scale\": \"linear\", \"fontsize\": 10.0, \"grid\": {\"gridOn\": false}, \"visible\": true}], \"axesbg\": \"#FFFFFF\", \"axesbgalpha\": null, \"zoomable\": true, \"id\": \"el2984139729378957184\", \"lines\": [{\"data\": \"data01\", \"xindex\": 0, \"yindex\": 1, \"coordinates\": \"data\", \"id\": \"el2984139729379035904\", \"color\": \"#1F77B4\", \"linewidth\": 1.5, \"dasharray\": \"none\", \"alpha\": 0.7, \"zorder\": 2, \"drawstyle\": \"default\"}, {\"data\": \"data01\", \"xindex\": 0, \"yindex\": 1, \"coordinates\": \"data\", \"id\": \"el2984139729379426488\", \"color\": \"#FF7F0E\", \"linewidth\": 1.5, \"dasharray\": \"none\", \"alpha\": 0.7, \"zorder\": 2, \"drawstyle\": \"default\"}, {\"data\": \"data01\", \"xindex\": 0, \"yindex\": 1, \"coordinates\": \"data\", \"id\": \"el2984139729379290080\", \"color\": \"#2CA02C\", \"linewidth\": 1.5, \"dasharray\": \"none\", \"alpha\": 0.7, \"zorder\": 2, \"drawstyle\": \"default\"}, {\"data\": \"data01\", \"xindex\": 0, \"yindex\": 1, \"coordinates\": \"data\", \"id\": \"el2984139729379037136\", \"color\": \"#D62728\", \"linewidth\": 1.5, \"dasharray\": \"none\", \"alpha\": 0.7, \"zorder\": 2, \"drawstyle\": \"default\"}, {\"data\": \"data01\", \"xindex\": 0, \"yindex\": 2, \"coordinates\": \"data\", \"id\": \"el2984139729379036800\", \"color\": \"#9467BD\", \"linewidth\": 1.5, \"dasharray\": \"none\", \"alpha\": 0.7, \"zorder\": 2, \"drawstyle\": \"default\"}, {\"data\": \"data01\", \"xindex\": 0, \"yindex\": 3, \"coordinates\": \"data\", \"id\": \"el2984139729378576480\", \"color\": \"#8C564B\", \"linewidth\": 1.5, \"dasharray\": \"none\", \"alpha\": 0.7, \"zorder\": 2, \"drawstyle\": \"default\"}, {\"data\": \"data02\", \"xindex\": 0, \"yindex\": 1, \"coordinates\": \"axes\", \"id\": \"el2984139729378607960\", \"color\": \"#1F77B4\", \"linewidth\": 1.5, \"dasharray\": \"none\", \"alpha\": 0.7, \"zorder\": 1000002.0, \"drawstyle\": \"default\"}, {\"data\": \"data02\", \"xindex\": 0, \"yindex\": 2, \"coordinates\": \"axes\", \"id\": \"el2984139729378607904\", \"color\": \"#FF7F0E\", \"linewidth\": 1.5, \"dasharray\": \"none\", \"alpha\": 0.7, \"zorder\": 1000002.0, \"drawstyle\": \"default\"}, {\"data\": \"data02\", \"xindex\": 0, \"yindex\": 3, \"coordinates\": \"axes\", \"id\": \"el2984139729378609024\", \"color\": \"#2CA02C\", \"linewidth\": 1.5, \"dasharray\": \"none\", \"alpha\": 0.7, \"zorder\": 1000002.0, \"drawstyle\": \"default\"}, {\"data\": \"data02\", \"xindex\": 0, \"yindex\": 4, \"coordinates\": \"axes\", \"id\": \"el2984139729378610088\", \"color\": \"#D62728\", \"linewidth\": 1.5, \"dasharray\": \"none\", \"alpha\": 0.7, \"zorder\": 1000002.0, \"drawstyle\": \"default\"}, {\"data\": \"data02\", \"xindex\": 0, \"yindex\": 5, \"coordinates\": \"axes\", \"id\": \"el2984139729378611152\", \"color\": \"#9467BD\", \"linewidth\": 1.5, \"dasharray\": \"none\", \"alpha\": 0.7, \"zorder\": 1000002.0, \"drawstyle\": \"default\"}, {\"data\": \"data02\", \"xindex\": 0, \"yindex\": 6, \"coordinates\": \"axes\", \"id\": \"el2984139729378653240\", \"color\": \"#8C564B\", \"linewidth\": 1.5, \"dasharray\": \"none\", \"alpha\": 0.7, \"zorder\": 1000002.0, \"drawstyle\": \"default\"}], \"paths\": [{\"data\": \"data03\", \"xindex\": 0, \"yindex\": 1, \"coordinates\": \"axes\", \"pathcodes\": [\"M\", \"L\", \"S\", \"L\", \"S\", \"L\", \"S\", \"L\", \"S\", \"Z\"], \"id\": \"el2984139729378577488\", \"dasharray\": \"none\", \"alpha\": 0.8, \"facecolor\": \"#FFFFFF\", \"edgecolor\": \"#CCCCCC\", \"edgewidth\": 1.0, \"zorder\": 1000000.0}], \"markers\": [], \"texts\": [{\"text\": \"Cache Size\", \"position\": [0.49999999999999994, -0.09657836644591611], \"coordinates\": \"axes\", \"h_anchor\": \"middle\", \"v_baseline\": \"hanging\", \"rotation\": -0.0, \"fontsize\": 10.0, \"color\": \"#000000\", \"alpha\": 1, \"zorder\": 3, \"id\": \"el2984139729378951408\"}, {\"text\": \"Hit Rate\", \"position\": [-0.08923237753882915, 0.49999999999999994], \"coordinates\": \"axes\", \"h_anchor\": \"middle\", \"v_baseline\": \"auto\", \"rotation\": -90.0, \"fontsize\": 10.0, \"color\": \"#000000\", \"alpha\": 1, \"zorder\": 3, \"id\": \"el2984139729378952360\"}, {\"text\": \"Looping-Sequential Workload\", \"position\": [0.49999999999999994, 1.0275938189845473], \"coordinates\": \"axes\", \"h_anchor\": \"middle\", \"v_baseline\": \"auto\", \"rotation\": -0.0, \"fontsize\": 12.0, \"color\": \"#000000\", \"alpha\": 1, \"zorder\": 3, \"id\": \"el2984139729378980808\"}, {\"text\": \"FIFO\\t\", \"position\": [0.11051373954599761, 0.9218175128771156], \"coordinates\": \"axes\", \"h_anchor\": \"start\", \"v_baseline\": \"auto\", \"rotation\": -0.0, \"fontsize\": 10.0, \"color\": \"#000000\", \"alpha\": 1, \"zorder\": 1000003.0, \"id\": \"el2984139729378607344\"}, {\"text\": \"LFU\\t\", \"position\": [0.11051373954599761, 0.8528329654157469], \"coordinates\": \"axes\", \"h_anchor\": \"start\", \"v_baseline\": \"auto\", \"rotation\": -0.0, \"fontsize\": 10.0, \"color\": \"#000000\", \"alpha\": 1, \"zorder\": 1000003.0, \"id\": \"el2984139729378608576\"}, {\"text\": \"LRU\\t\", \"position\": [0.11051373954599761, 0.7838484179543782], \"coordinates\": \"axes\", \"h_anchor\": \"start\", \"v_baseline\": \"auto\", \"rotation\": -0.0, \"fontsize\": 10.0, \"color\": \"#000000\", \"alpha\": 1, \"zorder\": 1000003.0, \"id\": \"el2984139729378609640\"}, {\"text\": \"CLOCK\\t\", \"position\": [0.11051373954599761, 0.7148638704930096], \"coordinates\": \"axes\", \"h_anchor\": \"start\", \"v_baseline\": \"auto\", \"rotation\": -0.0, \"fontsize\": 10.0, \"color\": \"#000000\", \"alpha\": 1, \"zorder\": 1000003.0, \"id\": \"el2984139729378610704\"}, {\"text\": \"RAND\\t\", \"position\": [0.11051373954599761, 0.6458793230316409], \"coordinates\": \"axes\", \"h_anchor\": \"start\", \"v_baseline\": \"auto\", \"rotation\": -0.0, \"fontsize\": 10.0, \"color\": \"#000000\", \"alpha\": 1, \"zorder\": 1000003.0, \"id\": \"el2984139729378652792\"}, {\"text\": \"OPT\\t\", \"position\": [0.11051373954599761, 0.5768947755702722], \"coordinates\": \"axes\", \"h_anchor\": \"start\", \"v_baseline\": \"auto\", \"rotation\": -0.0, \"fontsize\": 10.0, \"color\": \"#000000\", \"alpha\": 1, \"zorder\": 1000003.0, \"id\": \"el2984139729378653856\"}], \"collections\": [], \"images\": [], \"sharex\": [], \"sharey\": []}], \"data\": {\"data01\": [[0.0, 0.0, 0.0, 0.0], [10.0, 0.0, 0.58, 18.3], [20.0, 0.0, 10.16, 38.6], [30.0, 0.0, 31.63, 58.9], [40.0, 0.0, 62.26, 79.2], [50.0, 99.5, 99.5, 99.5], [60.0, 99.5, 99.5, 99.5], [70.0, 99.5, 99.5, 99.5], [80.0, 99.5, 99.5, 99.5], [90.0, 99.5, 99.5, 99.5], [100.0, 99.5, 99.5, 99.5]], \"data02\": [[0.026881720430107503, 0.9379139072847682, 0.8689293598233996, 0.7999448123620309, 0.7309602649006622, 0.6619757174392935, 0.5929911699779249], [0.08661887694145756, 0.9379139072847682, 0.8689293598233996, 0.7999448123620309, 0.7309602649006622, 0.6619757174392935, 0.5929911699779249]], \"data03\": [[0.020908004778972505, 0.5493009565857248], [0.23446833930704894, 0.5493009565857248], [0.24044205495818397, 0.5493009565857248], [0.24044205495818397, 0.5584988962472406], [0.24044205495818397, 0.9678072111846947], [0.24044205495818397, 0.9770051508462105], [0.23446833930704894, 0.9770051508462105], [0.020908004778972505, 0.9770051508462105], [0.014934289127837508, 0.9770051508462105], [0.014934289127837508, 0.9678072111846947], [0.014934289127837508, 0.5584988962472406], [0.014934289127837508, 0.5493009565857248], [0.020908004778972505, 0.5493009565857248]]}, \"id\": \"el2984139730223454304\", \"plugins\": [{\"type\": \"reset\"}, {\"type\": \"zoom\", \"button\": true, \"enabled\": false}, {\"type\": \"boxzoom\", \"button\": true, \"enabled\": false}]});\n",
" });\n",
" });\n",
"}else{\n",
" // require.js not available: dynamically load d3 & mpld3\n",
" mpld3_load_lib(\"https://mpld3.github.io/js/d3.v3.min.js\", function(){\n",
" mpld3_load_lib(\"https://mpld3.github.io/js/mpld3.v0.3.1.dev1.js\", function(){\n",
" \n",
" mpld3.draw_figure(\"fig_el29841397302234543045239579540\", {\"width\": 432.0, \"height\": 288.0, \"axes\": [{\"bbox\": [0.125, 0.125, 0.775, 0.755], \"xlim\": [-5.0, 105.0], \"ylim\": [-4.9750000000000005, 104.475], \"xdomain\": [-5.0, 105.0], \"ydomain\": [-4.9750000000000005, 104.475], \"xscale\": \"linear\", \"yscale\": \"linear\", \"axes\": [{\"position\": \"bottom\", \"nticks\": 8, \"tickvalues\": null, \"tickformat\": null, \"scale\": \"linear\", \"fontsize\": 10.0, \"grid\": {\"gridOn\": false}, \"visible\": true}, {\"position\": \"left\", \"nticks\": 8, \"tickvalues\": null, \"tickformat\": null, \"scale\": \"linear\", \"fontsize\": 10.0, \"grid\": {\"gridOn\": false}, \"visible\": true}], \"axesbg\": \"#FFFFFF\", \"axesbgalpha\": null, \"zoomable\": true, \"id\": \"el2984139729378957184\", \"lines\": [{\"data\": \"data01\", \"xindex\": 0, \"yindex\": 1, \"coordinates\": \"data\", \"id\": \"el2984139729379035904\", \"color\": \"#1F77B4\", \"linewidth\": 1.5, \"dasharray\": \"none\", \"alpha\": 0.7, \"zorder\": 2, \"drawstyle\": \"default\"}, {\"data\": \"data01\", \"xindex\": 0, \"yindex\": 1, \"coordinates\": \"data\", \"id\": \"el2984139729379426488\", \"color\": \"#FF7F0E\", \"linewidth\": 1.5, \"dasharray\": \"none\", \"alpha\": 0.7, \"zorder\": 2, \"drawstyle\": \"default\"}, {\"data\": \"data01\", \"xindex\": 0, \"yindex\": 1, \"coordinates\": \"data\", \"id\": \"el2984139729379290080\", \"color\": \"#2CA02C\", \"linewidth\": 1.5, \"dasharray\": \"none\", \"alpha\": 0.7, \"zorder\": 2, \"drawstyle\": \"default\"}, {\"data\": \"data01\", \"xindex\": 0, \"yindex\": 1, \"coordinates\": \"data\", \"id\": \"el2984139729379037136\", \"color\": \"#D62728\", \"linewidth\": 1.5, \"dasharray\": \"none\", \"alpha\": 0.7, \"zorder\": 2, \"drawstyle\": \"default\"}, {\"data\": \"data01\", \"xindex\": 0, \"yindex\": 2, \"coordinates\": \"data\", \"id\": \"el2984139729379036800\", \"color\": \"#9467BD\", \"linewidth\": 1.5, \"dasharray\": \"none\", \"alpha\": 0.7, \"zorder\": 2, \"drawstyle\": \"default\"}, {\"data\": \"data01\", \"xindex\": 0, \"yindex\": 3, \"coordinates\": \"data\", \"id\": \"el2984139729378576480\", \"color\": \"#8C564B\", \"linewidth\": 1.5, \"dasharray\": \"none\", \"alpha\": 0.7, \"zorder\": 2, \"drawstyle\": \"default\"}, {\"data\": \"data02\", \"xindex\": 0, \"yindex\": 1, \"coordinates\": \"axes\", \"id\": \"el2984139729378607960\", \"color\": \"#1F77B4\", \"linewidth\": 1.5, \"dasharray\": \"none\", \"alpha\": 0.7, \"zorder\": 1000002.0, \"drawstyle\": \"default\"}, {\"data\": \"data02\", \"xindex\": 0, \"yindex\": 2, \"coordinates\": \"axes\", \"id\": \"el2984139729378607904\", \"color\": \"#FF7F0E\", \"linewidth\": 1.5, \"dasharray\": \"none\", \"alpha\": 0.7, \"zorder\": 1000002.0, \"drawstyle\": \"default\"}, {\"data\": \"data02\", \"xindex\": 0, \"yindex\": 3, \"coordinates\": \"axes\", \"id\": \"el2984139729378609024\", \"color\": \"#2CA02C\", \"linewidth\": 1.5, \"dasharray\": \"none\", \"alpha\": 0.7, \"zorder\": 1000002.0, \"drawstyle\": \"default\"}, {\"data\": \"data02\", \"xindex\": 0, \"yindex\": 4, \"coordinates\": \"axes\", \"id\": \"el2984139729378610088\", \"color\": \"#D62728\", \"linewidth\": 1.5, \"dasharray\": \"none\", \"alpha\": 0.7, \"zorder\": 1000002.0, \"drawstyle\": \"default\"}, {\"data\": \"data02\", \"xindex\": 0, \"yindex\": 5, \"coordinates\": \"axes\", \"id\": \"el2984139729378611152\", \"color\": \"#9467BD\", \"linewidth\": 1.5, \"dasharray\": \"none\", \"alpha\": 0.7, \"zorder\": 1000002.0, \"drawstyle\": \"default\"}, {\"data\": \"data02\", \"xindex\": 0, \"yindex\": 6, \"coordinates\": \"axes\", \"id\": \"el2984139729378653240\", \"color\": \"#8C564B\", \"linewidth\": 1.5, \"dasharray\": \"none\", \"alpha\": 0.7, \"zorder\": 1000002.0, \"drawstyle\": \"default\"}], \"paths\": [{\"data\": \"data03\", \"xindex\": 0, \"yindex\": 1, \"coordinates\": \"axes\", \"pathcodes\": [\"M\", \"L\", \"S\", \"L\", \"S\", \"L\", \"S\", \"L\", \"S\", \"Z\"], \"id\": \"el2984139729378577488\", \"dasharray\": \"none\", \"alpha\": 0.8, \"facecolor\": \"#FFFFFF\", \"edgecolor\": \"#CCCCCC\", \"edgewidth\": 1.0, \"zorder\": 1000000.0}], \"markers\": [], \"texts\": [{\"text\": \"Cache Size\", \"position\": [0.49999999999999994, -0.09657836644591611], \"coordinates\": \"axes\", \"h_anchor\": \"middle\", \"v_baseline\": \"hanging\", \"rotation\": -0.0, \"fontsize\": 10.0, \"color\": \"#000000\", \"alpha\": 1, \"zorder\": 3, \"id\": \"el2984139729378951408\"}, {\"text\": \"Hit Rate\", \"position\": [-0.08923237753882915, 0.49999999999999994], \"coordinates\": \"axes\", \"h_anchor\": \"middle\", \"v_baseline\": \"auto\", \"rotation\": -90.0, \"fontsize\": 10.0, \"color\": \"#000000\", \"alpha\": 1, \"zorder\": 3, \"id\": \"el2984139729378952360\"}, {\"text\": \"Looping-Sequential Workload\", \"position\": [0.49999999999999994, 1.0275938189845473], \"coordinates\": \"axes\", \"h_anchor\": \"middle\", \"v_baseline\": \"auto\", \"rotation\": -0.0, \"fontsize\": 12.0, \"color\": \"#000000\", \"alpha\": 1, \"zorder\": 3, \"id\": \"el2984139729378980808\"}, {\"text\": \"FIFO\\t\", \"position\": [0.11051373954599761, 0.9218175128771156], \"coordinates\": \"axes\", \"h_anchor\": \"start\", \"v_baseline\": \"auto\", \"rotation\": -0.0, \"fontsize\": 10.0, \"color\": \"#000000\", \"alpha\": 1, \"zorder\": 1000003.0, \"id\": \"el2984139729378607344\"}, {\"text\": \"LFU\\t\", \"position\": [0.11051373954599761, 0.8528329654157469], \"coordinates\": \"axes\", \"h_anchor\": \"start\", \"v_baseline\": \"auto\", \"rotation\": -0.0, \"fontsize\": 10.0, \"color\": \"#000000\", \"alpha\": 1, \"zorder\": 1000003.0, \"id\": \"el2984139729378608576\"}, {\"text\": \"LRU\\t\", \"position\": [0.11051373954599761, 0.7838484179543782], \"coordinates\": \"axes\", \"h_anchor\": \"start\", \"v_baseline\": \"auto\", \"rotation\": -0.0, \"fontsize\": 10.0, \"color\": \"#000000\", \"alpha\": 1, \"zorder\": 1000003.0, \"id\": \"el2984139729378609640\"}, {\"text\": \"CLOCK\\t\", \"position\": [0.11051373954599761, 0.7148638704930096], \"coordinates\": \"axes\", \"h_anchor\": \"start\", \"v_baseline\": \"auto\", \"rotation\": -0.0, \"fontsize\": 10.0, \"color\": \"#000000\", \"alpha\": 1, \"zorder\": 1000003.0, \"id\": \"el2984139729378610704\"}, {\"text\": \"RAND\\t\", \"position\": [0.11051373954599761, 0.6458793230316409], \"coordinates\": \"axes\", \"h_anchor\": \"start\", \"v_baseline\": \"auto\", \"rotation\": -0.0, \"fontsize\": 10.0, \"color\": \"#000000\", \"alpha\": 1, \"zorder\": 1000003.0, \"id\": \"el2984139729378652792\"}, {\"text\": \"OPT\\t\", \"position\": [0.11051373954599761, 0.5768947755702722], \"coordinates\": \"axes\", \"h_anchor\": \"start\", \"v_baseline\": \"auto\", \"rotation\": -0.0, \"fontsize\": 10.0, \"color\": \"#000000\", \"alpha\": 1, \"zorder\": 1000003.0, \"id\": \"el2984139729378653856\"}], \"collections\": [], \"images\": [], \"sharex\": [], \"sharey\": []}], \"data\": {\"data01\": [[0.0, 0.0, 0.0, 0.0], [10.0, 0.0, 0.58, 18.3], [20.0, 0.0, 10.16, 38.6], [30.0, 0.0, 31.63, 58.9], [40.0, 0.0, 62.26, 79.2], [50.0, 99.5, 99.5, 99.5], [60.0, 99.5, 99.5, 99.5], [70.0, 99.5, 99.5, 99.5], [80.0, 99.5, 99.5, 99.5], [90.0, 99.5, 99.5, 99.5], [100.0, 99.5, 99.5, 99.5]], \"data02\": [[0.026881720430107503, 0.9379139072847682, 0.8689293598233996, 0.7999448123620309, 0.7309602649006622, 0.6619757174392935, 0.5929911699779249], [0.08661887694145756, 0.9379139072847682, 0.8689293598233996, 0.7999448123620309, 0.7309602649006622, 0.6619757174392935, 0.5929911699779249]], \"data03\": [[0.020908004778972505, 0.5493009565857248], [0.23446833930704894, 0.5493009565857248], [0.24044205495818397, 0.5493009565857248], [0.24044205495818397, 0.5584988962472406], [0.24044205495818397, 0.9678072111846947], [0.24044205495818397, 0.9770051508462105], [0.23446833930704894, 0.9770051508462105], [0.020908004778972505, 0.9770051508462105], [0.014934289127837508, 0.9770051508462105], [0.014934289127837508, 0.9678072111846947], [0.014934289127837508, 0.5584988962472406], [0.014934289127837508, 0.5493009565857248], [0.020908004778972505, 0.5493009565857248]]}, \"id\": \"el2984139730223454304\", \"plugins\": [{\"type\": \"reset\"}, {\"type\": \"zoom\", \"button\": true, \"enabled\": false}, {\"type\": \"boxzoom\", \"button\": true, \"enabled\": false}]});\n",
" })\n",
" });\n",
"}\n",
"</script>"
],
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"workload = {'type':'loop', 'size': 10000, 'loop_size':50}\n",
"\n",
"work_gen.generate_workload(workload)\n",
"\n",
"fifo_sim = fifo_policy(work = work_gen.work, size = work_gen.size)\n",
"lru_sim = lru_policy(work = work_gen.work, size = work_gen.size)\n",
"rand_sim = random_policy(work = work_gen.work, size = work_gen.size)\n",
"oracle_sim = oracle_policy(work = work_gen.work, size = work_gen.size)\n",
"clock_sim = approx_lru_policy(work = work_gen.work, size = work_gen.size)\n",
"lfu_sim = lfu_policy(work = work_gen.work, size = work_gen.size)\n",
"\n",
"fifo = []\n",
"lru = []\n",
"rand = []\n",
"oracle = []\n",
"clock = []\n",
"lfu = []\n",
"for j in range(0, pages+5, 10):\n",
" fifo_sim.cache_size = j\n",
" lru_sim.cache_size = j\n",
" rand_sim.cache_size = j\n",
" oracle_sim.cache_size = j\n",
" clock_sim.cache_size = j\n",
" lfu_sim.cache_size = j\n",
" fifo.append(fifo_sim.simulate())\n",
" lru.append(lru_sim.simulate())\n",
" rand.append(rand_sim.simulate())\n",
" oracle.append(oracle_sim.simulate())\n",
" clock.append(clock_sim.simulate())\n",
" lfu.append(lfu_sim.simulate())\n",
"\n",
"\n",
"plt.plot(np.arange(0,pages+5,10), fifo, '-', alpha=0.7, label='FIFO\\t')\n",
"plt.plot(np.arange(0,pages+5,10), lfu, '-', alpha=0.7, label='LFU\\t')\n",
"plt.plot(np.arange(0,pages+5,10), lru, '-', alpha=0.7, label='LRU\\t')\n",
"plt.plot(np.arange(0,pages+5,10), clock, '-', alpha=0.7, label='CLOCK\\t')\n",
"plt.plot(np.arange(0,pages+5,10), rand, '-', alpha=0.7, label='RAND\\t')\n",
"plt.plot(np.arange(0,pages+5,10), oracle, '-', alpha=0.7, label='OPT\\t')\n",
"\n",
"plt.xlabel('Cache Size')\n",
"plt.ylabel('Hit Rate')\n",
"plt.title('Looping-Sequential Workload')\n",
"plt.legend()"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3",
"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.7.1"
}
},
"nbformat": 4,
"nbformat_minor": 2
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment