Compare commits

...

9 Commits

Author SHA1 Message Date
Xuanzhe Han
79dec3aec0 update sieve results with same format as the others 2025-03-10 23:31:27 +00:00
Xuanzhe Han
5e2ce2f442 fix swapped tiered and readafterwrite results for weighted_friend_readonly 2025-03-10 23:24:58 +00:00
Xuanzhe Han
44dd3592b0 Revert "fix tiered results"
This reverts commit dbaf99af9e.
2025-03-10 23:24:00 +00:00
Xuanzhe Han
dbaf99af9e fix tiered results 2025-03-10 23:17:55 +00:00
isha28-uclaCS
db8c5a7130 Fixed Sieve result 2025-03-09 18:34:51 -07:00
isha28-uclaCS
e2d66d2b2a Results Sieve 2025-03-08 22:40:05 -08:00
isha28-uclaCS
88be00d210 Fixed Sieve key not found error, Added test results for sieve 2025-03-07 19:27:56 -08:00
Xuanzhe Han
bb38d1eeb4 reran prefetch test 2025-03-07 07:23:31 +00:00
root
b865e3e168 changed prefetch test 2025-03-07 05:55:57 +00:00
9 changed files with 297 additions and 99 deletions

View File

@@ -11,45 +11,49 @@ class Node:
class SieveCache(Cache):
def __init__(self, limit: int):
super().__init__(limit)
self.limit = limit # Fix: Store limit properly
self.limit = limit
self.cache = {} # Hash map for O(1) access
self.head = None
self.tail = None
self.hand = None
self.hand = None # Pointer for eviction
def print_cache_state(self):
#print("Current cache state:")
node = self.head
if not node:
#print("Cache is empty.")
return
for _ in range(len(self.cache)):
#print(f"Key: {node.key}, Value: {node.value}, Visited: {node.visited}")
node = node.next
def invalidate(self, key: str) -> bool:
"""Removes a specific key from cache if it exists."""
if key in self.cache:
node = self.cache.pop(key)
if node == self.head:
break
self.head = node.next
if node == self.tail:
self.tail = node.prev
if node.next:
node.next.prev = node.prev
if node.prev:
node.prev.next = node.next
return True # Successfully invalidated
return False # Key not found
def get(self, key: str) -> str:
if key in self.cache:
node = self.cache[key]
node.visited = True
#self.print_cache_state()
node.visited = True # Mark node as accessed
return node.value
self.print_cache_state()
return None
def put(self, key: str, val: str) -> bool:
if key in self.cache:
node = self.cache[key]
node.value = val
node.visited = True
#self.print_cache_state()
return False # No eviction needed
new_node = Node(key, val)
if len(self.cache) >= self.limit:
self.evict()
# Insert new node in circular doubly linked list
if not self.head:
self.head = self.tail = new_node
new_node.next = new_node.prev = new_node
@@ -62,54 +66,31 @@ class SieveCache(Cache):
self.cache[key] = new_node
if not self.hand:
self.hand = self.head
#self.print_cache_state()
self.hand = self.head # Initialize hand pointer
return False
def invalidate(self, key: str) -> bool:
if key in self.cache:
node = self.cache.pop(key)
if node == self.head:
self.head = node.next
if node == self.tail:
self.tail = node.prev
if node.next:
node.next.prev = node.prev
if node.prev:
node.prev.next = node.next
#self.print_cache_state()
return True
return False
def next_hand(self):
self.hand = self.hand.next if self.hand.next else self.head
def evict(self):
if not self.hand:
return # No elements to evict
# Find the first unvisited node to evict
while self.hand.visited:
self.hand.visited = False
self.next_hand()
self.hand.visited = False # Reset visited flag
self.hand = self.hand.next # Move to next node
obj_to_evict = self.hand
self.next_hand()
self.hand = self.hand.next # Move hand forward
# Remove from cache dictionary if exists
if obj_to_evict.key in self.cache:
del self.cache[obj_to_evict.key]
# Evict the node from linked list
if obj_to_evict == self.head:
self.head = obj_to_evict.next
if obj_to_evict == self.tail:
self.tail = obj_to_evict.prev
if obj_to_evict.next:
obj_to_evict.next.prev = obj_to_evict.prev
if obj_to_evict.prev:
obj_to_evict.prev.next = obj_to_evict.next
del self.cache[obj_to_evict.key]
#self.print_cache_state()
# Basic API demo for future testing
if __name__ == "__main__":
cache = SeiveCache(3)
cache.put("a", "1")
cache.put("b", "2")
cache.put("c", "3")
cache.get("a")
cache.put("d", "4") # Should evict "b"
assert "b" not in cache.cache, f"Eviction failed, cache contents: {cache.cache.keys()}"
print("SeiveCache eviction test passed.")
obj_to_evict.prev.next = obj_to_evict.next
obj_to_evict.next.prev = obj_to_evict.prev

