@@ -76,14 +76,12 @@ namespace alaska {
76
76
77
77
// And set the owner
78
78
heap->set_owner (this );
79
- log_info (" ThreadCache::halloc got new heap: %p. Avail = %lu" , heap, heap->available ());
80
79
81
80
// Swap the heaps in the thread cache
82
81
if (size_classes[cls] != nullptr ) runtime.heap .put_page (size_classes[cls]);
83
82
size_classes[cls] = heap;
84
83
85
84
ALASKA_ASSERT (heap->available () > 0 , " New heap must have space" );
86
- log_info (" new heaps avail = %lu" , heap->available ());
87
85
return heap;
88
86
}
89
87
@@ -97,7 +95,6 @@ namespace alaska {
97
95
this ->locality_page = lp;
98
96
99
97
ALASKA_ASSERT (lp->available () > 0 , " New heap must have space" );
100
- log_info (" new heaps avail = %lu" , heap->available ());
101
98
return lp;
102
99
}
103
100
@@ -240,43 +237,65 @@ namespace alaska {
240
237
}
241
238
242
239
243
-
244
240
bool ThreadCache::localize (void *handle, uint64_t epoch) {
245
241
alaska::Mapping *m = alaska::Mapping::from_handle_safe (handle);
246
- if (unlikely (m == nullptr )) return false ;
242
+ if (unlikely (m == nullptr )) {
243
+ printf (" %p No because not handle\n " , handle);
244
+ return false ;
245
+ }
247
246
247
+ return localize (*m, epoch);
248
+ }
248
249
249
- void *ptr = m->get_pointer ();
250
+
251
+ bool ThreadCache::localize (alaska::Mapping &m, uint64_t epoch) {
252
+ if (m.is_pinned () or m.is_free ()) {
253
+ return false ;
254
+ }
255
+ void *ptr = m.get_pointer ();
250
256
auto *source_page = this ->runtime .heap .pt .get_unaligned (ptr);
251
257
// if there wasn't a page for some reason, we can't localize.
252
- if (unlikely (source_page == nullptr )) return false ;
258
+ if (unlikely (source_page == nullptr )) {
259
+ // printf("no because no page for %p\n", (void*)m.encode());
260
+ return false ;
261
+ }
253
262
// if the page has recently been localized into, don't try again
254
- if (unlikely (!source_page->should_localize_from (epoch))) return false ;
255
-
263
+ if (unlikely (!source_page->should_localize_from (epoch))) {
264
+ // printf("no because shouldnt localize\n");
265
+ return false ;
266
+ }
256
267
257
- auto size = source_page->size_of (ptr);
258
- if (locality_page == nullptr || locality_page->available () < size * 2 ) {
259
- locality_page = new_locality_page (size);
268
+ auto size = source_page->size_of (ptr);
269
+ if (locality_page == nullptr or locality_page->available () < size * 2 ) {
270
+ locality_page = new_locality_page (size + 32 );
260
271
}
261
272
262
273
// If we are moving an object within the locality page, don't.
263
274
if (unlikely (source_page == locality_page)) return false ;
264
275
276
+ // void *dst = NULL;
265
277
266
- void *d = locality_page->alloc (*m, size);
278
+ // while (dst == NULL) {
279
+ // dst = locality_page->alloc(m, size);
280
+ // if (dst == nullptr) locality_page = new_locality_page(size);
281
+ // }
282
+
283
+ void *d = locality_page->alloc (m, size);
267
284
locality_page->last_localization_epoch = epoch;
268
285
memcpy (d, ptr, size);
286
+ memset (ptr, 0xFA , size);
269
287
270
288
// TODO: invalidate!
271
- m->set_pointer (d);
272
-
273
- if (source_page->is_owned_by (this )) {
274
- log_trace (" Free handle %p locally (ptr = %p)" , &m, ptr);
275
- source_page->release_local (*m, ptr);
276
- } else {
277
- log_trace (" Free handle %p remotely (ptr = %p)" , &m, ptr);
278
- source_page->release_remote (*m, ptr);
279
- }
289
+ m.set_pointer (d);
290
+
291
+ // if (source_page->is_owned_by(this)) {
292
+ // log_trace("Free handle %p locally (ptr = %p)", &m, ptr);
293
+ // source_page->release_local(m, ptr);
294
+ // } else {
295
+ // log_trace("Free handle %p remotely (ptr = %p)", &m, ptr);
296
+ // source_page->release_remote(m, ptr);
297
+ // }
298
+ source_page->release_remote (m, ptr);
280
299
281
300
return true ;
282
301
}
0 commit comments