From 12a844ad903c6e82d4baad156bcfb1b9c98e5ca6 Mon Sep 17 00:00:00 2001 From: Michael Mueller Date: Thu, 18 Sep 2025 15:53:21 +0200 Subject: [PATCH] Removed false-sharing on cacheline holding a cell's yield flag. --- repos/base-tukija/include/tukija/syscall-generic.h | 6 +++--- repos/base-tukija/src/core/include/cell_component.h | 2 +- repos/base-tukija/src/core/platform.cc | 2 +- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/repos/base-tukija/include/tukija/syscall-generic.h b/repos/base-tukija/include/tukija/syscall-generic.h index be1b6d7d34..5b21a60721 100644 --- a/repos/base-tukija/include/tukija/syscall-generic.h +++ b/repos/base-tukija/include/tukija/syscall-generic.h @@ -219,7 +219,7 @@ namespace Tukija { */ struct Worker { unsigned long yield_flag{0}; /* This flag will be set if a yield request has been filed */ - unsigned long padding[3]; + unsigned long padding[7]; }; @@ -329,7 +329,7 @@ namespace Tukija { static Cip * cip() { - return reinterpret_cast(0x7fffbffd7000); + return reinterpret_cast(0x7fffbffd3000); } }; @@ -1087,7 +1087,7 @@ namespace Tukija { public: - enum { DEFAULT_QUANTUM = 1000, DEFAULT_PRIORITY = 64 }; + enum { DEFAULT_QUANTUM = 1500, DEFAULT_PRIORITY = 64 }; Qpd(mword_t quantum = DEFAULT_QUANTUM, mword_t priority = DEFAULT_PRIORITY) diff --git a/repos/base-tukija/src/core/include/cell_component.h b/repos/base-tukija/src/core/include/cell_component.h index b47323075f..942beffc34 100644 --- a/repos/base-tukija/src/core/include/cell_component.h +++ b/repos/base-tukija/src/core/include/cell_component.h @@ -91,7 +91,7 @@ class Ealan::Cell_component : public Genode::Rpc_object, * Only a region map needs to be allocated here, because the kernel will already * allocate a frame for this cell CIP during the syscall. */ - Core::platform().region_alloc().alloc_aligned(4 * Tukija::PAGE_SIZE_BYTE, Tukija::PAGE_SIZE_LOG2).with_result( + Core::platform().region_alloc().alloc_aligned(8 * Tukija::PAGE_SIZE_BYTE, Tukija::PAGE_SIZE_LOG2).with_result( [&](void *ptr) { _cip = static_cast(ptr); }, [&](Genode::Range_allocator::Alloc_error) { throw Genode::Out_of_ram(); }); diff --git a/repos/base-tukija/src/core/platform.cc b/repos/base-tukija/src/core/platform.cc index b9c868af81..0b7e1a818e 100644 --- a/repos/base-tukija/src/core/platform.cc +++ b/repos/base-tukija/src/core/platform.cc @@ -432,7 +432,7 @@ Core::Platform::Platform() region_alloc().remove_range((addr_t)_tip, get_page_size() * 128); /* exclude CIP */ - region_alloc().remove_range((addr_t)Tukija::Cip::cip(), get_page_size() * 4); + region_alloc().remove_range((addr_t)Tukija::Cip::cip(), get_page_size() * 8); /* sanity checks */ addr_t check [] = {