View File

@@ -39,10 +39,34 @@ average cache miss response time (ms): 12.493911461160938
cache throughput (requests / s) : 102.16957445113012
real throughput (requests / s) : 48.726267135940624
--- weighted_friend_readonly Results ---
hits: 1275 misses: 8725 ratio: 0.1275
average response time (ms) : 11.204515027999879
average cache hit response time (ms) : 0.0013659982120289521
average cache miss response time (ms): 12.841651419172313
cache throughput (requests / s) : 89.249735263063
real throughput (requests / s) : 80.8252530462673
--- weighted_friend_readonly 0.25 Results ---
hits: 634 misses: 9366 ratio: 0.0634
average response time (ms) : 12.046342158317566
average cache hit response time (ms) : 0.0014511944743737062
average cache miss response time (ms): 12.861680709574943
cache throughput (requests / s) : 83.01275082988872
real throughput (requests / s) : 75.60957264263929
--- weighted_friend_readonly 0.50 Results ---
hits: 1069 misses: 8931 ratio: 0.1069
average response time (ms) : 11.471518325805665
average cache hit response time (ms) : 0.0013089603748803278
average cache miss response time (ms): 12.844450115263228
cache throughput (requests / s) : 87.1724188201363
real throughput (requests / s) : 79.16835820770777
--- weighted_friend_readonly 0.75 Results ---
hits: 2255 misses: 7745 ratio: 0.2255
average response time (ms) : 9.954997634887695
average cache hit response time (ms) : 0.0012764645257175894
average cache miss response time (ms): 12.853079137685146
cache throughput (requests / s) : 100.4520580191259
real throughput (requests / s) : 90.12648776249651
--- weighted_friend_readonly 1 Results ---
hits: 9992 misses: 8 ratio: 0.9992
average response time (ms) : 0.011115074157714844
average cache hit response time (ms) : 0.0008463239173492114
average cache miss response time (ms): 12.83678412437439
cache throughput (requests / s) : 89967.91076791077
real throughput (requests / s) : 1050.3783705054095

View File

@@ -39,10 +39,34 @@ average cache miss response time (ms): N/A
cache throughput (requests / s) : 441.25553420116205
real throughput (requests / s) : 77.73575713810418
--- weighted_friend_readonly Results ---
--- weighted_friend_readonly 0.25 Results ---
hits: 10000 misses: 0 ratio: 1.0
average response time (ms) : 2.7157030582427977
average cache hit response time (ms) : 2.7157030582427977
average response time (ms) : 2.762448763847351
average cache hit response time (ms) : 2.762448763847351
average cache miss response time (ms): N/A
cache throughput (requests / s) : 368.228771170237
real throughput (requests / s) : 267.4051580450448
cache throughput (requests / s) : 361.9976642054595
real throughput (requests / s) : 264.15171149841484
--- weighted_friend_readonly 0.50 Results ---
hits: 10000 misses: 0 ratio: 1.0
average response time (ms) : 2.631771683692932
average cache hit response time (ms) : 2.631771683692932
average cache miss response time (ms): N/A
cache throughput (requests / s) : 379.97217091293743
real throughput (requests / s) : 273.36179952669863
--- weighted_friend_readonly 0.75 Results ---
hits: 10000 misses: 0 ratio: 1.0
average response time (ms) : 2.3204839706420897
average cache hit response time (ms) : 2.3204839706420897
average cache miss response time (ms): N/A
cache throughput (requests / s) : 430.94458425553995
real throughput (requests / s) : 297.5298540772206
--- weighted_friend_readonly 1 Results ---
hits: 10000 misses: 0 ratio: 1.0
average response time (ms) : 0.007048773765563965
average cache hit response time (ms) : 0.007048773765563965
average cache miss response time (ms): N/A
cache throughput (requests / s) : 141868.64740721197
real throughput (requests / s) : 1066.3182833103006

