diff --git a/repos/ealanos/lib/mk/mxtasking.mk b/repos/ealanos/lib/mk/mxtasking.mk
index 34df5243a7..4959424348 100644
--- a/repos/ealanos/lib/mk/mxtasking.mk
+++ b/repos/ealanos/lib/mk/mxtasking.mk
@@ -13,9 +13,11 @@ vpath %.h ${INC_DIR}
CUSTOM_CXX = /usr/local/genode/tool/bin/clang++
CUSTOM_CC = /usr/local/genode/tool/bin/clang
+CUSTOM_CXX_LIB := $(CROSS_DEV_PREFIX)g++
+CUSTOM_LD := $(CROSS_DEV_PREFIX)/g++
CC_OPT += --target=x86_64-genode --sysroot=/does/not/exist --gcc-toolchain=$(GENODE_GCC_TOOLCHAIN_DIR) -DCLANG_CXX11_ATOMICS
-CC_OPT += -std=c++20 -pedantic -Wall \
+CC_OPT += -std=c++20 -pedantic -femulated-tls -Wall \
-Wno-invalid-offsetof -Wcast-align -Wcast-qual -Wctor-dtor-privacy -Wdisabled-optimization \
-Wformat=2 -Winit-self -Wmissing-declarations -Wmissing-include-dirs -Woverloaded-virtual \
-Wredundant-decls -Wshadow -Wsign-promo -Wstrict-overflow=5 -Wswitch-default -Wundef \
@@ -24,5 +26,6 @@ CC_OPT += -std=c++20 -pedantic -Wall \
CC_OPT += $(addprefix -I ,$(INC_DIR))
CC_CXX_WARN_STRICT =
+
LIBS += base libm libc stdcxx
EXT_OBJECTS += /usr/local/genode/tool/lib/clang/14.0.5/lib/linux/libclang_rt.builtins-x86_64.a /usr/local/genode/tool/lib/libatomic.a
diff --git a/repos/ealanos/run/hello_world.run b/repos/ealanos/run/hello_world.run
new file mode 100644
index 0000000000..6a3adf2e52
--- /dev/null
+++ b/repos/ealanos/run/hello_world.run
@@ -0,0 +1,60 @@
+set build_components {
+ core init hoitaja timer lib/ld lib/vfs lib/libm lib/libc lib/stdcxx lib/mxtasking app/hello_world
+}
+
+build $build_components
+create_boot_directory
+
+install_config {
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 2022-07-20 14:30
+
+
+
+
+
+
+
+}
+
+build_boot_image [build_artifacts]
+
+append qemu_args " -nographic "
+run_genode_until forever
\ No newline at end of file
diff --git a/repos/ealanos/src/app/hello_world/main.cpp b/repos/ealanos/src/app/hello_world/main.cpp
new file mode 100644
index 0000000000..315e3ec62d
--- /dev/null
+++ b/repos/ealanos/src/app/hello_world/main.cpp
@@ -0,0 +1,59 @@
+#include "mx/util/core_set.h"
+#include
+#include
+#include
+
+#include
+
+class HelloWorldTask : public mx::tasking::TaskInterface
+{
+public:
+ constexpr HelloWorldTask() = default;
+ ~HelloWorldTask() override = default;
+
+ mx::tasking::TaskResult execute(const std::uint16_t core_id) override
+ {
+ std::cout << "Hello World" << std::endl;
+
+ // Stop MxTasking runtime after this task.
+ return mx::tasking::TaskResult::make_stop(core_id);
+ }
+};
+
+int mx_main(Libc::Env &env)
+{
+ unsigned num_cores = env.cpu().affinity_space().total();
+ // Define which cores will be used (1 core here).
+ const auto cores = mx::util::core_set::build(num_cores, mx::util::core_set::NUMAAware);
+
+ { // Scope for the MxTasking runtime.
+
+ std::size_t qouta = env.pd().avail_ram().value;
+ std::cout << "Remaining memory quota " << qouta << std::endl;
+ // Create a runtime for the given cores.
+ mx::tasking::runtime_guard _{env, true,cores};
+
+ std::cout << "MxTasking initialized." << std::endl;
+ // Create an instance of the HelloWorldTask with the current core as first
+ // parameter. The core is required for memory allocation.
+ auto *hello_world_task = mx::tasking::runtime::new_task(cores.front());
+
+ std::cout << "task object is at " << static_cast(hello_world_task) << std::endl;
+ // Annotate the task to run on the first core.
+ hello_world_task->annotate(cores.front());
+
+ // Schedule the task.
+ mx::tasking::runtime::spawn(*hello_world_task);
+ std::cout << "Remaining memory quota " << env.pd().avail_ram().value << std::endl;
+ std::cout << "Consumed RAM qouta " << (qouta - env.pd().avail_ram().value) << std::endl;
+ }
+
+ return 0;
+}
+
+void Libc::Component::construct(Libc::Env &env)
+{
+ Libc::with_libc([&]() {
+ mx_main(env);
+ });
+}
diff --git a/repos/ealanos/src/app/hello_world/target.mk b/repos/ealanos/src/app/hello_world/target.mk
new file mode 100644
index 0000000000..1f4e32df6d
--- /dev/null
+++ b/repos/ealanos/src/app/hello_world/target.mk
@@ -0,0 +1,27 @@
+TARGET = hello_mxtask
+SRC_CC = main.cc
+LIBS += base libm libc stdcxx mxtasking
+
+INC_DIR += $(REP_DIR)/src/lib
+INC_DIR += $(REP_DIR)/include
+INC_DIR += $(REP_DIR)/include/ealanos/util
+INC_DIR += $(call select_from_repositories,src/lib/libc)
+INC_DIR += $(call select_from_repositories,src/lib/libc)/spec/x86_64
+vpath %.h ${INC_DIR}
+
+CC_CXX_WARN_STRICT =
+CC_OPT += $(addprefix -I, $(INC_DIR))
+CUSTOM_CXX_LIB := $(CROSS_DEV_PREFIX)g++
+CUSTOM_CXX = /usr/local/genode/tool/bin/clang++
+CUSTOM_CC = /usr/local/genode/tool/bin/clang
+GENODE_GCC_TOOLCHAIN_DIR := /usr/local/genode/tool/23.05
+
+LD_OPT += --allow-multiple-definition
+
+CC_OPT += --target=x86_64-genode --sysroot=/does/not/exist --gcc-toolchain=$(GENODE_GCC_TOOLCHAIN_DIR) -DCLANG_CXX11_ATOMICS --rtlib=libgcc -DCLANG_DEFAULT_UNWINDLIB="libunwind" -femulated-tls
+CC_OPT += -std=c++20 -pedantic -Wall \
+ -Wno-invalid-offsetof -Wcast-align -Wcast-qual -Wctor-dtor-privacy -Wdisabled-optimization \
+ -Wformat=2 -Winit-self -Wmissing-declarations -Wmissing-include-dirs -Woverloaded-virtual \
+ -Wredundant-decls -Wshadow -Wsign-promo -Wstrict-overflow=5 -Wswitch-default -Wundef \
+ -Wno-unused -Wold-style-cast -Wno-uninitialized -O2 -g
+EXT_OBJECTS += /usr/local/genode/tool/lib/libatomic.a /usr/local/genode/tool/23.05/lib/gcc/x86_64-pc-elf/12.3.0/libgcc_eh.a /usr/local/genode/tool/lib/clang/14.0.5/lib/linux/libclang_rt.builtins-x86_64.a
diff --git a/repos/ealanos/src/lib/mx/memory/config.h b/repos/ealanos/src/lib/mx/memory/config.h
index cd5037b3ae..387cabf725 100644
--- a/repos/ealanos/src/lib/mx/memory/config.h
+++ b/repos/ealanos/src/lib/mx/memory/config.h
@@ -26,7 +26,7 @@ public:
*/
static constexpr bool local_garbage_collection() { return false; }
- static constexpr std::size_t min_block_size() { return 2048; }
+ static constexpr std::size_t min_block_size() { return 64; }
static constexpr std::size_t superblock_cutoff() { return 1024 * min_block_size();}
};
} // namespace mx::memory
diff --git a/repos/ealanos/src/lib/mx/memory/dynamic_size_allocator.cpp b/repos/ealanos/src/lib/mx/memory/dynamic_size_allocator.cpp
index 662962e43e..70983dea5b 100644
--- a/repos/ealanos/src/lib/mx/memory/dynamic_size_allocator.cpp
+++ b/repos/ealanos/src/lib/mx/memory/dynamic_size_allocator.cpp
@@ -1,4 +1,5 @@
#include "dynamic_size_allocator.h"
+#include "ealanos/memory/hamstraaja.h"
#include "global_heap.h"
#include
#include
@@ -6,6 +7,8 @@
using namespace mx::memory::dynamic;
+Ealan::Memory::Hamstraaja *mx::memory::GlobalHeap::_heap;
+
AllocationBlock::AllocationBlock(const std::uint32_t id, const std::uint8_t numa_node_id, const std::size_t size)
: _id(id), _numa_node_id(numa_node_id), _size(size), _available_size(size)
{
diff --git a/repos/ealanos/src/lib/mx/memory/dynamic_size_allocator.d b/repos/ealanos/src/lib/mx/memory/dynamic_size_allocator.d
index 3d026a23a2..487441b75a 100644
--- a/repos/ealanos/src/lib/mx/memory/dynamic_size_allocator.d
+++ b/repos/ealanos/src/lib/mx/memory/dynamic_size_allocator.d
@@ -33,33 +33,6 @@
/home/mml/genode-igb/contrib/stdcxx-4eddc2a55a80ed5d3a50fee3f5c25e7ac42afd72/include/stdcxx/std/optional \
/home/mml/genode-igb/contrib/stdcxx-4eddc2a55a80ed5d3a50fee3f5c25e7ac42afd72/include/stdcxx/std/utility \
/home/mml/genode-igb/contrib/stdcxx-4eddc2a55a80ed5d3a50fee3f5c25e7ac42afd72/include/stdcxx/std/vector \
- /home/mml/genode-igb/repos/ealanos/src/lib/mx/memory/global_heap.h \
- /home/mml/genode-igb/repos/ealanos/src/lib/mx/memory/alignment_helper.h \
- /home/mml/genode-igb/repos/ealanos/include/ealanos/util/json.hpp \
- /home/mml/genode-igb/contrib/stdcxx-4eddc2a55a80ed5d3a50fee3f5c25e7ac42afd72/include/stdcxx/std/algorithm \
- /home/mml/genode-igb/contrib/stdcxx-4eddc2a55a80ed5d3a50fee3f5c25e7ac42afd72/include/stdcxx/c_global/ciso646 \
- /home/mml/genode-igb/contrib/stdcxx-4eddc2a55a80ed5d3a50fee3f5c25e7ac42afd72/include/stdcxx/c_global/cstddef \
- /home/mml/genode-igb/contrib/stdcxx-4eddc2a55a80ed5d3a50fee3f5c25e7ac42afd72/include/stdcxx/initializer_list \
- /home/mml/genode-igb/contrib/stdcxx-4eddc2a55a80ed5d3a50fee3f5c25e7ac42afd72/include/stdcxx/std/iosfwd \
- /home/mml/genode-igb/contrib/stdcxx-4eddc2a55a80ed5d3a50fee3f5c25e7ac42afd72/include/stdcxx/std/memory \
- /home/mml/genode-igb/contrib/stdcxx-4eddc2a55a80ed5d3a50fee3f5c25e7ac42afd72/include/stdcxx/std/numeric \
- /home/mml/genode-igb/contrib/stdcxx-4eddc2a55a80ed5d3a50fee3f5c25e7ac42afd72/include/stdcxx/std/string \
- /home/mml/genode-igb/contrib/stdcxx-4eddc2a55a80ed5d3a50fee3f5c25e7ac42afd72/include/stdcxx/std/forward_list \
- /home/mml/genode-igb/contrib/stdcxx-4eddc2a55a80ed5d3a50fee3f5c25e7ac42afd72/include/stdcxx/std/map \
- /home/mml/genode-igb/contrib/stdcxx-4eddc2a55a80ed5d3a50fee3f5c25e7ac42afd72/include/stdcxx/std/tuple \
- /home/mml/genode-igb/contrib/stdcxx-4eddc2a55a80ed5d3a50fee3f5c25e7ac42afd72/include/stdcxx/std/unordered_map \
- /home/mml/genode-igb/contrib/stdcxx-4eddc2a55a80ed5d3a50fee3f5c25e7ac42afd72/include/stdcxx/std/valarray \
- /home/mml/genode-igb/contrib/stdcxx-4eddc2a55a80ed5d3a50fee3f5c25e7ac42afd72/include/stdcxx/exception \
- /home/mml/genode-igb/contrib/stdcxx-4eddc2a55a80ed5d3a50fee3f5c25e7ac42afd72/include/stdcxx/std/stdexcept \
- /home/mml/genode-igb/contrib/stdcxx-4eddc2a55a80ed5d3a50fee3f5c25e7ac42afd72/include/stdcxx/std/limits \
- /home/mml/genode-igb/contrib/stdcxx-4eddc2a55a80ed5d3a50fee3f5c25e7ac42afd72/include/stdcxx/c_global/cmath \
- /home/mml/genode-igb/contrib/stdcxx-4eddc2a55a80ed5d3a50fee3f5c25e7ac42afd72/include/stdcxx/c_global/cstdio \
- /home/mml/genode-igb/contrib/stdcxx-4eddc2a55a80ed5d3a50fee3f5c25e7ac42afd72/include/stdcxx/c_global/cstring \
- /home/mml/genode-igb/contrib/stdcxx-4eddc2a55a80ed5d3a50fee3f5c25e7ac42afd72/include/stdcxx/std/istream \
- /home/mml/genode-igb/contrib/stdcxx-4eddc2a55a80ed5d3a50fee3f5c25e7ac42afd72/include/stdcxx/c_global/clocale \
- /home/mml/genode-igb/contrib/stdcxx-4eddc2a55a80ed5d3a50fee3f5c25e7ac42afd72/include/stdcxx/c_global/cstdlib \
- /home/mml/genode-igb/contrib/stdcxx-4eddc2a55a80ed5d3a50fee3f5c25e7ac42afd72/include/stdcxx/std/ios \
- /home/mml/genode-igb/contrib/stdcxx-4eddc2a55a80ed5d3a50fee3f5c25e7ac42afd72/include/stdcxx/std/ostream \
/home/mml/genode-igb/repos/ealanos/include/ealanos/memory/hamstraaja.h \
/home/mml/genode-igb/repos/ealanos/include/ealanos/memory/coreheap.h \
/home/mml/genode-igb/repos/ealanos/include/ealanos/memory/superblock.h \
@@ -146,6 +119,33 @@
/home/mml/genode-igb/repos/base/include/base/allocator_avl.h \
/home/mml/genode-igb/repos/base/include/base/tslab.h \
/home/mml/genode-igb/repos/base/include/base/slab.h \
+ /home/mml/genode-igb/repos/ealanos/src/lib/mx/memory/global_heap.h \
+ /home/mml/genode-igb/repos/ealanos/src/lib/mx/memory/alignment_helper.h \
+ /home/mml/genode-igb/repos/ealanos/include/ealanos/util/json.hpp \
+ /home/mml/genode-igb/contrib/stdcxx-4eddc2a55a80ed5d3a50fee3f5c25e7ac42afd72/include/stdcxx/std/algorithm \
+ /home/mml/genode-igb/contrib/stdcxx-4eddc2a55a80ed5d3a50fee3f5c25e7ac42afd72/include/stdcxx/c_global/ciso646 \
+ /home/mml/genode-igb/contrib/stdcxx-4eddc2a55a80ed5d3a50fee3f5c25e7ac42afd72/include/stdcxx/c_global/cstddef \
+ /home/mml/genode-igb/contrib/stdcxx-4eddc2a55a80ed5d3a50fee3f5c25e7ac42afd72/include/stdcxx/initializer_list \
+ /home/mml/genode-igb/contrib/stdcxx-4eddc2a55a80ed5d3a50fee3f5c25e7ac42afd72/include/stdcxx/std/iosfwd \
+ /home/mml/genode-igb/contrib/stdcxx-4eddc2a55a80ed5d3a50fee3f5c25e7ac42afd72/include/stdcxx/std/memory \
+ /home/mml/genode-igb/contrib/stdcxx-4eddc2a55a80ed5d3a50fee3f5c25e7ac42afd72/include/stdcxx/std/numeric \
+ /home/mml/genode-igb/contrib/stdcxx-4eddc2a55a80ed5d3a50fee3f5c25e7ac42afd72/include/stdcxx/std/string \
+ /home/mml/genode-igb/contrib/stdcxx-4eddc2a55a80ed5d3a50fee3f5c25e7ac42afd72/include/stdcxx/std/forward_list \
+ /home/mml/genode-igb/contrib/stdcxx-4eddc2a55a80ed5d3a50fee3f5c25e7ac42afd72/include/stdcxx/std/map \
+ /home/mml/genode-igb/contrib/stdcxx-4eddc2a55a80ed5d3a50fee3f5c25e7ac42afd72/include/stdcxx/std/tuple \
+ /home/mml/genode-igb/contrib/stdcxx-4eddc2a55a80ed5d3a50fee3f5c25e7ac42afd72/include/stdcxx/std/unordered_map \
+ /home/mml/genode-igb/contrib/stdcxx-4eddc2a55a80ed5d3a50fee3f5c25e7ac42afd72/include/stdcxx/std/valarray \
+ /home/mml/genode-igb/contrib/stdcxx-4eddc2a55a80ed5d3a50fee3f5c25e7ac42afd72/include/stdcxx/exception \
+ /home/mml/genode-igb/contrib/stdcxx-4eddc2a55a80ed5d3a50fee3f5c25e7ac42afd72/include/stdcxx/std/stdexcept \
+ /home/mml/genode-igb/contrib/stdcxx-4eddc2a55a80ed5d3a50fee3f5c25e7ac42afd72/include/stdcxx/std/limits \
+ /home/mml/genode-igb/contrib/stdcxx-4eddc2a55a80ed5d3a50fee3f5c25e7ac42afd72/include/stdcxx/c_global/cmath \
+ /home/mml/genode-igb/contrib/stdcxx-4eddc2a55a80ed5d3a50fee3f5c25e7ac42afd72/include/stdcxx/c_global/cstdio \
+ /home/mml/genode-igb/contrib/stdcxx-4eddc2a55a80ed5d3a50fee3f5c25e7ac42afd72/include/stdcxx/c_global/cstring \
+ /home/mml/genode-igb/contrib/stdcxx-4eddc2a55a80ed5d3a50fee3f5c25e7ac42afd72/include/stdcxx/std/istream \
+ /home/mml/genode-igb/contrib/stdcxx-4eddc2a55a80ed5d3a50fee3f5c25e7ac42afd72/include/stdcxx/c_global/clocale \
+ /home/mml/genode-igb/contrib/stdcxx-4eddc2a55a80ed5d3a50fee3f5c25e7ac42afd72/include/stdcxx/c_global/cstdlib \
+ /home/mml/genode-igb/contrib/stdcxx-4eddc2a55a80ed5d3a50fee3f5c25e7ac42afd72/include/stdcxx/std/ios \
+ /home/mml/genode-igb/contrib/stdcxx-4eddc2a55a80ed5d3a50fee3f5c25e7ac42afd72/include/stdcxx/std/ostream \
/home/mml/genode-igb/repos/ealanos/src/lib/mx/system/cpu.h \
/home/mml/genode-igb/repos/ealanos/src/lib/mx/tasking/config.h
@@ -215,60 +215,6 @@
/home/mml/genode-igb/contrib/stdcxx-4eddc2a55a80ed5d3a50fee3f5c25e7ac42afd72/include/stdcxx/std/vector:
-/home/mml/genode-igb/repos/ealanos/src/lib/mx/memory/global_heap.h:
-
-/home/mml/genode-igb/repos/ealanos/src/lib/mx/memory/alignment_helper.h:
-
-/home/mml/genode-igb/repos/ealanos/include/ealanos/util/json.hpp:
-
-/home/mml/genode-igb/contrib/stdcxx-4eddc2a55a80ed5d3a50fee3f5c25e7ac42afd72/include/stdcxx/std/algorithm:
-
-/home/mml/genode-igb/contrib/stdcxx-4eddc2a55a80ed5d3a50fee3f5c25e7ac42afd72/include/stdcxx/c_global/ciso646:
-
-/home/mml/genode-igb/contrib/stdcxx-4eddc2a55a80ed5d3a50fee3f5c25e7ac42afd72/include/stdcxx/c_global/cstddef:
-
-/home/mml/genode-igb/contrib/stdcxx-4eddc2a55a80ed5d3a50fee3f5c25e7ac42afd72/include/stdcxx/initializer_list:
-
-/home/mml/genode-igb/contrib/stdcxx-4eddc2a55a80ed5d3a50fee3f5c25e7ac42afd72/include/stdcxx/std/iosfwd:
-
-/home/mml/genode-igb/contrib/stdcxx-4eddc2a55a80ed5d3a50fee3f5c25e7ac42afd72/include/stdcxx/std/memory:
-
-/home/mml/genode-igb/contrib/stdcxx-4eddc2a55a80ed5d3a50fee3f5c25e7ac42afd72/include/stdcxx/std/numeric:
-
-/home/mml/genode-igb/contrib/stdcxx-4eddc2a55a80ed5d3a50fee3f5c25e7ac42afd72/include/stdcxx/std/string:
-
-/home/mml/genode-igb/contrib/stdcxx-4eddc2a55a80ed5d3a50fee3f5c25e7ac42afd72/include/stdcxx/std/forward_list:
-
-/home/mml/genode-igb/contrib/stdcxx-4eddc2a55a80ed5d3a50fee3f5c25e7ac42afd72/include/stdcxx/std/map:
-
-/home/mml/genode-igb/contrib/stdcxx-4eddc2a55a80ed5d3a50fee3f5c25e7ac42afd72/include/stdcxx/std/tuple:
-
-/home/mml/genode-igb/contrib/stdcxx-4eddc2a55a80ed5d3a50fee3f5c25e7ac42afd72/include/stdcxx/std/unordered_map:
-
-/home/mml/genode-igb/contrib/stdcxx-4eddc2a55a80ed5d3a50fee3f5c25e7ac42afd72/include/stdcxx/std/valarray:
-
-/home/mml/genode-igb/contrib/stdcxx-4eddc2a55a80ed5d3a50fee3f5c25e7ac42afd72/include/stdcxx/exception:
-
-/home/mml/genode-igb/contrib/stdcxx-4eddc2a55a80ed5d3a50fee3f5c25e7ac42afd72/include/stdcxx/std/stdexcept:
-
-/home/mml/genode-igb/contrib/stdcxx-4eddc2a55a80ed5d3a50fee3f5c25e7ac42afd72/include/stdcxx/std/limits:
-
-/home/mml/genode-igb/contrib/stdcxx-4eddc2a55a80ed5d3a50fee3f5c25e7ac42afd72/include/stdcxx/c_global/cmath:
-
-/home/mml/genode-igb/contrib/stdcxx-4eddc2a55a80ed5d3a50fee3f5c25e7ac42afd72/include/stdcxx/c_global/cstdio:
-
-/home/mml/genode-igb/contrib/stdcxx-4eddc2a55a80ed5d3a50fee3f5c25e7ac42afd72/include/stdcxx/c_global/cstring:
-
-/home/mml/genode-igb/contrib/stdcxx-4eddc2a55a80ed5d3a50fee3f5c25e7ac42afd72/include/stdcxx/std/istream:
-
-/home/mml/genode-igb/contrib/stdcxx-4eddc2a55a80ed5d3a50fee3f5c25e7ac42afd72/include/stdcxx/c_global/clocale:
-
-/home/mml/genode-igb/contrib/stdcxx-4eddc2a55a80ed5d3a50fee3f5c25e7ac42afd72/include/stdcxx/c_global/cstdlib:
-
-/home/mml/genode-igb/contrib/stdcxx-4eddc2a55a80ed5d3a50fee3f5c25e7ac42afd72/include/stdcxx/std/ios:
-
-/home/mml/genode-igb/contrib/stdcxx-4eddc2a55a80ed5d3a50fee3f5c25e7ac42afd72/include/stdcxx/std/ostream:
-
/home/mml/genode-igb/repos/ealanos/include/ealanos/memory/hamstraaja.h:
/home/mml/genode-igb/repos/ealanos/include/ealanos/memory/coreheap.h:
@@ -441,6 +387,60 @@
/home/mml/genode-igb/repos/base/include/base/slab.h:
+/home/mml/genode-igb/repos/ealanos/src/lib/mx/memory/global_heap.h:
+
+/home/mml/genode-igb/repos/ealanos/src/lib/mx/memory/alignment_helper.h:
+
+/home/mml/genode-igb/repos/ealanos/include/ealanos/util/json.hpp:
+
+/home/mml/genode-igb/contrib/stdcxx-4eddc2a55a80ed5d3a50fee3f5c25e7ac42afd72/include/stdcxx/std/algorithm:
+
+/home/mml/genode-igb/contrib/stdcxx-4eddc2a55a80ed5d3a50fee3f5c25e7ac42afd72/include/stdcxx/c_global/ciso646:
+
+/home/mml/genode-igb/contrib/stdcxx-4eddc2a55a80ed5d3a50fee3f5c25e7ac42afd72/include/stdcxx/c_global/cstddef:
+
+/home/mml/genode-igb/contrib/stdcxx-4eddc2a55a80ed5d3a50fee3f5c25e7ac42afd72/include/stdcxx/initializer_list:
+
+/home/mml/genode-igb/contrib/stdcxx-4eddc2a55a80ed5d3a50fee3f5c25e7ac42afd72/include/stdcxx/std/iosfwd:
+
+/home/mml/genode-igb/contrib/stdcxx-4eddc2a55a80ed5d3a50fee3f5c25e7ac42afd72/include/stdcxx/std/memory:
+
+/home/mml/genode-igb/contrib/stdcxx-4eddc2a55a80ed5d3a50fee3f5c25e7ac42afd72/include/stdcxx/std/numeric:
+
+/home/mml/genode-igb/contrib/stdcxx-4eddc2a55a80ed5d3a50fee3f5c25e7ac42afd72/include/stdcxx/std/string:
+
+/home/mml/genode-igb/contrib/stdcxx-4eddc2a55a80ed5d3a50fee3f5c25e7ac42afd72/include/stdcxx/std/forward_list:
+
+/home/mml/genode-igb/contrib/stdcxx-4eddc2a55a80ed5d3a50fee3f5c25e7ac42afd72/include/stdcxx/std/map:
+
+/home/mml/genode-igb/contrib/stdcxx-4eddc2a55a80ed5d3a50fee3f5c25e7ac42afd72/include/stdcxx/std/tuple:
+
+/home/mml/genode-igb/contrib/stdcxx-4eddc2a55a80ed5d3a50fee3f5c25e7ac42afd72/include/stdcxx/std/unordered_map:
+
+/home/mml/genode-igb/contrib/stdcxx-4eddc2a55a80ed5d3a50fee3f5c25e7ac42afd72/include/stdcxx/std/valarray:
+
+/home/mml/genode-igb/contrib/stdcxx-4eddc2a55a80ed5d3a50fee3f5c25e7ac42afd72/include/stdcxx/exception:
+
+/home/mml/genode-igb/contrib/stdcxx-4eddc2a55a80ed5d3a50fee3f5c25e7ac42afd72/include/stdcxx/std/stdexcept:
+
+/home/mml/genode-igb/contrib/stdcxx-4eddc2a55a80ed5d3a50fee3f5c25e7ac42afd72/include/stdcxx/std/limits:
+
+/home/mml/genode-igb/contrib/stdcxx-4eddc2a55a80ed5d3a50fee3f5c25e7ac42afd72/include/stdcxx/c_global/cmath:
+
+/home/mml/genode-igb/contrib/stdcxx-4eddc2a55a80ed5d3a50fee3f5c25e7ac42afd72/include/stdcxx/c_global/cstdio:
+
+/home/mml/genode-igb/contrib/stdcxx-4eddc2a55a80ed5d3a50fee3f5c25e7ac42afd72/include/stdcxx/c_global/cstring:
+
+/home/mml/genode-igb/contrib/stdcxx-4eddc2a55a80ed5d3a50fee3f5c25e7ac42afd72/include/stdcxx/std/istream:
+
+/home/mml/genode-igb/contrib/stdcxx-4eddc2a55a80ed5d3a50fee3f5c25e7ac42afd72/include/stdcxx/c_global/clocale:
+
+/home/mml/genode-igb/contrib/stdcxx-4eddc2a55a80ed5d3a50fee3f5c25e7ac42afd72/include/stdcxx/c_global/cstdlib:
+
+/home/mml/genode-igb/contrib/stdcxx-4eddc2a55a80ed5d3a50fee3f5c25e7ac42afd72/include/stdcxx/std/ios:
+
+/home/mml/genode-igb/contrib/stdcxx-4eddc2a55a80ed5d3a50fee3f5c25e7ac42afd72/include/stdcxx/std/ostream:
+
/home/mml/genode-igb/repos/ealanos/src/lib/mx/system/cpu.h:
/home/mml/genode-igb/repos/ealanos/src/lib/mx/tasking/config.h:
diff --git a/repos/ealanos/src/lib/mx/memory/global_heap.h b/repos/ealanos/src/lib/mx/memory/global_heap.h
index 6e983bb1f8..5cb7a8a368 100644
--- a/repos/ealanos/src/lib/mx/memory/global_heap.h
+++ b/repos/ealanos/src/lib/mx/memory/global_heap.h
@@ -34,7 +34,8 @@ public:
*/
static void *allocate(const std::uint8_t numa_node_id, const std::size_t size)
{
- return _heap->alloc(size, numa_node_id); //numa_alloc_onnode(size, numa_node_id);
+ void *ptr = _heap->alloc(size, numa_node_id); // numa_alloc_onnode(size, numa_node_id);
+ return ptr;
}
/**
@@ -57,4 +58,4 @@ public:
*/
static void free(void *memory, const std::size_t size, [[maybe_unused]] const std::uint8_t numa_node_id) { _heap->free(memory); }
};
-} // namespace mx::memory
\ No newline at end of file
+} // namespace mx::memory
diff --git a/repos/ealanos/src/lib/mx/memory/task_allocator_interface.h b/repos/ealanos/src/lib/mx/memory/task_allocator_interface.h
index d15bc16865..b23418dcf0 100644
--- a/repos/ealanos/src/lib/mx/memory/task_allocator_interface.h
+++ b/repos/ealanos/src/lib/mx/memory/task_allocator_interface.h
@@ -59,7 +59,7 @@ public:
* Frees the given memory using systems free.
* @param address Memory to free.
*/
- void free(const std::uint16_t /*worker_id*/, void *address) noexcept override { std::free(address); }
+ void free(const std::uint16_t /*worker_id*/, void *address) noexcept override { memory::GlobalHeap::free(address, 0, 0); }
[[nodiscard]] std::unordered_map>>
allocated_chunks() override
diff --git a/repos/ealanos/src/lib/mx/tasking/annotation.h b/repos/ealanos/src/lib/mx/tasking/annotation.h
index 912966b719..dd0cbe79fc 100644
--- a/repos/ealanos/src/lib/mx/tasking/annotation.h
+++ b/repos/ealanos/src/lib/mx/tasking/annotation.h
@@ -16,7 +16,7 @@ class TaskSquad;
* and synchronization of concurrent accesses to the same data
* object, done by tasks.
*/
-class annotation
+class Annotation
{
public:
enum execution_destination : std::uint8_t
@@ -36,25 +36,25 @@ public:
mixed = 2U
};
- constexpr annotation() noexcept = default;
- explicit constexpr annotation(const std::uint16_t worker_id) noexcept : _destination(worker_id) {}
- explicit constexpr annotation(const execution_destination destination) noexcept : _destination(destination) {}
- constexpr annotation(const enum access_intention access_intention, const resource::ptr resource) noexcept
+ constexpr Annotation() noexcept = default;
+ explicit constexpr Annotation(const std::uint16_t worker_id) noexcept : _destination(worker_id) {}
+ explicit constexpr Annotation(const execution_destination destination) noexcept : _destination(destination) {}
+ constexpr Annotation(const enum access_intention access_intention, const resource::ptr resource) noexcept
: _access_intention(access_intention), _destination(resource)
{
}
- constexpr annotation(const enum access_intention access_intention, const resource::ptr resource,
+ constexpr Annotation(const enum access_intention access_intention, const resource::ptr resource,
const PrefetchDescriptor prefetch_descriptor) noexcept
: _access_intention(access_intention), _destination(resource),
_prefetch_hint(PrefetchHint{prefetch_descriptor, resource})
{
}
- constexpr annotation(const annotation &) noexcept = default;
- constexpr annotation(annotation &&) noexcept = default;
- ~annotation() = default;
+ constexpr Annotation(const Annotation &) noexcept = default;
+ constexpr Annotation(Annotation &&) noexcept = default;
+ ~Annotation() = default;
- annotation &operator=(const annotation &) noexcept = default;
- annotation &operator=(annotation &&) noexcept = default;
+ Annotation &operator=(const Annotation &) noexcept = default;
+ Annotation &operator=(Annotation &&) noexcept = default;
[[nodiscard]] bool is_readonly() const noexcept { return _access_intention == access_intention::readonly; }
[[nodiscard]] priority priority() const noexcept { return _priority; }
@@ -94,7 +94,7 @@ public:
void set(const PrefetchHint prefetch_hint) noexcept { _prefetch_hint = prefetch_hint; }
void cycles(const std::uint16_t cycles) noexcept { _cycles = cycles; }
- bool operator==(const annotation &other) const noexcept
+ bool operator==(const Annotation &other) const noexcept
{
return _access_intention == other._access_intention && _priority == other._priority &&
_destination == other._destination && _prefetch_hint == other._prefetch_hint;
diff --git a/repos/ealanos/src/lib/mx/tasking/profiling/task_counter.h b/repos/ealanos/src/lib/mx/tasking/profiling/task_counter.h
index 74cce57703..0eb209969d 100644
--- a/repos/ealanos/src/lib/mx/tasking/profiling/task_counter.h
+++ b/repos/ealanos/src/lib/mx/tasking/profiling/task_counter.h
@@ -94,7 +94,7 @@ public:
{
}
- ~TaskCounter() noexcept { delete[] this->_counter; }
+ ~TaskCounter() noexcept { mx::memory::GlobalHeap::free(this->_counter,0,0); }
TaskCounter &operator=(const TaskCounter &) = delete;
diff --git a/repos/ealanos/src/lib/mx/tasking/runtime.h b/repos/ealanos/src/lib/mx/tasking/runtime.h
index 6d3c53d7af..3b631f7e02 100644
--- a/repos/ealanos/src/lib/mx/tasking/runtime.h
+++ b/repos/ealanos/src/lib/mx/tasking/runtime.h
@@ -66,8 +66,9 @@ public:
if (_resource_allocator == nullptr)
{
/// Only called the first time.
- _resource_allocator.reset(new (memory::GlobalHeap::allocate_cache_line_aligned(
- sizeof(memory::dynamic::local::Allocator))) memory::dynamic::local::Allocator(core_set));
+ _resource_allocator.reset(new (memory::GlobalHeap::allocate_cache_line_aligned(sizeof(
+ memory::dynamic::local::Allocator))) memory::dynamic::local::Allocator(core_set));
+ util::Logger::info_if(system::Environment::is_debug(), "Created resource allocator");
}
else if (_resource_allocator->is_free())
{
@@ -86,8 +87,10 @@ public:
// Create a new task allocator.
if (use_system_allocator)
{
- _task_allocator.reset(new (memory::GlobalHeap::allocate_cache_line_aligned(sizeof(
- memory::SystemTaskAllocator))) memory::SystemTaskAllocator());
+ _task_allocator.reset(new (memory::GlobalHeap::allocate_cache_line_aligned(
+ sizeof(memory::SystemTaskAllocator)))
+ memory::SystemTaskAllocator());
+ util::Logger::info_if(system::Environment::is_debug(), "Created task allocator");
}
else
{
@@ -100,8 +103,9 @@ public:
const auto need_new_scheduler = _scheduler == nullptr || *_scheduler != core_set;
if (need_new_scheduler)
{
- _scheduler.reset(new (memory::GlobalHeap::allocate_cache_line_aligned(sizeof(Scheduler)))
- Scheduler(core_set, prefetch_distance, *_resource_allocator));
+ _scheduler.reset(new (memory::GlobalHeap::allocate_cache_line_aligned(
+ sizeof(Scheduler))) Scheduler(core_set, prefetch_distance, *_resource_allocator));
+ util::Logger::info_if(system::Environment::is_debug(), "Created new task scheduler and worker thread pool");
}
else
{
@@ -113,6 +117,7 @@ public:
{
_resource_builder = std::make_unique(*_scheduler, *_resource_allocator);
}
+ util::Logger::info_if(system::Environment::is_debug(), "Started MxTasking in DEBUG mode.");
return true;
}
@@ -155,7 +160,7 @@ public:
*/
static std::uint16_t spawn(const mx::resource::ptr squad, const std::uint16_t local_worker_id) noexcept
{
- return spawn(squad, annotation::resource_boundness::mixed, local_worker_id);
+ return spawn(squad, Annotation::resource_boundness::mixed, local_worker_id);
}
/**
@@ -165,7 +170,7 @@ public:
* @param boundness Boundness of the squad.
* @param local_worker_id Worker, the spawn request came from.
*/
- static std::uint16_t spawn(const mx::resource::ptr squad, const enum annotation::resource_boundness boundness,
+ static std::uint16_t spawn(const mx::resource::ptr squad, const enum Annotation::resource_boundness boundness,
const std::uint16_t local_worker_id) noexcept
{
return _scheduler->dispatch(squad, boundness, local_worker_id);
diff --git a/repos/ealanos/src/lib/mx/tasking/scheduler.cpp b/repos/ealanos/src/lib/mx/tasking/scheduler.cpp
index d0f19a7ec3..b047da4070 100644
--- a/repos/ealanos/src/lib/mx/tasking/scheduler.cpp
+++ b/repos/ealanos/src/lib/mx/tasking/scheduler.cpp
@@ -1,11 +1,16 @@
#include "scheduler.h"
+#include "mx/system/environment.h"
+#include "mx/util/logger.h"
#include "runtime.h"
#include
#include
#include
#include
+#include
#include
#include
+#include
+
using namespace mx::tasking;
@@ -26,7 +31,9 @@ Scheduler::Scheduler(const mx::util::core_set &core_set, const PrefetchDistance
this->_task_tracer.emplace(profiling::TaskTracer{this->_core_set.count_cores()});
}
- /// Create worker.
+ /// Create worker.
+ std::cout << "Creating workers for coreset " << this->_core_set << std::endl;
+
for (auto worker_id = std::uint16_t(0U); worker_id < this->_core_set.count_cores(); ++worker_id)
{
/// The core the worker is binded to.
@@ -36,10 +43,15 @@ Scheduler::Scheduler(const mx::util::core_set &core_set, const PrefetchDistance
const auto numa_node_id = system::cpu::node_id(core_id);
this->_worker_numa_node_map[worker_id] = numa_node_id;
- this->_worker[worker_id] = new (memory::GlobalHeap::allocate(numa_node_id, sizeof(Worker)))
- Worker(this->_core_set.count_cores(), worker_id, core_id, this->_is_running, prefetch_distance,
- this->_epoch_manager[worker_id], this->_epoch_manager.global_epoch(), this->_task_counter,
- this->_task_tracer);
+ this->_worker[worker_id] = static_cast(memory::GlobalHeap::allocate(numa_node_id, sizeof(Worker)));
+
+ std::cout << "Creating worker " << worker_id << " at " << this->_worker[worker_id];
+
+ new (static_cast(this->_worker[worker_id]))
+ Worker(this->_core_set.count_cores(), worker_id, core_id, this->_is_running,
+ prefetch_distance, this->_epoch_manager[worker_id],
+ this->_epoch_manager.global_epoch(), this->_task_counter, this->_task_tracer);
+ util::Logger::info_if(system::Environment::is_debug(), "Created worker threads");
}
}
@@ -62,6 +74,7 @@ void Scheduler::start_and_wait()
auto *worker = this->_worker[worker_id];
worker_threads[worker_id] = std::thread([worker] { worker->execute(); });
+ util::Logger::info_if(system::Environment::is_debug(), "Created worker thread " + std::to_string(worker_id) + " of size " + std::to_string(sizeof(std::thread)));
//system::thread::pin(worker_threads[worker_id], worker->core_id());
//system::thread::name(worker_threads[worker_id], "mx::worker#" + std::to_string(worker_id));
}
@@ -262,7 +275,7 @@ std::uint16_t Scheduler::dispatch(TaskInterface &first, TaskInterface &last, con
return local_worker_id;
}
-std::uint16_t Scheduler::dispatch(const mx::resource::ptr squad, const enum annotation::resource_boundness boundness,
+std::uint16_t Scheduler::dispatch(const mx::resource::ptr squad, const enum Annotation::resource_boundness boundness,
const std::uint16_t local_worker_id) noexcept
{
auto *dispatch_task = runtime::new_task(local_worker_id, *squad.get());
diff --git a/repos/ealanos/src/lib/mx/tasking/scheduler.d b/repos/ealanos/src/lib/mx/tasking/scheduler.d
index 8a65bafcdb..4345516e44 100644
--- a/repos/ealanos/src/lib/mx/tasking/scheduler.d
+++ b/repos/ealanos/src/lib/mx/tasking/scheduler.d
@@ -203,6 +203,7 @@
/home/mml/genode-igb/contrib/stdcxx-4eddc2a55a80ed5d3a50fee3f5c25e7ac42afd72/include/stdcxx/std/set \
/home/mml/genode-igb/repos/ealanos/src/lib/mx/util/maybe_atomic.h \
/home/mml/genode-igb/repos/ealanos/src/lib/mx/tasking/profiling/idle_profiler.h \
+ /home/mml/genode-igb/repos/ealanos/src/lib/mx/util/logger.h \
/home/mml/genode-igb/repos/ealanos/src/lib/mx/tasking/runtime.h \
/home/mml/genode-igb/repos/ealanos/src/lib/mx/io/network/server.h \
/home/mml/genode-igb/repos/ealanos/src/lib/mx/io/network/config.h \
@@ -211,7 +212,6 @@
/home/mml/genode-igb/repos/ealanos/src/lib/mx/resource/builder.h \
/home/mml/genode-igb/repos/ealanos/src/lib/mx/system/thread.h \
/home/mml/genode-igb/contrib/libc-ec685e91ee80735b4a067fea4582aa7f5d06c192/include/libc/pthread.h \
- /home/mml/genode-igb/repos/ealanos/src/lib/mx/util/logger.h \
/home/mml/genode-igb/repos/libports/include/libc/component.h
/home/mml/genode-igb/repos/ealanos/src/lib/mx/tasking/scheduler.h:
@@ -620,6 +620,8 @@
/home/mml/genode-igb/repos/ealanos/src/lib/mx/tasking/profiling/idle_profiler.h:
+/home/mml/genode-igb/repos/ealanos/src/lib/mx/util/logger.h:
+
/home/mml/genode-igb/repos/ealanos/src/lib/mx/tasking/runtime.h:
/home/mml/genode-igb/repos/ealanos/src/lib/mx/io/network/server.h:
@@ -636,6 +638,4 @@
/home/mml/genode-igb/contrib/libc-ec685e91ee80735b4a067fea4582aa7f5d06c192/include/libc/pthread.h:
-/home/mml/genode-igb/repos/ealanos/src/lib/mx/util/logger.h:
-
/home/mml/genode-igb/repos/libports/include/libc/component.h:
diff --git a/repos/ealanos/src/lib/mx/tasking/scheduler.h b/repos/ealanos/src/lib/mx/tasking/scheduler.h
index 3bc1d3e8ae..086cb4f9d0 100644
--- a/repos/ealanos/src/lib/mx/tasking/scheduler.h
+++ b/repos/ealanos/src/lib/mx/tasking/scheduler.h
@@ -60,7 +60,7 @@ public:
* @param local_worker_id Channel, the request came from.
* @return Worker ID where the task was dispatched to.
*/
- std::uint16_t dispatch(mx::resource::ptr squad, enum annotation::resource_boundness boundness,
+ std::uint16_t dispatch(mx::resource::ptr squad, enum Annotation::resource_boundness boundness,
std::uint16_t local_worker_id) noexcept;
/**
@@ -213,12 +213,12 @@ private:
PhysicalCoreResourceWorkerIds &operator=(const PhysicalCoreResourceWorkerIds &) noexcept = default;
PhysicalCoreResourceWorkerIds &operator=(PhysicalCoreResourceWorkerIds &&) noexcept = default;
- [[nodiscard]] std::uint16_t operator[](const enum annotation::resource_boundness boundness) const noexcept
+ [[nodiscard]] std::uint16_t operator[](const enum Annotation::resource_boundness boundness) const noexcept
{
return _worker_ids[boundness];
}
- [[nodiscard]] std::uint16_t &operator[](const enum annotation::resource_boundness boundness) noexcept
+ [[nodiscard]] std::uint16_t &operator[](const enum Annotation::resource_boundness boundness) noexcept
{
return _worker_ids[boundness];
}
diff --git a/repos/ealanos/src/lib/mx/tasking/task.h b/repos/ealanos/src/lib/mx/tasking/task.h
index 623dd86806..62262f23b6 100644
--- a/repos/ealanos/src/lib/mx/tasking/task.h
+++ b/repos/ealanos/src/lib/mx/tasking/task.h
@@ -147,12 +147,12 @@ public:
/**
* @return The annotation of the task.
*/
- [[nodiscard]] const annotation &annotation() const noexcept { return _annotation; }
+ [[nodiscard]] const Annotation &annotation() const noexcept { return _annotation; }
/**
* @return The annotation of the task.
*/
- [[nodiscard]] class annotation &annotation() noexcept { return _annotation; }
+ [[nodiscard]] class Annotation &annotation() noexcept { return _annotation; }
/**
* Annotate the task with a resource the task will work on.
@@ -234,7 +234,7 @@ public:
*
* @param execution_destination Destination to execute on.
*/
- void annotate(const annotation::execution_destination execution_destination) noexcept
+ void annotate(const Annotation::execution_destination execution_destination) noexcept
{
_annotation.set(execution_destination);
}
@@ -244,7 +244,7 @@ public:
*
* @param is_readonly True, when the task is read only (false by default).
*/
- void annotate(const annotation::access_intention access_intention) noexcept { _annotation.set(access_intention); }
+ void annotate(const Annotation::access_intention access_intention) noexcept { _annotation.set(access_intention); }
/**
* @return Pointer to the next task in spawn queue.
@@ -262,7 +262,7 @@ private:
TaskInterface *_next{nullptr};
/// Tasks annotations.
- class annotation _annotation
+ class Annotation _annotation
{
};
};
diff --git a/repos/ealanos/src/lib/mx/tasking/task_squad.cpp b/repos/ealanos/src/lib/mx/tasking/task_squad.cpp
index 39720c95a8..94371cab23 100644
--- a/repos/ealanos/src/lib/mx/tasking/task_squad.cpp
+++ b/repos/ealanos/src/lib/mx/tasking/task_squad.cpp
@@ -33,7 +33,7 @@ TaskResult TaskSquadSpawnTask::execute(std::uint16_t worker_id)
}
else
{
- first->annotate(annotation::execution_destination::local);
+ first->annotate(Annotation::execution_destination::local);
runtime::spawn(*first, worker_id);
}
}
diff --git a/repos/ealanos/src/lib/mx/tasking/worker.cpp b/repos/ealanos/src/lib/mx/tasking/worker.cpp
index a55bd47de5..949e93dc19 100644
--- a/repos/ealanos/src/lib/mx/tasking/worker.cpp
+++ b/repos/ealanos/src/lib/mx/tasking/worker.cpp
@@ -34,7 +34,7 @@ void Worker::execute()
system::builtin::pause();
}
- assert(this->_target_core_id == system::cpu::core_id() && "Worker not pinned to correct core.");
+ //assert(this->_target_core_id == system::cpu::core_id() && "Worker not pinned to correct core.");
const auto worker_id = this->_id;
/// Period the task sampler for monitoring task cycles becomes active.