FIFO -> LRU
This commit is contained in:
parent
4825d850dc
commit
2db46f1525
16 changed files with 131 additions and 115 deletions
|
@ -16,3 +16,9 @@
|
||||||
%T DarkHTTPd, when you need a webserver in a hurry.
|
%T DarkHTTPd, when you need a webserver in a hurry.
|
||||||
%D 2017
|
%D 2017
|
||||||
%I https://unix4lyfe.org/darkhttpd/
|
%I https://unix4lyfe.org/darkhttpd/
|
||||||
|
|
||||||
|
%K netlibre
|
||||||
|
%A Philippe PITTOLI
|
||||||
|
%T netlib.re, a free DNS registrar
|
||||||
|
%D 2013
|
||||||
|
%I https://www.netlib.re
|
||||||
|
|
|
@ -1,46 +0,0 @@
|
||||||
.G1
|
|
||||||
copy "legend.grap"
|
|
||||||
frame invis ht 3 wid 4 left solid bot solid
|
|
||||||
coord x 0,100000
|
|
||||||
|
|
||||||
label left "Cost of adding" unaligned "a new entry (ns)" left 0.8
|
|
||||||
label bot "Number of entries already in the structure" down 0.1
|
|
||||||
|
|
||||||
obfifo = obefficientfifo = 0
|
|
||||||
cbfifo = cbefficientfifo = 0
|
|
||||||
|
|
||||||
legendxleft = 1000
|
|
||||||
legendxright = 50000
|
|
||||||
legendyup = 190000
|
|
||||||
legendydown = 140000
|
|
||||||
|
|
||||||
boite(legendxleft,legendxright,legendyup,legendydown)
|
|
||||||
legend_fifo_addition(legendxleft,legendxright,legendyup,legendydown)
|
|
||||||
|
|
||||||
copy "../data/fifo_100000_100000_redux.d" thru X
|
|
||||||
cx = $1
|
|
||||||
|
|
||||||
cbfifo = $2
|
|
||||||
cbefficientfifo = $3
|
|
||||||
|
|
||||||
# fifo efficientfifo
|
|
||||||
.gcolor orange
|
|
||||||
if (obfifo > 0) then {line from cx,cbfifo to ox,obfifo}
|
|
||||||
.gcolor
|
|
||||||
.gcolor green
|
|
||||||
if (obefficientfifo > 0) then {line from cx,cbefficientfifo to ox,obefficientfifo}
|
|
||||||
.gcolor
|
|
||||||
|
|
||||||
obfifo = cbfifo
|
|
||||||
obefficientfifo = cbefficientfifo
|
|
||||||
ox = cx
|
|
||||||
|
|
||||||
# fifo efficientfifo
|
|
||||||
.gcolor orange
|
|
||||||
bullet at cx,cbfifo
|
|
||||||
.gcolor
|
|
||||||
.gcolor green
|
|
||||||
bullet at cx,cbefficientfifo
|
|
||||||
.gcolor
|
|
||||||
X
|
|
||||||
.G2
|
|
46
paper/graphs/addition_lru.grap
Normal file
46
paper/graphs/addition_lru.grap
Normal file
|
@ -0,0 +1,46 @@
|
||||||
|
.G1
|
||||||
|
copy "legend.grap"
|
||||||
|
frame invis ht 3 wid 4 left solid bot solid
|
||||||
|
coord x 0,100000
|
||||||
|
|
||||||
|
label left "Cost of adding" unaligned "a new entry (ns)" left 0.8
|
||||||
|
label bot "Number of entries already in the structure" down 0.1
|
||||||
|
|
||||||
|
oblru = obefficientlru = 0
|
||||||
|
cblru = cbefficientlru = 0
|
||||||
|
|
||||||
|
legendxleft = 1000
|
||||||
|
legendxright = 50000
|
||||||
|
legendyup = 190000
|
||||||
|
legendydown = 140000
|
||||||
|
|
||||||
|
boite(legendxleft,legendxright,legendyup,legendydown)
|
||||||
|
legend_lru_addition(legendxleft,legendxright,legendyup,legendydown)
|
||||||
|
|
||||||
|
copy "../data/lru_100000_100000_redux.d" thru X
|
||||||
|
cx = $1
|
||||||
|
|
||||||
|
cblru = $2
|
||||||
|
cbefficientlru = $3
|
||||||
|
|
||||||
|
# lru efficientlru
|
||||||
|
.gcolor orange
|
||||||
|
if (oblru > 0) then {line from cx,cblru to ox,oblru}
|
||||||
|
.gcolor
|
||||||
|
.gcolor green
|
||||||
|
if (obefficientlru > 0) then {line from cx,cbefficientlru to ox,obefficientlru}
|
||||||
|
.gcolor
|
||||||
|
|
||||||
|
oblru = cblru
|
||||||
|
obefficientlru = cbefficientlru
|
||||||
|
ox = cx
|
||||||
|
|
||||||
|
# lru efficientlru
|
||||||
|
.gcolor orange
|
||||||
|
bullet at cx,cblru
|
||||||
|
.gcolor
|
||||||
|
.gcolor green
|
||||||
|
bullet at cx,cbefficientlru
|
||||||
|
.gcolor
|
||||||
|
X
|
||||||
|
.G2
|
|
@ -8,8 +8,8 @@ ticks bot out at 50000 "50,000", 100000 "100,000", 150000 "150,000", 200000 "200
|
||||||
label left "Request duration with" unaligned "an index (ns)" "(Median)" left 0.8
|
label left "Request duration with" unaligned "an index (ns)" "(Median)" left 0.8
|
||||||
label bot "Number of cars in the database" down 0.1
|
label bot "Number of cars in the database" down 0.1
|
||||||
|
|
||||||
obfifo1 = obfifo5 = obfifo10 = obfifo20 = 0 # old bullets
|
oblru1 = oblru5 = oblru10 = oblru20 = 0 # old bullets
|
||||||
cbfifo1 = cbfifo5 = cbfifo10 = cbfifo20 = 0 # current bullets
|
cblru1 = cblru5 = cblru10 = cblru20 = 0 # current bullets
|
||||||
|
|
||||||
legendxleft = 120000
|
legendxleft = 120000
|
||||||
legendxright = 180000
|
legendxright = 180000
|
||||||
|
@ -19,12 +19,12 @@ legendydown = 20
|
||||||
boite(legendxleft,legendxright,legendyup,legendydown)
|
boite(legendxleft,legendxright,legendyup,legendydown)
|
||||||
legend_common(legendxleft,legendxright,legendyup,legendydown)
|
legend_common(legendxleft,legendxright,legendyup,legendydown)
|
||||||
|
|
||||||
copy "../data/fifo_index.d" thru X
|
copy "../data/lru_index.d" thru X
|
||||||
cx = $1*5
|
cx = $1*5
|
||||||
|
|
||||||
y_scale = 1
|
y_scale = 1
|
||||||
|
|
||||||
## fifo1 fifo5 fifo10 fifo20
|
## lru1 lru5 lru10 lru20
|
||||||
#line from cx,$2/y_scale to cx,$4/y_scale
|
#line from cx,$2/y_scale to cx,$4/y_scale
|
||||||
#line from cx,$5/y_scale to cx,$7/y_scale
|
#line from cx,$5/y_scale to cx,$7/y_scale
|
||||||
#line from cx,$8/y_scale to cx,$10/y_scale
|
#line from cx,$8/y_scale to cx,$10/y_scale
|
||||||
|
@ -34,38 +34,38 @@ copy "../data/fifo_index.d" thru X
|
||||||
|
|
||||||
cx = $1*5
|
cx = $1*5
|
||||||
|
|
||||||
cbfifo1 = $3/y_scale
|
cblru1 = $3/y_scale
|
||||||
cbfifo5 = $6/y_scale
|
cblru5 = $6/y_scale
|
||||||
cbfifo10 = $9/y_scale
|
cblru10 = $9/y_scale
|
||||||
cbfifo20 = $12/y_scale
|
cblru20 = $12/y_scale
|
||||||
|
|
||||||
.gcolor red
|
.gcolor red
|
||||||
if (obfifo1 > 0) then {line from cx,cbfifo1 to ox,obfifo1}
|
if (oblru1 > 0) then {line from cx,cblru1 to ox,oblru1}
|
||||||
.gcolor
|
.gcolor
|
||||||
.gcolor green
|
.gcolor green
|
||||||
if (obfifo5 > 0) then {line from cx,cbfifo5 to ox,obfifo5}
|
if (oblru5 > 0) then {line from cx,cblru5 to ox,oblru5}
|
||||||
.gcolor
|
.gcolor
|
||||||
if (obfifo10 > 0) then {line from cx,cbfifo10 to ox,obfifo10}
|
if (oblru10 > 0) then {line from cx,cblru10 to ox,oblru10}
|
||||||
.gcolor pink
|
.gcolor pink
|
||||||
if (obfifo20 > 0) then {line from cx,cbfifo20 to ox,obfifo20}
|
if (oblru20 > 0) then {line from cx,cblru20 to ox,oblru20}
|
||||||
.gcolor
|
.gcolor
|
||||||
|
|
||||||
obfifo1 = cbfifo1
|
oblru1 = cblru1
|
||||||
obfifo5 = cbfifo5
|
oblru5 = cblru5
|
||||||
obfifo10 = cbfifo10
|
oblru10 = cblru10
|
||||||
obfifo20 = cbfifo20
|
oblru20 = cblru20
|
||||||
ox = cx
|
ox = cx
|
||||||
|
|
||||||
# fifo1 fifo5 fifo10 fifo20
|
# lru1 lru5 lru10 lru20
|
||||||
.gcolor red
|
.gcolor red
|
||||||
bullet at cx,cbfifo1
|
bullet at cx,cblru1
|
||||||
.gcolor
|
.gcolor
|
||||||
.gcolor green
|
.gcolor green
|
||||||
bullet at cx,cbfifo5
|
bullet at cx,cblru5
|
||||||
.gcolor
|
.gcolor
|
||||||
bullet at cx,cbfifo10
|
bullet at cx,cblru10
|
||||||
.gcolor pink
|
.gcolor pink
|
||||||
bullet at cx,cbfifo20
|
bullet at cx,cblru20
|
||||||
.gcolor
|
.gcolor
|
||||||
X
|
X
|
||||||
.G2
|
.G2
|
|
@ -8,8 +8,8 @@ ticks bot out from 1000 to 10000 by 1000
|
||||||
label left "Request duration" unaligned "for a partition (µs)" "(Median)" left 0.8
|
label left "Request duration" unaligned "for a partition (µs)" "(Median)" left 0.8
|
||||||
label bot "Number of cars matching the partition" down 0.1
|
label bot "Number of cars matching the partition" down 0.1
|
||||||
|
|
||||||
obfifo1 = obfifo5 = obfifo10 = obfifo20 = 0
|
oblru1 = oblru5 = oblru10 = oblru20 = 0
|
||||||
cbfifo1 = cbfifo5 = cbfifo10 = cbfifo20 = 0
|
cblru1 = cblru5 = cblru10 = cblru20 = 0
|
||||||
|
|
||||||
legendxleft = 1000
|
legendxleft = 1000
|
||||||
legendxright = 2500
|
legendxright = 2500
|
||||||
|
@ -19,7 +19,7 @@ legendydown = 2500
|
||||||
boite(legendxleft,legendxright,legendyup,legendydown)
|
boite(legendxleft,legendxright,legendyup,legendydown)
|
||||||
legend_common(legendxleft,legendxright,legendyup,legendydown)
|
legend_common(legendxleft,legendxright,legendyup,legendydown)
|
||||||
|
|
||||||
copy "../data/fifo_partitions.d" thru X
|
copy "../data/lru_partitions.d" thru X
|
||||||
cx = $1*2
|
cx = $1*2
|
||||||
|
|
||||||
y_scale = 1000
|
y_scale = 1000
|
||||||
|
@ -28,10 +28,10 @@ copy "../data/fifo_partitions.d" thru X
|
||||||
# following retrivials, the mustache doesn't provide a better
|
# following retrivials, the mustache doesn't provide a better
|
||||||
# understanding of the data.
|
# understanding of the data.
|
||||||
|
|
||||||
line_no_mustache(cbfifo1, obfifo1, $3, red)
|
line_no_mustache(cblru1, oblru1, $3, red)
|
||||||
line_no_mustache(cbfifo5, obfifo5, $6, green)
|
line_no_mustache(cblru5, oblru5, $6, green)
|
||||||
line_no_mustache(cbfifo10, obfifo10, $9, black)
|
line_no_mustache(cblru10, oblru10, $9, black)
|
||||||
line_no_mustache(cbfifo20, obfifo20, $12, pink)
|
line_no_mustache(cblru20, oblru20, $12, pink)
|
||||||
|
|
||||||
ox = cx
|
ox = cx
|
||||||
X
|
X
|
|
@ -7,8 +7,8 @@ ticks bot out from 1000 to 5000 by 1000
|
||||||
label left "Request duration" unaligned "for a tag (µs)" "(Median)" left 0.8
|
label left "Request duration" unaligned "for a tag (µs)" "(Median)" left 0.8
|
||||||
label bot "Number of cars matching the tag" down 0.1
|
label bot "Number of cars matching the tag" down 0.1
|
||||||
|
|
||||||
obfifo1 = obfifo5 = obfifo10 = obfifo20 = 0
|
oblru1 = oblru5 = oblru10 = oblru20 = 0
|
||||||
cbfifo1 = cbfifo5 = cbfifo10 = cbfifo20 = 0
|
cblru1 = cblru5 = cblru10 = cblru20 = 0
|
||||||
|
|
||||||
legendxleft = 2000
|
legendxleft = 2000
|
||||||
legendxright = 3500
|
legendxright = 3500
|
||||||
|
@ -18,7 +18,7 @@ legendydown = 1500
|
||||||
boite(legendxleft,legendxright,legendyup,legendydown)
|
boite(legendxleft,legendxright,legendyup,legendydown)
|
||||||
legend_common(legendxleft,legendxright,legendyup,legendydown)
|
legend_common(legendxleft,legendxright,legendyup,legendydown)
|
||||||
|
|
||||||
copy "../data/fifo_tags.d" thru X
|
copy "../data/lru_tags.d" thru X
|
||||||
cx = $1
|
cx = $1
|
||||||
|
|
||||||
y_scale = 1000
|
y_scale = 1000
|
||||||
|
@ -27,10 +27,10 @@ copy "../data/fifo_tags.d" thru X
|
||||||
# following retrivials, the mustache doesn't provide a better
|
# following retrivials, the mustache doesn't provide a better
|
||||||
# understanding of the data.
|
# understanding of the data.
|
||||||
|
|
||||||
line_no_mustache(cbfifo1, obfifo1, $3, red)
|
line_no_mustache(cblru1, oblru1, $3, red)
|
||||||
line_no_mustache(cbfifo5, obfifo5, $6, green)
|
line_no_mustache(cblru5, oblru5, $6, green)
|
||||||
line_no_mustache(cbfifo10, obfifo10, $9, black)
|
line_no_mustache(cblru10, oblru10, $9, black)
|
||||||
line_no_mustache(cbfifo20, obfifo20, $12, pink)
|
line_no_mustache(cblru20, oblru20, $12, pink)
|
||||||
|
|
||||||
ox = cx
|
ox = cx
|
||||||
X
|
X
|
|
@ -10,8 +10,8 @@ ticks bot off
|
||||||
label left "Request duration with" unaligned "an index (ns)" "(Median)" left 0.8
|
label left "Request duration with" unaligned "an index (ns)" "(Median)" left 0.8
|
||||||
label right "\s+2Linear" unaligned "scale\s0"
|
label right "\s+2Linear" unaligned "scale\s0"
|
||||||
|
|
||||||
obram = obuncache = obcache = obfifo = obsemi = 0 # old bullets
|
obram = obuncache = obcache = oblru = obsemi = 0 # old bullets
|
||||||
cbram = cbuncache = cbcache = cbfifo = cbsemi = 0 # current bullets
|
cbram = cbuncache = cbcache = cblru = cbsemi = 0 # current bullets
|
||||||
|
|
||||||
legendxleft = 100000
|
legendxleft = 100000
|
||||||
legendxright = 250000
|
legendxright = 250000
|
||||||
|
@ -28,7 +28,7 @@ copy "../data/index.d" thru X
|
||||||
|
|
||||||
line_no_mustache(cbram, obram, $3, red)
|
line_no_mustache(cbram, obram, $3, red)
|
||||||
line_no_mustache(cbcache, obcache, $6, black)
|
line_no_mustache(cbcache, obcache, $6, black)
|
||||||
line_no_mustache(cbfifo, obfifo, $9, pink)
|
line_no_mustache(cblru, oblru, $9, pink)
|
||||||
line_no_mustache(cbsemi, obsemi, $12, blue)
|
line_no_mustache(cbsemi, obsemi, $12, blue)
|
||||||
line_no_mustache(cbuncache, obuncache, $15, green)
|
line_no_mustache(cbuncache, obuncache, $15, green)
|
||||||
|
|
||||||
|
@ -45,8 +45,8 @@ label left "Request duration with" unaligned "an index (ns)" "(Median)" left 0.8
|
||||||
label bot "Number of cars in the database" down 0.1
|
label bot "Number of cars in the database" down 0.1
|
||||||
label right "\s+2Logarithmic" unaligned "scale\s0"
|
label right "\s+2Logarithmic" unaligned "scale\s0"
|
||||||
|
|
||||||
obram = obuncache = obcache = obfifo = obsemi = 0 # old bullets
|
obram = obuncache = obcache = oblru = obsemi = 0 # old bullets
|
||||||
cbram = cbuncache = cbcache = cbfifo = cbsemi = 0 # current bullets
|
cbram = cbuncache = cbcache = cblru = cbsemi = 0 # current bullets
|
||||||
|
|
||||||
copy "../data/index.d" thru X
|
copy "../data/index.d" thru X
|
||||||
cx = $1*5
|
cx = $1*5
|
||||||
|
@ -55,7 +55,7 @@ copy "../data/index.d" thru X
|
||||||
|
|
||||||
line_no_mustache(cbram, obram, $3, red)
|
line_no_mustache(cbram, obram, $3, red)
|
||||||
line_no_mustache(cbcache, obcache, $6, black)
|
line_no_mustache(cbcache, obcache, $6, black)
|
||||||
line_no_mustache(cbfifo, obfifo, $9, pink)
|
line_no_mustache(cblru, oblru, $9, pink)
|
||||||
line_no_mustache(cbsemi, obsemi, $12, blue)
|
line_no_mustache(cbsemi, obsemi, $12, blue)
|
||||||
line_no_mustache(cbuncache, obuncache, $15, green)
|
line_no_mustache(cbuncache, obuncache, $15, green)
|
||||||
|
|
||||||
|
|
|
@ -9,8 +9,8 @@ ticks bot off
|
||||||
label left "Request duration" unaligned "for a partition (ms)" "(Median)" left 0.8
|
label left "Request duration" unaligned "for a partition (ms)" "(Median)" left 0.8
|
||||||
label right "\s+2Linear" unaligned "scale\s0"
|
label right "\s+2Linear" unaligned "scale\s0"
|
||||||
|
|
||||||
obram = obuncache = obfifo = obcache = obsemi = 0
|
obram = obuncache = oblru = obcache = obsemi = 0
|
||||||
cbram = cbuncache = cbfifo = cbcache = cbsemi = 0
|
cbram = cbuncache = cblru = cbcache = cbsemi = 0
|
||||||
|
|
||||||
legendxleft = 1000
|
legendxleft = 1000
|
||||||
legendxright = 6500
|
legendxright = 6500
|
||||||
|
@ -33,13 +33,13 @@ copy "../data/partitions.d" thru X
|
||||||
|
|
||||||
line_no_mustache(cbram, obram, $3, red)
|
line_no_mustache(cbram, obram, $3, red)
|
||||||
line_no_mustache(cbcache, obcache, $6, black)
|
line_no_mustache(cbcache, obcache, $6, black)
|
||||||
line_no_mustache(cbfifo, obfifo, $9, pink)
|
line_no_mustache(cblru, oblru, $9, pink)
|
||||||
line_no_mustache(cbsemi, obsemi, $12, blue)
|
line_no_mustache(cbsemi, obsemi, $12, blue)
|
||||||
line_no_mustache(cbuncache, obuncache, $15, green)
|
line_no_mustache(cbuncache, obuncache, $15, green)
|
||||||
|
|
||||||
#line_with_mustache(cbram, obram, $3, red, $2, $4)
|
#line_with_mustache(cbram, obram, $3, red, $2, $4)
|
||||||
#line_with_mustache(cbcache, obcache, $6, black, $5, $7)
|
#line_with_mustache(cbcache, obcache, $6, black, $5, $7)
|
||||||
#line_with_mustache(cbfifo, obfifo, $9, pink, $8, $10)
|
#line_with_mustache(cblru, oblru, $9, pink, $8, $10)
|
||||||
#line_with_mustache(cbsemi, obsemi, $12,blue, $11, $13)
|
#line_with_mustache(cbsemi, obsemi, $12,blue, $11, $13)
|
||||||
#line_with_mustache(cbuncache,obuncache,$15,green, $14, $16)
|
#line_with_mustache(cbuncache,obuncache,$15,green, $14, $16)
|
||||||
|
|
||||||
|
@ -55,8 +55,8 @@ label left "Request duration" unaligned "for a partition (ms)" "(Median)" left 0
|
||||||
label bot "Number of cars matching the partition" down 0.1
|
label bot "Number of cars matching the partition" down 0.1
|
||||||
label right "\s+2Logarithmic" unaligned "scale\s0"
|
label right "\s+2Logarithmic" unaligned "scale\s0"
|
||||||
|
|
||||||
obram = obuncache = obfifo = obcache = obsemi = 0
|
obram = obuncache = oblru = obcache = obsemi = 0
|
||||||
cbram = cbuncache = cbfifo = cbcache = cbsemi = 0
|
cbram = cbuncache = cblru = cbcache = cbsemi = 0
|
||||||
|
|
||||||
y_scale = 1000000
|
y_scale = 1000000
|
||||||
|
|
||||||
|
@ -71,13 +71,13 @@ copy "../data/partitions.d" thru X
|
||||||
|
|
||||||
line_no_mustache(cbram, obram, $3, red)
|
line_no_mustache(cbram, obram, $3, red)
|
||||||
line_no_mustache(cbcache, obcache, $6, black)
|
line_no_mustache(cbcache, obcache, $6, black)
|
||||||
line_no_mustache(cbfifo, obfifo, $9, pink)
|
line_no_mustache(cblru, oblru, $9, pink)
|
||||||
line_no_mustache(cbsemi, obsemi, $12, blue)
|
line_no_mustache(cbsemi, obsemi, $12, blue)
|
||||||
line_no_mustache(cbuncache, obuncache, $15, green)
|
line_no_mustache(cbuncache, obuncache, $15, green)
|
||||||
|
|
||||||
#line_with_mustache(cbram, obram, $3, red, $2, $4)
|
#line_with_mustache(cbram, obram, $3, red, $2, $4)
|
||||||
#line_with_mustache(cbcache, obcache, $6, black, $5, $7)
|
#line_with_mustache(cbcache, obcache, $6, black, $5, $7)
|
||||||
#line_with_mustache(cbfifo, obfifo, $9, pink, $8, $10)
|
#line_with_mustache(cblru, oblru, $9, pink, $8, $10)
|
||||||
#line_with_mustache(cbsemi, obsemi, $12,blue, $11, $13)
|
#line_with_mustache(cbsemi, obsemi, $12,blue, $11, $13)
|
||||||
#line_with_mustache(cbuncache,obuncache,$15,green, $14, $16)
|
#line_with_mustache(cbuncache,obuncache,$15,green, $14, $16)
|
||||||
|
|
||||||
|
|
|
@ -10,8 +10,8 @@ label left "Request duration" unaligned "for a tag (ms)" "(Median)" left 0.8
|
||||||
#label bot "Number of cars matching the tag" down 0.1
|
#label bot "Number of cars matching the tag" down 0.1
|
||||||
label right "\s+2Linear" unaligned "scale\s0"
|
label right "\s+2Linear" unaligned "scale\s0"
|
||||||
|
|
||||||
obram = obuncache = obfifo = obcache = obsemi = 0
|
obram = obuncache = oblru = obcache = obsemi = 0
|
||||||
cbram = cbuncache = cbfifo = cbcache = cbsemi = 0
|
cbram = cbuncache = cblru = cbcache = cbsemi = 0
|
||||||
|
|
||||||
legendxleft = 200
|
legendxleft = 200
|
||||||
legendxright = 3000
|
legendxright = 3000
|
||||||
|
@ -28,13 +28,13 @@ copy "../data/tags.d" thru X
|
||||||
|
|
||||||
line_no_mustache(cbram, obram, $3, red)
|
line_no_mustache(cbram, obram, $3, red)
|
||||||
line_no_mustache(cbcache, obcache, $6, black)
|
line_no_mustache(cbcache, obcache, $6, black)
|
||||||
line_no_mustache(cbfifo, obfifo, $9, pink)
|
line_no_mustache(cblru, oblru, $9, pink)
|
||||||
line_no_mustache(cbsemi, obsemi, $12, blue)
|
line_no_mustache(cbsemi, obsemi, $12, blue)
|
||||||
line_no_mustache(cbuncache, obuncache, $15, green)
|
line_no_mustache(cbuncache, obuncache, $15, green)
|
||||||
|
|
||||||
#line_with_mustache(cbram, obram, $3, red, $2, $4)
|
#line_with_mustache(cbram, obram, $3, red, $2, $4)
|
||||||
#line_with_mustache(cbcache, obcache, $6, black, $5, $7)
|
#line_with_mustache(cbcache, obcache, $6, black, $5, $7)
|
||||||
#line_with_mustache(cbfifo, obfifo, $9, pink, $8, $10)
|
#line_with_mustache(cblru, oblru, $9, pink, $8, $10)
|
||||||
#line_with_mustache(cbsemi, obsemi, $12,blue, $11, $13)
|
#line_with_mustache(cbsemi, obsemi, $12,blue, $11, $13)
|
||||||
#line_with_mustache(cbuncache,obuncache,$15,green, $14, $16)
|
#line_with_mustache(cbuncache,obuncache,$15,green, $14, $16)
|
||||||
|
|
||||||
|
@ -50,8 +50,8 @@ label left "Request duration" unaligned "for a tag (ms)" "(Median)" left 0.8
|
||||||
label bot "Number of cars matching the tag" down 0.1
|
label bot "Number of cars matching the tag" down 0.1
|
||||||
label right "\s+2Logarithmic" unaligned "scale\s0"
|
label right "\s+2Logarithmic" unaligned "scale\s0"
|
||||||
|
|
||||||
obram = obuncache = obfifo = obcache = obsemi = 0
|
obram = obuncache = oblru = obcache = obsemi = 0
|
||||||
cbram = cbuncache = cbfifo = cbcache = cbsemi = 0
|
cbram = cbuncache = cblru = cbcache = cbsemi = 0
|
||||||
|
|
||||||
copy "../data/tags.d" thru X
|
copy "../data/tags.d" thru X
|
||||||
cx = $1
|
cx = $1
|
||||||
|
@ -60,13 +60,13 @@ copy "../data/tags.d" thru X
|
||||||
|
|
||||||
line_no_mustache(cbram, obram, $3, red)
|
line_no_mustache(cbram, obram, $3, red)
|
||||||
line_no_mustache(cbcache, obcache, $6, black)
|
line_no_mustache(cbcache, obcache, $6, black)
|
||||||
line_no_mustache(cbfifo, obfifo, $9, pink)
|
line_no_mustache(cblru, oblru, $9, pink)
|
||||||
line_no_mustache(cbsemi, obsemi, $12, blue)
|
line_no_mustache(cbsemi, obsemi, $12, blue)
|
||||||
line_no_mustache(cbuncache, obuncache, $15, green)
|
line_no_mustache(cbuncache, obuncache, $15, green)
|
||||||
|
|
||||||
#line_with_mustache(cbram, obram, $3, red, $2, $4)
|
#line_with_mustache(cbram, obram, $3, red, $2, $4)
|
||||||
#line_with_mustache(cbcache, obcache, $6, black, $5, $7)
|
#line_with_mustache(cbcache, obcache, $6, black, $5, $7)
|
||||||
#line_with_mustache(cbfifo, obfifo, $9, pink, $8, $10)
|
#line_with_mustache(cblru, oblru, $9, pink, $8, $10)
|
||||||
#line_with_mustache(cbsemi, obsemi, $12,blue, $11, $13)
|
#line_with_mustache(cbsemi, obsemi, $12,blue, $11, $13)
|
||||||
#line_with_mustache(cbuncache,obuncache,$15,green, $14, $16)
|
#line_with_mustache(cbuncache,obuncache,$15,green, $14, $16)
|
||||||
|
|
||||||
|
|
|
@ -80,7 +80,7 @@ define legend_common {
|
||||||
.ps +2
|
.ps +2
|
||||||
}
|
}
|
||||||
|
|
||||||
define legend_fifo_addition {
|
define legend_lru_addition {
|
||||||
xleft = $1
|
xleft = $1
|
||||||
xright = $2
|
xright = $2
|
||||||
yup = $3
|
yup = $3
|
||||||
|
@ -99,9 +99,9 @@ define legend_fifo_addition {
|
||||||
|
|
||||||
.ps -2
|
.ps -2
|
||||||
cy = cy - hdiff
|
cy = cy - hdiff
|
||||||
legend_line(cy,lstartx,lendx,tstartx,orange,"Basic FIFO")
|
legend_line(cy,lstartx,lendx,tstartx,orange,"Basic LRU")
|
||||||
cy = cy - hdiff
|
cy = cy - hdiff
|
||||||
legend_line(cy,lstartx,lendx,tstartx,green,"Efficient FIFO")
|
legend_line(cy,lstartx,lendx,tstartx,green,"Efficient LRU")
|
||||||
.ps +2
|
.ps +2
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1022,7 +1022,11 @@ the idea is to read (or write) memory only once you ask for it via a syscall.
|
||||||
Thus, you cannot access data from anywhere (by mistake or after an attack).
|
Thus, you cannot access data from anywhere (by mistake or after an attack).
|
||||||
|
|
||||||
These mechanisms could be used internally by DODB to prevent a data leak since memory is handled by the library.
|
These mechanisms could be used internally by DODB to prevent a data leak since memory is handled by the library.
|
||||||
However, the Crystal language doesn't provide a way to manage memory manually and this may be a problem for mlock and mprotect.
|
However, the Crystal language doesn't provide a way to manage memory manually and this may be a problem for mlock and mprotect\*[*].
|
||||||
|
.FOOTNOTE1
|
||||||
|
But again, the Crystal language is an implementation detail.
|
||||||
|
The working principle of DODB can be translated in basically any other language, including some enabling access to low-level memory operations.
|
||||||
|
.FOOTNOTE2
|
||||||
Depending on the plateform (the operating system), these syscalls may require the memory to be aligned with the memory pages.
|
Depending on the plateform (the operating system), these syscalls may require the memory to be aligned with the memory pages.
|
||||||
Thus, the implementation won't be easy.
|
Thus, the implementation won't be easy.
|
||||||
|
|
||||||
|
@ -1033,7 +1037,11 @@ Since this implementation of DODB is related to the Crystal language (which isn'
|
||||||
.
|
.
|
||||||
.SECTION Real-world usage: netlib.re
|
.SECTION Real-world usage: netlib.re
|
||||||
|
|
||||||
Netlibre is a service providing free domain names and a website to manage DNS zones.
|
Netlibre
|
||||||
|
.[
|
||||||
|
netlibre
|
||||||
|
.]
|
||||||
|
is a service providing free domain names and a website to manage DNS zones.
|
||||||
Domains can be shared and transfered between users, so organizations do not have to rely on a single person.
|
Domains can be shared and transfered between users, so organizations do not have to rely on a single person.
|
||||||
Resource records are managed with dedicated interfaces, users are helped as much as possible through many automatic zone verifications.
|
Resource records are managed with dedicated interfaces, users are helped as much as possible through many automatic zone verifications.
|
||||||
Resource records can be automatically updated via
|
Resource records can be automatically updated via
|
||||||
|
@ -1041,7 +1049,7 @@ Resource records can be automatically updated via
|
||||||
enabling users to host a service despite having a dynamic IP address.
|
enabling users to host a service despite having a dynamic IP address.
|
||||||
The resource can be updated with a trivial command:
|
The resource can be updated with a trivial command:
|
||||||
.SOURCE Ruby ps=9 vs=10
|
.SOURCE Ruby ps=9 vs=10
|
||||||
wget "https://netlib.re/token-update/<token>"
|
wget "https://www.netlib.re/token-update/<token>"
|
||||||
.SOURCE
|
.SOURCE
|
||||||
|
|
||||||
.B "The technical parts" .
|
.B "The technical parts" .
|
||||||
|
@ -1059,7 +1067,9 @@ Several "databases" are maintained:
|
||||||
Performance-wise, netlibre handles between 2 to 3k req/s with a single core, without any optimization.
|
Performance-wise, netlibre handles between 2 to 3k req/s with a single core, without any optimization.
|
||||||
Code is written in an almost naive\*[*] way and still performing fine.
|
Code is written in an almost naive\*[*] way and still performing fine.
|
||||||
.FOOTNOTE1
|
.FOOTNOTE1
|
||||||
Keep in mind that netlibre uses poll(2), a very old syscall to handle its event loop (from the 80's!); not newest and way faster event facilities such as epoll(2) and the like.
|
Keep in mind that netlibre (through
|
||||||
|
.B libipc )
|
||||||
|
uses poll(2), a very old syscall to handle its event loop (from the 80's!); not newest and way faster event facilities such as epoll(2) and the like.
|
||||||
.FOOTNOTE2
|
.FOOTNOTE2
|
||||||
|
|
||||||
Indexes with file-system representation enables quick debugging sessions and to perform a few basic tasks such as listing all the domains of a user which, in practice, is great to have at our fingertips with simple unix tools.
|
Indexes with file-system representation enables quick debugging sessions and to perform a few basic tasks such as listing all the domains of a user which, in practice, is great to have at our fingertips with simple unix tools.
|
||||||
|
@ -1078,9 +1088,9 @@ database should be an acceptable choice for most applications.
|
||||||
|
|
||||||
.TBD
|
.TBD
|
||||||
|
|
||||||
.APPENDIX FIFO vs Efficient FIFO
|
.APPENDIX LRU vs Efficient LRU
|
||||||
.ps -2
|
.ps -2
|
||||||
.so graphs/addition_fifo.grap
|
.so graphs/addition_lru.grap
|
||||||
.ps \n[PS]
|
.ps \n[PS]
|
||||||
|
|
||||||
.APPENDIX Common database performance
|
.APPENDIX Common database performance
|
||||||
|
@ -1090,7 +1100,7 @@ database enables to configure the number of allowed entries in the cache.
|
||||||
The following figures show the performance of the common database depending on the cache size.
|
The following figures show the performance of the common database depending on the cache size.
|
||||||
|
|
||||||
.ps -2
|
.ps -2
|
||||||
.so graphs/fifo_query_index.grap
|
.so graphs/lru_query_index.grap
|
||||||
.ps \n[PS]
|
.ps \n[PS]
|
||||||
.QP
|
.QP
|
||||||
This figure shows the request durations to retrieve data based on a basic index with a database containing up to 250k entries.
|
This figure shows the request durations to retrieve data based on a basic index with a database containing up to 250k entries.
|
||||||
|
@ -1108,7 +1118,7 @@ $+-$ 170 ns.
|
||||||
delim off
|
delim off
|
||||||
.EN
|
.EN
|
||||||
.ps -2
|
.ps -2
|
||||||
.so graphs/fifo_query_partition.grap
|
.so graphs/lru_query_partition.grap
|
||||||
.ps \n[PS]
|
.ps \n[PS]
|
||||||
.QP
|
.QP
|
||||||
This figure shows the request durations to retrieve data based on a partition containing up to 10k entries.
|
This figure shows the request durations to retrieve data based on a partition containing up to 10k entries.
|
||||||
|
@ -1116,7 +1126,7 @@ This figure shows the request durations to retrieve data based on a partition co
|
||||||
As we see in the figure, the duration for data retrieval grows almost linearly for databases with a sufficient cache size (starting with 10k entries).
|
As we see in the figure, the duration for data retrieval grows almost linearly for databases with a sufficient cache size (starting with 10k entries).
|
||||||
When the cache size is not sufficient, the requests are hundred times slower, which explain why the database with a cache size of one thousand entries isn't even represented in the graph, and why the 5k database has great results up to 5k partitions.
|
When the cache size is not sufficient, the requests are hundred times slower, which explain why the database with a cache size of one thousand entries isn't even represented in the graph, and why the 5k database has great results up to 5k partitions.
|
||||||
.ps -2
|
.ps -2
|
||||||
.so graphs/fifo_query_tag.grap
|
.so graphs/lru_query_tag.grap
|
||||||
.ps \n[PS]
|
.ps \n[PS]
|
||||||
.QP
|
.QP
|
||||||
This figure shows the request durations to retrieve data based on a tag containing up to 5k entries.
|
This figure shows the request durations to retrieve data based on a tag containing up to 5k entries.
|
||||||
|
|
Loading…
Add table
Reference in a new issue