View File

@@ -39,10 +39,34 @@ average cache miss response time (ms): 12.357432702008415
cache throughput (requests / s) : 80.92295739045157
real throughput (requests / s) : 43.34797667618127
--- weighted_friend_readonly Results ---
--- weighted_friend_readonly 0.25 Results ---
hits: 0 misses: 10000 ratio: 0.0
average response time (ms) : 12.757544946670532
average response time (ms) : 12.735849499702454
average cache hit response time (ms) : N/A
average cache miss response time (ms): 12.757544946670532
cache throughput (requests / s) : 78.38498740786174
real throughput (requests / s) : 71.68974303163175
average cache miss response time (ms): 12.735849499702454
cache throughput (requests / s) : 78.51851578674534
real throughput (requests / s) : 71.97159807797185
--- weighted_friend_readonly 0.50 Results ---
hits: 0 misses: 10000 ratio: 0.0
average response time (ms) : 12.631608128547668
average cache hit response time (ms) : N/A
average cache miss response time (ms): 12.631608128547668
cache throughput (requests / s) : 79.16648377810118
real throughput (requests / s) : 72.52127479757786
--- weighted_friend_readonly 0.75 Results ---
hits: 0 misses: 10000 ratio: 0.0
average response time (ms) : 12.301788067817688
average cache hit response time (ms) : N/A
average cache miss response time (ms): 12.301788067817688
cache throughput (requests / s) : 81.28899591564806
real throughput (requests / s) : 74.36930521285352
--- weighted_friend_readonly 1 Results ---
hits: 0 misses: 10000 ratio: 0.0
average response time (ms) : 10.0695650100708
average cache hit response time (ms) : N/A
average cache miss response time (ms): 10.0695650100708
cache throughput (requests / s) : 99.3091557579575
real throughput (requests / s) : 89.69346607705592

View File

@@ -39,10 +39,34 @@ average cache miss response time (ms): 12.47343186892525
cache throughput (requests / s) : 101.78468675708436
real throughput (requests / s) : 48.92688928507726
--- weighted_friend_readonly Results ---
hits: 2838 misses: 7162 ratio: 0.2838
average response time (ms) : 9.23909306526184
average cache hit response time (ms) : 0.0012533357229091652
average cache miss response time (ms): 12.899661223937
cache throughput (requests / s) : 108.23573189882784
real throughput (requests / s) : 96.54757454253809
--- weighted_friend_readonly 0.25 Results ---
hits: 1609 misses: 8391 ratio: 0.1609
average response time (ms) : 10.815512228012086
average cache hit response time (ms) : 0.0012467706181233976
average cache miss response time (ms): 12.889180815897543
cache throughput (requests / s) : 92.45979098521182
real throughput (requests / s) : 83.71821192504922
--- weighted_friend_readonly 0.50 Results ---
hits: 2792 misses: 7208 ratio: 0.2792
average response time (ms) : 9.297505378723145
average cache hit response time (ms) : 0.0012284705153850566
average cache miss response time (ms): 12.89839399244624
cache throughput (requests / s) : 107.55573234606003
real throughput (requests / s) : 96.20708400138871
--- weighted_friend_readonly 0.75 Results ---
hits: 4381 misses: 5619 ratio: 0.4381
average response time (ms) : 7.246287417411804
average cache hit response time (ms) : 0.0011703244792465423
average cache miss response time (ms): 12.89513204886536
cache throughput (requests / s) : 138.00170244381164
real throughput (requests / s) : 120.23923821573455
--- weighted_friend_readonly 1 Results ---
hits: 9997 misses: 3 ratio: 0.9997
average response time (ms) : 0.004515457153320313
average cache hit response time (ms) : 0.0006464036378882415
average cache miss response time (ms): 12.897491455078125
cache throughput (requests / s) : 221461.51896595422
real throughput (requests / s) : 1070.4467798603782

