diff --git a/ACE/background.html b/ACE/background.html index c2e0a71..21766c5 100644 --- a/ACE/background.html +++ b/ACE/background.html @@ -111,11 +111,10 @@

What is ACE and why do we need it?

- ACE is a new bufferpool manager that adresses two challenged of state-of-the-art bufferpool managers. - First, existing bufferpool managers often assume that the underlying devices have no concurrency. - When writing dirty pages to disk, state-of-the-art bufferpool managers write(evict) one page at a time, - missing the opputinity to exploit the device's concurrency. Second, page replacement policies generally do not consider the device asymmetry, - instead, they treat read and write request equally. + ACE is a new bufferpool manager that addresses two challenges of the state-of-the-art bufferpool managers. + First, existing bufferpool managers often assume that the underlying devices have no concurrency. As a result, + they write (evict) one page at a time, missing the opportunity to exploit the device's ability to handle parallel writes. + Second, page replacement policies generally do not consider the device asymmetry, instead, they treat read and write requests equally.


@@ -141,7 +140,7 @@

ACE


- To adress these issues, we propose ACE, a bufferpool manager that utilizes the underlying device concurrency to bridge the device assymetry. + To address these issues, we propose ACE, a bufferpool manager that utilizes the underlying device concurrency and assymetry. Our approach uses asymmetry/concurrency-aware write-back and eviction policies. The write-back policy always writes multiple pages concurrently, hence amortizing the write cost. The eviction policy evicts one or multiple pages at the same time from the bufferpool to enable prefetching. diff --git a/ACE/js/workloadGenerator.js b/ACE/js/workloadGenerator.js index b651c61..ce0f144 100644 --- a/ACE/js/workloadGenerator.js +++ b/ACE/js/workloadGenerator.js @@ -244,7 +244,7 @@ function RWgraph(){ x: LRUx2, y: LRUy2, mode:"scatter", - name:"ACELRU", + name:"ACE-LRU", marker: { size: 12, symbol: 'diamond-open' @@ -268,7 +268,7 @@ function RWgraph(){ x: CFLRUx2, y: CFLRUy2, mode:"scatter", - name:"ACECFLRU", + name:"ACE-CFLRU", marker: { size: 12, symbol: 'x-open' @@ -280,7 +280,7 @@ function RWgraph(){ x: LRUWSRx1, y: LRUWSRy1, mode:"scatter", - name:"LRUWSR", + name:"LRU-WSR", marker: { size: 12, symbol: 'triangle-up-open' @@ -292,7 +292,7 @@ function RWgraph(){ x: LRUWSRx2, y: LRUWSRy2, mode:"scatter", - name:"ACELRUWSR", + name:"ACE-LRU-WSR", marker: { size: 12, symbol: 'triangle-down-open' @@ -332,7 +332,7 @@ function RWgraph(){ //generate graph for varying Buffer size function Bgraph(){ - + var diskSize = parseInt($('#n').val()); // Disk size var ops = parseInt($('#x').val()); var a = parseInt($("#alpha").val()); @@ -365,19 +365,19 @@ function Bgraph(){ (function myLoop(i) { setTimeout(function() { progress++; - LRUstats = IOcalc(generateWorkload(),ops*(i/100), a, 0); + LRUstats = IOcalc(generateWorkload(),diskSize*(i/100), a, 0); LRUx1.push(i); LRUy1.push(LRUstats[0] * .4); LRUx2.push(i); LRUy2.push(LRUstats[1] * .4); - CFLRUstats = IOcalc(generateWorkload(),ops*(i/100), a, 1); + CFLRUstats = IOcalc(generateWorkload(),diskSize*(i/100), a, 1); CFLRUx1.push(i); CFLRUy1.push(CFLRUstats[0] * .4); CFLRUx2.push(i); CFLRUy2.push(CFLRUstats[1] * .4); - LRUWSRstats = IOcalc(generateWorkload(),ops*(i/100), a, 2); + LRUWSRstats = IOcalc(generateWorkload(),diskSize*(i/100), a, 2); LRUWSRx1.push(i); LRUWSRy1.push(LRUWSRstats[0] * .4); LRUWSRx2.push(i); @@ -407,7 +407,7 @@ function Bgraph(){ x: LRUx2, y: LRUy2, mode:"scatter", - name:"ACELRU", + name:"ACE-LRU", marker: { size: 12, symbol: 'diamond-open' @@ -431,7 +431,7 @@ function Bgraph(){ x: CFLRUx2, y: CFLRUy2, mode:"scatter", - name:"ACECFLRU", + name:"ACE-CFLRU", marker: { size: 12, symbol: 'x-open' @@ -443,7 +443,7 @@ function Bgraph(){ x: LRUWSRx1, y: LRUWSRy1, mode:"scatter", - name:"LRWSR", + name:"LRU-WSR", marker: { size: 12, symbol: 'triangle-up-open' @@ -455,7 +455,7 @@ function Bgraph(){ x: LRUWSRx2, y: LRUWSRy2, mode:"scatter", - name:"ACELRUWSR", + name:"ACE-LRU-WSR", marker: { size: 12, symbol: 'triangle-down-open' @@ -470,7 +470,7 @@ function Bgraph(){ showgrid: false, zeroline: false, showline: true, - title: "Bufferpool size (% of Workload)" + title: "Bufferpool size (% of disk size)" }, yaxis: { autorange: true, diff --git a/ACE/research.html b/ACE/research.html index 52f2627..51675e9 100644 --- a/ACE/research.html +++ b/ACE/research.html @@ -310,103 +310,86 @@


-
- +
- 0 + 0
#Buffer Misses -
-
- 0 + title="Number of write batches processed by the bufferpool."># Write Batches
- -
+ + + + + + -
-
- 0 + 0 ms
#Disk Pages Read -
-
- 0 + title="The total latency of all read pages (calculated as # Read Pages x Latency per Page)."># Total Read Latency
-
- +
--> + +
- 0 + 0
#Disk Pages Written -
-
- 0 + title="The number of dirty pages written to disk."># Disk Pages Written
- + +
- 0 + 0
#Read I/O -
-
- 0 + title="The number of pages read from disk."># Disk Pages Read
- + +
- 0 + 0
#Write I/O -
-
- 0 + title="The number of times a requested page is not found in the bufferpool."># Buffer Misses
- + +
- 0 + 0
#Pages Evicted -
-
- 0 + title="The number of times a requested page is in the bufferpool."># Buffer Hits
-
- +