This is just good practice to avoid placing two structures heavily
accessed by different CPUs on the same cache line
StgTRecChunk *free_trec_chunks;
StgTRecHeader *free_trec_headers;
nat transaction_tokens;
-
-}; // typedef Capability, defined in RtsAPI.h
+} // typedef Capability is defined in RtsAPI.h
+ // Capabilities are stored in an array, so make sure that adjacent
+ // Capabilities don't share any cache-lines:
+ ATTRIBUTE_ALIGNED(64);
#if defined(THREADED_RTS)
#endif
Task *task;
- task = stgMallocBytes(sizeof(Task), "newTask");
+#define ROUND_TO_CACHE_LINE(x) ((((x)+63) / 64) * 64)
+ task = stgMallocBytes(ROUND_TO_CACHE_LINE(sizeof(Task)), "newTask");
task->cap = NULL;
task->stopped = rtsFalse;