View File

@@ -39,10 +39,34 @@ average cache miss response time (ms): 12.488399400919109
cache throughput (requests / s) : 277.7341979526512
real throughput (requests / s) : 60.02808337161936
--- weighted_friend_readonly Results ---
hits: 1275 misses: 8725 ratio: 0.1275
average response time (ms) : 11.231861686706543
average cache hit response time (ms) : 0.0015234479717179841
average cache miss response time (ms): 12.872971286063208
cache throughput (requests / s) : 89.03243539613284
real throughput (requests / s) : 80.69348254832964
--- weighted_friend_readonly 0.25 Results ---
hits: 635 misses: 9365 ratio: 0.0635
average response time (ms) : 12.026190519332886
average cache hit response time (ms) : 0.0014263813889871433
average cache miss response time (ms): 12.841537580474837
cache throughput (requests / s) : 83.15185082029382
real throughput (requests / s) : 75.84771942953694
--- weighted_friend_readonly 0.50 Results ---
hits: 1072 misses: 8928 ratio: 0.1072
average response time (ms) : 11.465663266181945
average cache hit response time (ms) : 0.001328649805552924
average cache miss response time (ms): 12.842205236248645
cache throughput (requests / s) : 87.21693431809628
real throughput (requests / s) : 79.27228928100207
--- weighted_friend_readonly 0.75 Results ---
hits: 2253 misses: 7747 ratio: 0.2253
average response time (ms) : 9.959305834770202
average cache hit response time (ms) : 0.0012218290786980208
average cache miss response time (ms): 12.855338268592709
cache throughput (requests / s) : 100.40860443393278
real throughput (requests / s) : 90.2328882960655
--- weighted_friend_readonly 1 Results ---
hits: 9992 misses: 8 ratio: 0.9992
average response time (ms) : 0.01112067699432373
average cache hit response time (ms) : 0.0008874601894039646
average cache miss response time (ms): 12.792408466339111
cache throughput (requests / s) : 89922.582996559
real throughput (requests / s) : 1052.9166753169109

71
tests/results_sieve Normal file
View File

@@ -0,0 +1,71 @@
--- random_read Results ---
hits: 493 misses: 9507 ratio: 0.0493
average response time (ms) : 14.870552372932433
average cache hit response time (ms) : 0.0013246013958604051
average cache miss response time (ms): 15.64161888091261
cache throughput (requests / s) : 67.24699761793734
real throughput (requests / s) : 59.162448469313915
--- read_heavy Results ---
hits: 431 misses: 7594 ratio: 0.05370716510903427
average response time (ms) : 13.949467875875788
average cache hit response time (ms) : 0.0010416291982557823
average cache miss response time (ms): 14.74111545453236
cache throughput (requests / s) : 71.68732233359239
real throughput (requests / s) : 55.342634534026395
--- write_heavy Results ---
hits: 106 misses: 1912 ratio: 0.05252725470763132
average response time (ms) : 13.415291122686048
average cache hit response time (ms) : 0.0009986589539725825
average cache miss response time (ms): 14.15897051659588
cache throughput (requests / s) : 74.54180389040839
real throughput (requests / s) : 24.099083879788104
--- frequent_users Results ---
hits: 7084 misses: 2916 ratio: 0.7084
average response time (ms) : 4.243493890762329
average cache hit response time (ms) : 0.0009342211912339316
average cache miss response time (ms): 14.550178629871258
cache throughput (requests / s) : 235.65486972348472
real throughput (requests / s) : 168.06057547599738
--- frequent_after_write Results ---
hits: 1008 misses: 3922 ratio: 0.20446247464503042
average response time (ms) : 11.290647437074364
average cache hit response time (ms) : 0.0008995097780984545
average cache miss response time (ms): 14.19224506856713
cache throughput (requests / s) : 88.56888017921497
real throughput (requests / s) : 49.823185354533955
--- weighted_friend_readonly 0.25 Results ---
hits: 723 misses: 9277 ratio: 0.0723
average response time (ms) : 13.950133323669434
average cache hit response time (ms) : 0.001212208432610434
average cache miss response time (ms): 15.037237987495695
cache throughput (requests / s) : 71.68390271247678
real throughput (requests / s) : 62.85067778546538
--- weighted_friend_readonly 0.5 Results ---
hits: 1211 misses: 8789 ratio: 0.1211
average response time (ms) : 13.146774506568908
average cache hit response time (ms) : 0.001021990787874658
average cache miss response time (ms): 14.958073436664577
cache throughput (requests / s) : 76.06428477953591
real throughput (requests / s) : 66.63640929923034
--- weighted_friend_readonly 0.75 Results ---
hits: 2297 misses: 7703 ratio: 0.2297
average response time (ms) : 11.466057205200196
average cache hit response time (ms) : 0.0009958153451895475
average cache miss response time (ms): 14.884887013391413
cache throughput (requests / s) : 87.21393780823547
real throughput (requests / s) : 75.28993183954742
--- weighted_friend_readonly 1 Results ---
hits: 9999 misses: 1 ratio: 0.9999
average response time (ms) : 0.0020474910736083983
average cache hit response time (ms) : 0.0007939655812505079
average cache miss response time (ms): 12.536048889160156
cache throughput (requests / s) : 488402.6176669228
real throughput (requests / s) : 790.3142309599609

View File

@@ -39,10 +39,34 @@ average cache miss response time (ms): 12.596626629622769
cache throughput (requests / s) : 107.27478709180934
real throughput (requests / s) : 49.79781897651969
--- weighted_friend_readonly Results ---
hits: 4471 misses: 5529 ratio: 0.4471
average response time (ms) : 7.232451653480529
average cache hit response time (ms) : 0.0870680014470151
average cache miss response time (ms): 13.01053273654109
cache throughput (requests / s) : 138.26570130182094
real throughput (requests / s) : 120.26334295113243
--- weighted_friend_readonly 0.25 Results ---
hits: 2163 misses: 7837 ratio: 0.2163
average response time (ms) : 10.187475109100342
average cache hit response time (ms) : 0.08817761792003474
average cache miss response time (ms): 12.974865752640344
cache throughput (requests / s) : 98.15974903405778
real throughput (requests / s) : 88.35527295489469
--- weighted_friend_readonly 0.50 Results ---
hits: 2766 misses: 7234 ratio: 0.2766
average response time (ms) : 9.404127931594848
average cache hit response time (ms) : 0.07571936170863484
average cache miss response time (ms): 12.97094823907415
cache throughput (requests / s) : 106.33628203209798
real throughput (requests / s) : 95.07378087157565
--- weighted_friend_readonly 0.75 Results ---
hits: 4087 misses: 5913 ratio: 0.4087
average response time (ms) : 7.68894898891449
average cache hit response time (ms) : 0.05545212465887814
average cache miss response time (ms): 12.965137333952995
cache throughput (requests / s) : 130.05678688228338
real throughput (requests / s) : 114.06672701630119
--- weighted_friend_readonly 1 Results ---
hits: 9992 misses: 8 ratio: 0.9992
average response time (ms) : 0.011892271041870118
average cache hit response time (ms) : 0.0006238444506215324
average cache miss response time (ms): 14.086157083511353
cache throughput (requests / s) : 84088.22810035326
real throughput (requests / s) : 1066.9048383247582

View File

@@ -9,7 +9,7 @@ from utils import print_report
baseurl = "http://localhost:8000"
chance_of_selecting_friend = 0.7
chance_of_selecting_friend = 1
user_friends = json.loads(requests.get(baseurl + "/users_and_friends").content)
user_ids = json.loads(requests.get(baseurl + "/users").content)["ids"]
@@ -32,6 +32,7 @@ hits = []
start = time.time()
curr_user = generate_random()
last_user = curr_user
for i in tqdm(range(10000)):
url = baseurl + "/user/" + curr_user
response = requests.get(url)
@@ -39,9 +40,10 @@ for i in tqdm(range(10000)):
times.append(content["time_ms"])
hits.append(content["source"] == "cache")
if fetch_friend(chance_of_selecting_friend):
curr_user = generate_random_friend(curr_user)
curr_user = generate_random_friend(last_user)
else:
curr_user = generate_random()
last_user = curr_user
end = time.time()
print_report(hits, times, end - start)