From 5f0fddacb6e8b470ebaf6f3dc935ed1167fea585 Mon Sep 17 00:00:00 2001 From: Akilan Date: Tue, 14 Jan 2025 14:42:18 +0000 Subject: [PATCH] added sections of the evaluation report --- KernelModule/customMemAlloc.c | 471 +++++++++++++++++++++++++ docs/evaluation/#evaluation-plan.org# | 9 +- docs/evaluation/evaluation-plan.org | 3 +- docs/evaluation/evaluation.html | 482 ++++++++++++++++++++++++++ docs/evaluation/evaluation.org | 103 +++++- docs/evaluation/evaluation.pdf | Bin 242562 -> 197902 bytes docs/evaluation/evaluation.tex | 91 ++++- 7 files changed, 1141 insertions(+), 18 deletions(-) create mode 100644 KernelModule/customMemAlloc.c create mode 100644 docs/evaluation/evaluation.html diff --git a/KernelModule/customMemAlloc.c b/KernelModule/customMemAlloc.c new file mode 100644 index 0000000..8a67d90 --- /dev/null +++ b/KernelModule/customMemAlloc.c @@ -0,0 +1,471 @@ +/* SPDX-License-Identifier: BSD-3-Clause + * Copyright(c) 2010-2014 Intel Corporation + */ + +#include +__FBSDID("$FreeBSD$"); + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include + +#include +#include +#include +#include +#include +#include +#include + +// added to print uint +// 64 +// #include + +struct contigmem_buffer { + void *addr; + int refcnt; + struct mtx mtx; +}; + +struct contigmem_vm_handle { + int buffer_index; +}; + +static int contigmem_load(void); +static int contigmem_unload(void); +static int contigmem_physaddr(SYSCTL_HANDLER_ARGS); + +static d_mmap_single_t contigmem_mmap_single; +static d_open_t contigmem_open; +static d_close_t contigmem_close; + +static int contigmem_num_buffers = RTE_CONTIGMEM_DEFAULT_NUM_BUFS; +static int64_t contigmem_buffer_size = RTE_CONTIGMEM_DEFAULT_BUF_SIZE; + +static eventhandler_tag contigmem_eh_tag; +static struct contigmem_buffer contigmem_buffers[RTE_CONTIGMEM_MAX_NUM_BUFS]; +static struct cdev *contigmem_cdev = NULL; +static int contigmem_refcnt; + +TUNABLE_INT("hw.contigmem.num_buffers", &contigmem_num_buffers); +TUNABLE_QUAD("hw.contigmem.buffer_size", &contigmem_buffer_size); + +static SYSCTL_NODE(_hw, OID_AUTO, contigmem, CTLFLAG_RD, 0, "contigmem"); + +SYSCTL_INT(_hw_contigmem, OID_AUTO, num_buffers, CTLFLAG_RD, + &contigmem_num_buffers, 0, "Number of contigmem buffers allocated"); +SYSCTL_QUAD(_hw_contigmem, OID_AUTO, buffer_size, CTLFLAG_RD, + &contigmem_buffer_size, 0, "Size of each contiguous buffer"); +SYSCTL_INT(_hw_contigmem, OID_AUTO, num_references, CTLFLAG_RD, + &contigmem_refcnt, 0, "Number of references to contigmem"); + +static SYSCTL_NODE(_hw_contigmem, OID_AUTO, physaddr, CTLFLAG_RD, 0, + "physaddr"); + +MALLOC_DEFINE(M_CONTIGMEM, "customcontigmem", "customcontigmem(4) allocations"); + + +/* + * The offset in sysent where the syscall is allocated. + */ +static int offset = NO_SYSCALL; + +static int contigmem_modevent(module_t mod, int type, void *arg) +{ + int error = 0; + + switch (type) { + case MOD_LOAD: + error = contigmem_load(); + break; + case MOD_UNLOAD: + error = contigmem_unload(); + break; + default: + break; + } + + return error; +} + +moduledata_t contigmem_mod = { + "contigmem", + (modeventhand_t)contigmem_modevent, + 0 +}; + +DECLARE_MODULE(contigmem, contigmem_mod, SI_SUB_DRIVERS, SI_ORDER_ANY); +MODULE_VERSION(contigmem, 1); + +static struct cdevsw contigmem_ops = { + .d_name = "contigmem", + .d_version = D_VERSION, + .d_flags = D_TRACKCLOSE, + .d_mmap_single = contigmem_mmap_single, + .d_open = contigmem_open, + .d_close = contigmem_close, +}; + +static int +contigmem_load() +{ + + // get page size + printf("%d FreeBSD page size \n",PAGE_SIZE); + + char index_string[8], description[32]; + int i, error = 0; + void *addr; + + if (contigmem_num_buffers > RTE_CONTIGMEM_MAX_NUM_BUFS) { + printf("%d buffers requested is greater than %d allowed\n", + contigmem_num_buffers, RTE_CONTIGMEM_MAX_NUM_BUFS); + error = EINVAL; + goto error; + } + + if (contigmem_buffer_size < PAGE_SIZE || + (contigmem_buffer_size & (contigmem_buffer_size - 1)) != 0) { + printf("buffer size 0x%lx is not greater than PAGE_SIZE and " + "power of two\n", contigmem_buffer_size); + error = EINVAL; + goto error; + } + + for (i = 0; i < contigmem_num_buffers; i++) { + addr = contigmalloc(contigmem_buffer_size, M_CONTIGMEM, M_ZERO, + 0, BUS_SPACE_MAXADDR, contigmem_buffer_size, 0); + if (addr == NULL) { + printf("contigmalloc failed for buffer %d\n", i); + error = ENOMEM; + goto error; + } + +#ifndef RTE_ARCH_ARM_PURECAP_HACK + printf("%2u: virt=%p phys=%p\n", i, addr, + (void *)pmap_kextract((vm_offset_t)addr)); +#endif + + mtx_init(&contigmem_buffers[i].mtx, "contigmem", NULL, MTX_DEF); + contigmem_buffers[i].addr = addr; + contigmem_buffers[i].refcnt = 0; + + snprintf(index_string, sizeof(index_string), "%d", i); + snprintf(description, sizeof(description), + "phys addr for buffer %d", i); + SYSCTL_ADD_PROC(NULL, + &SYSCTL_NODE_CHILDREN(_hw_contigmem, physaddr), OID_AUTO, + index_string, CTLTYPE_U64 | CTLFLAG_RD, + (void *)(uintptr_t)i, 0, contigmem_physaddr, "LU", + description); + } + + contigmem_cdev = make_dev_credf(0, &contigmem_ops, 0, NULL, UID_ROOT, + GID_WHEEL, 0600, "contigmem"); + + return 0; + +error: + for (i = 0; i < contigmem_num_buffers; i++) { + if (contigmem_buffers[i].addr != NULL) { + contigfree(contigmem_buffers[i].addr, + contigmem_buffer_size, M_CONTIGMEM); + contigmem_buffers[i].addr = NULL; + } + if (mtx_initialized(&contigmem_buffers[i].mtx)) + mtx_destroy(&contigmem_buffers[i].mtx); + } + + return error; + +// Want to design contig load to do nothing +} + +static int +contigmem_unload() +{ + int i; + + if (contigmem_refcnt > 0) + return EBUSY; + + if (contigmem_cdev != NULL) + destroy_dev(contigmem_cdev); + + if (contigmem_eh_tag != NULL) + EVENTHANDLER_DEREGISTER(process_exit, contigmem_eh_tag); + + for (i = 0; i < RTE_CONTIGMEM_MAX_NUM_BUFS; i++) { + if (contigmem_buffers[i].addr != NULL) + contigfree(contigmem_buffers[i].addr, + contigmem_buffer_size, M_CONTIGMEM); + if (mtx_initialized(&contigmem_buffers[i].mtx)) + mtx_destroy(&contigmem_buffers[i].mtx); + } + + return 0; +} + +static int +contigmem_physaddr(SYSCTL_HANDLER_ARGS) +{ + uint64_t physaddr; + int index = (int)(uintptr_t)arg1; + + physaddr = (uint64_t)vtophys(contigmem_buffers[index].addr); + return sysctl_handle_64(oidp, &physaddr, 0, req); +} + +static int +contigmem_open(struct cdev *cdev, int fflags, int devtype, + struct thread *td) +{ + + printf("Contigmem opened \n"); + + atomic_add_int(&contigmem_refcnt, 1); + + return 0; +} + +static int +contigmem_close(struct cdev *cdev, int fflags, int devtype, + struct thread *td) +{ + + atomic_subtract_int(&contigmem_refcnt, 1); + + return 0; +} + +static int +contigmem_cdev_pager_ctor(void *handle, vm_ooffset_t size, vm_prot_t prot, + vm_ooffset_t foff, struct ucred *cred, u_short *color) +{ + struct contigmem_vm_handle *vmh = handle; + struct contigmem_buffer *buf; + + buf = &contigmem_buffers[vmh->buffer_index]; + + atomic_add_int(&contigmem_refcnt, 1); + + mtx_lock(&buf->mtx); + if (buf->refcnt == 0) + memset(buf->addr, 0, contigmem_buffer_size); + buf->refcnt++; + mtx_unlock(&buf->mtx); + + return 0; +} + +static void +contigmem_cdev_pager_dtor(void *handle) +{ + struct contigmem_vm_handle *vmh = handle; + struct contigmem_buffer *buf; + + buf = &contigmem_buffers[vmh->buffer_index]; + + mtx_lock(&buf->mtx); + buf->refcnt--; + mtx_unlock(&buf->mtx); + + free(vmh, M_CONTIGMEM); + + atomic_subtract_int(&contigmem_refcnt, 1); +} + +static int +contigmem_cdev_pager_fault(vm_object_t object, vm_ooffset_t offset, int prot, + vm_page_t *mres) +{ + vm_paddr_t paddr; + vm_page_t m_paddr, page; + vm_memattr_t memattr, memattr1; + + memattr = object->memattr; + + VM_OBJECT_WUNLOCK(object); + + paddr = offset; + + m_paddr = vm_phys_paddr_to_vm_page(paddr); + if (m_paddr != NULL) { + memattr1 = pmap_page_get_memattr(m_paddr); + if (memattr1 != memattr) + memattr = memattr1; + } + + if (((*mres)->flags & PG_FICTITIOUS) != 0) { + /* + * If the passed in result page is a fake page, update it with + * the new physical address. + */ + page = *mres; + VM_OBJECT_WLOCK(object); + vm_page_updatefake(page, paddr, memattr); + } else { + /* + * Replace the passed in reqpage page with our own fake page and + * free up the original page. + */ + page = vm_page_getfake(paddr, memattr); + VM_OBJECT_WLOCK(object); +#if __FreeBSD__ >= 13 + vm_page_replace(page, object, (*mres)->pindex, *mres); +#else + vm_page_t mret = vm_page_replace(page, object, (*mres)->pindex); + KASSERT(mret == *mres, + ("invalid page replacement, old=%p, ret=%p", *mres, mret)); + vm_page_lock(mret); + vm_page_free(mret); + vm_page_unlock(mret); +#endif + *mres = page; + } + + page->valid = VM_PAGE_BITS_ALL; + + return VM_PAGER_OK; +} + +static struct cdev_pager_ops contigmem_cdev_pager_ops = { + .cdev_pg_ctor = contigmem_cdev_pager_ctor, + .cdev_pg_dtor = contigmem_cdev_pager_dtor, + .cdev_pg_fault = contigmem_cdev_pager_fault, +}; + +static int +contigmem_mmap_single(struct cdev *cdev, vm_ooffset_t *offset, vm_size_t size, + struct vm_object **obj, int nprot) +{ + + // Testing if this is called when file is opened + printf("contigmem_mmap_single called \n"); + + struct contigmem_vm_handle *vmh; + uint64_t buffer_index; + + /* + * The buffer index is encoded in the offset. Divide the offset by + * PAGE_SIZE to get the index of the buffer requested by the user + * app. + */ + buffer_index = *offset / PAGE_SIZE; + if (buffer_index >= contigmem_num_buffers) + return EINVAL; + + if (size > contigmem_buffer_size) + return EINVAL; + + vmh = malloc(sizeof(*vmh), M_CONTIGMEM, M_NOWAIT | M_ZERO); + if (vmh == NULL) + return ENOMEM; + vmh->buffer_index = buffer_index; + + *offset = (vm_ooffset_t)vtophys(contigmem_buffers[buffer_index].addr); + *obj = cdev_pager_allocate(vmh, OBJT_DEVICE, &contigmem_cdev_pager_ops, + size, nprot, *offset, curthread->td_ucred); + + return 0; +} + + +// SAMPLE SYSCALL IMPLEMENTATION +// /*- +// * SPDX-License-Identifier: BSD-2-Clause +// * +// * Copyright (c) 1999 Assar Westerlund +// * All rights reserved. +// * +// * Redistribution and use in source and binary forms, with or without +// * modification, are permitted provided that the following conditions +// * are met: +// * 1. Redistributions of source code must retain the above copyright +// * notice, this list of conditions and the following disclaimer. +// * 2. Redistributions in binary form must reproduce the above copyright +// * notice, this list of conditions and the following disclaimer in the +// * documentation and/or other materials provided with the distribution. +// * +// * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND +// * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +// * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE +// * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +// * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS +// * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +// * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +// * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY +// * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF +// * SUCH DAMAGE. +// */ + +// #include +// #include +// #include +// #include +// #include +// #include +// #include + +// /* +// * The function for implementing the syscall. +// */ +// static int +// hello(struct thread *td, void *arg) +// { + +// printf("hello kernel\n"); +// return (0); +// } + +// /* +// * The `sysent' for the new syscall +// */ +// static struct sysent hello_sysent = { +// .sy_narg = 0, +// .sy_call = hello +// }; + +// /* +// * The offset in sysent where the syscall is allocated. +// */ +// static int offset = NO_SYSCALL; + +// /* +// * The function called at load/unload. +// */ +// static int +// load(struct module *module, int cmd, void *arg) +// { +// int error = 0; + +// switch (cmd) { +// case MOD_LOAD : +// printf("syscall loaded at %d\n", offset); +// break; +// case MOD_UNLOAD : +// printf("syscall unloaded from %d\n", offset); +// break; +// default : +// error = EOPNOTSUPP; +// break; +// } +// return (error); +// } + +// SYSCALL_MODULE(syscall, &offset, &hello_sysent, load, NULL); \ No newline at end of file diff --git a/docs/evaluation/#evaluation-plan.org# b/docs/evaluation/#evaluation-plan.org# index c5a5767..0695114 100644 --- a/docs/evaluation/#evaluation-plan.org# +++ b/docs/evaluation/#evaluation-plan.org# @@ -8,8 +8,8 @@ This will consist of a paragraph of the following structure: ** Expirement setup - Mentions about the CHERI board used. - specs of the board -- mentions about the compiled flag called benchmark ABI.(https://ctsrd-cheri.github.io/morello-early-performance-results/performance-methodology/abis-code-generation-and-compilation.html) -- mentions how the various benchmark are compared and breifly +- mentions about the compiled flag called benchmark ABI. +- mentions how the various bechmark are compared and breifly mentions about the ARM performance counters. ** Performance counters used @@ -20,7 +20,8 @@ This will consist of a paragraph of the following structure: This is more in a bulletin point manner. ** Graphs listed -- Talks about each of the benchmark patterns indenpendently (Bulletin points elaborated). +- Talks about each of the benchmark patterns indenpendently + (Bulletin points elaborated). - Builds up on those with multiple runs. ** Usability: @@ -28,4 +29,4 @@ Talk about the ease of running the new allocator. - Limitaion why certain benchmarks did not work. - The eager Huge page design while designed for fragmentation can still incur fragmentation at a user level. -- How was the memory allocator swapped. +- How was the memory allocator swapped. \ No newline at end of file diff --git a/docs/evaluation/evaluation-plan.org b/docs/evaluation/evaluation-plan.org index 7fb1131..a15f43e 100644 --- a/docs/evaluation/evaluation-plan.org +++ b/docs/evaluation/evaluation-plan.org @@ -20,7 +20,8 @@ This will consist of a paragraph of the following structure: This is more in a bulletin point manner. ** Graphs listed -- Talks about each of the benchmark patterns indenpendently (Bulletin points elaborated). +- Talks about each of the benchmark patterns indenpendently + (Bulletin points elaborated). - Builds up on those with multiple runs. ** Usability: diff --git a/docs/evaluation/evaluation.html b/docs/evaluation/evaluation.html new file mode 100644 index 0000000..c8a446e --- /dev/null +++ b/docs/evaluation/evaluation.html @@ -0,0 +1,482 @@ + + + + + + + + + + + + + +
+ +
+

1. Evaluation

+
+

+We conducted tests of the FAT Pointer-based range addresses against Jemalloc, +the default memory allocator for CHERIBSD(, ), to assess the performance improvements +enabled by a CHERI-based huge page-aware allocator. Specifically, we evaluated +the reduction in TLB misses and its impact on overall +performance metrics, such as wall clock runtime. +

+ +

+To comprehensively analyze the proposed allocator, we categorized benchmarks into +two classes which are micro and macro benchmarks. Micro benchmarks comprise smaller +C programs designed to target specific allocator patterns, enabling us to evaluate +detailed aspects of the allocator's behavior. Macro benchmarks, on the other hand, +encompass larger, real-world C programs, allowing us to assess the allocator's +performance in more practical, real-world scenarios. +

+ +

+The experiment setup details the software stack used for evaluation. It includes +the specific configurations, compiler options, and system environment tailored +to benchmark the proposed allocator. This ensures consistency and repeatability +in our results, providing a solid foundation for meaningful comparisons. +

+ +

+We further elaborated on the two classes of benchmarks executed. Micro benchmarks +focused on particular allocation and deallocation patterns, such as sequential and +random memory accesses, to stress-test the allocator under controlled conditions. +Macro benchmarks involved real-world applications, offering insights into how +the allocator performs with complex memory allocation demands, large datasets, +and varying execution contexts. +

+ +

+The results section presents the outcomes of our benchmarks, highlighting key metrics +such as TLB miss rates, memory usage, and runtime performance. We observed that the +proposed allocator demonstrated significant improvements in reducing TLB misses, +leading to noticeable enhancements in runtime efficiency for both micro and macro +benchmarks. The behavior of specific allocation patterns and their impact on memory +performance is detailed, providing a nuanced understanding of the allocator's effectiveness. +

+ +

+Based on the evaluated results, the usability of the proposed allocator shows promise +for applications requiring optimized memory management and reduced overhead from TLB misses. +However, limitations were also identified, such as scenarios where the allocator's performance +gains were marginal or where it introduced additional complexity in memory management. These +limitations provide a roadmap for future optimizations and refinements of the allocator design. +

+
+ +
+

1.1. Expirement setup

+
+

+The CHERI Morello board was used to evaluate the proposed memory allocator. +Morello implements the ARM A76 with enhanced server-class memory, featuring a +quad-core ARM CPU with capability extensions. The L1 and L2 caches were modified +to proliferate the capability bit, ensuring compatibility with CHERI's capability-based +memory model. When compiling the C programs for benchmarking, the Benchmark ABI was +used as recommended by the CHERI community. This compilation mode was enabled using +the Clang compiler. +

+ +

+The Benchmark ABI was specifically designed because the Morello branch predictor +was not expanded to predict bounds. Consequently, a capability-based jump introduces +stalls in later PCC-dependent instructions until bounds are established. This issue +is particularly significant during dynamically linked calls and returns between +libraries, where bounds are changed to cover the called or returned-to library. +Such stalls can negatively affect performance, making the Benchmark ABI an essential +consideration for this evaluation. +

+ +

+Each C program was executed using two different memory allocators. The first was +the modified C allocator, imported as a header file. This approach was necessary +because the Benchmark ABI shared object file exhibited unexpected behavior, +failing to overwrite the C program at runtime with the intended malloc functions. +The second allocator was the standard OS memory allocator, which, in the case of +CHERIBSD, is Jemalloc. +

+ +

+Performance measurements were carried out using ARM performance counters to +ensure accurate evaluation. These counters provided detailed metrics, allowing +us to compare the performance of the two allocators and assess the impact of +the proposed changes. +

+
+ +
+

1.1.1. Performance counters used

+
+ + + + + + + + + + +
+  Performance counter                               + +  Description                                 +
+  Wall clock                                       
+                                                   
+                                                   
+  (p/l1d_tlb_rd) L1 data TLB reads                 
+                                                   
+  (p/l2d_tlb_rd) L2 data TLB reads                 
+                                                   
+  (p/l1d_tlb_refill) L1 data TLB refills           
+                                                   
+                                                   
+                                                   
+                                                   
+                                                   
+                                                   
+                                                   
+                                                   
+                                                   
+  (p/cpu_cycles) CPU cycles                        
+                                                   
+                                                   
+                                                   
+                                                   
+                                                   
+                                                   
+  (p/dtlb_walk) Data TLB walks                     
+                                                   
+                                                   
+  (p/ll_cache_miss_rd) Last level cache miss reads 
+                                                   
+                                                   
+                                                    +
+  The actual time taken from the start of a  
+  computer program to the end.               
+                                             
+  Level 1 data TLB access, read              
+                                             
+  Level 2 data TLB access, read              
+                                             
+  Level 1 data TLB refill.                   
+  The Level 1 data TLB refill                
+  counter tracks each access to              
+  the L1D_TLB that results                   
+  in a refill of the Level 1 data            
+  or unified TLB. This includes any          
+  access that requires a memory lookup       
+  due to a translation table walk            
+  or accessing another level of TLB cache.   
+                                             
+  The CPU CYCLES counter increases with      
+  every clock cycle. However, it can be      
+  affected by changes in clock frequency,    
+  such as when WFI (Wait for Interrupt)      
+  or WFE (Wait for Event)                    
+  instructions pause the clock.              
+                                             
+  Data TLB access with at least              
+  one translation table walk.                
+                                             
+  Last level cache miss, read                
+  (This refers to every miss in the          
+  Last level cache that occurs               
+  during a memory read operation.)            +
+
+
+ +
+

1.1.2. Benchmarks

+
+

+The benchmarks are classified into 2 classes: +

+
+ +
    +
  1. Micro benchmark
    +
    +
      +
    • GLIBC: The Glibc benchmark evaluates the performance of +malloc and free functions in single-threaded, multi-threaded, +and emulated multi-threading scenarios using various block sizes and +allocation patterns. It simulates real-world memory usage by partially +deallocating blocks in FIFO order and fully deallocating them in LIFO order. +Results are gathered across configurations to analyze performance variations.
    • +
    • MemAccess: This benchmark by Alex Bordei evaluates the performance impact of +memory access patterns by constructing and traversing a doubly +linked list with varying working set sizes. It supports sequential or +randomized structures, optional node operations, and multithreaded +traversal using pthreads. The program dynamically allocates memory and systematically +doubles the working set size to analyze memory hierarchy behavior.
    • +
    +
    +
  2. + +
  3. Macro runs
    +
    +
      +
    • Kmeans: Kmeans implements a parallelized K-means clustering algorithm that +assigns data points to clusters based on proximity to centroids, +iteratively updating them until convergence. The computation is +distributed across threads using the pthread library, dynamically +assigning tasks to optimize performance. Parameters like data size +and clusters are configurable, and the program ensures efficient +memory management and synchronization.
    • +
    • Richards: Richards is a task scheduling benchmark that simulates a +multitasking environment with tasks of varying types and priorities, +communicating through queued packets. The schedule function manages +task execution based on state and priority, tracking processed packets +and held tasks for performance evaluation. Configurable iterations and +timing help measure system performance and ensure correctness.
    • +
    +
    +
  4. +
+
+
+ +
+

1.2. Results

+
+ +
+

allbenchmarks.png +

+
+ + +
+

kmeans.png +

+
+ + +
+

glibc.png +

+
+
+
+ +
+

1.3. Usability

+
+
+
+
+

Author: Akilan

+

Created: 2025-01-12 Sun 17:26

+

Validate

+
+ + \ No newline at end of file diff --git a/docs/evaluation/evaluation.org b/docs/evaluation/evaluation.org index a34d6c2..724f72c 100644 --- a/docs/evaluation/evaluation.org +++ b/docs/evaluation/evaluation.org @@ -196,12 +196,113 @@ The benchmarks are classified into 2 classes: #+ATTR_ORG: :align center [[./diagrams/allbenchmarks.png]] +#+BEGIN_COMMENT +The graph above refers to the precentage difference between the modified +memory allocator against the default system memory allocator which is +Jemalloc. Since FAT pointer memory allocator is desgined to allocate +with huge pages the results in graph above has the appripirate +expected corresponding behavoir. It is noticable the data +TLB walk, L2 data TLB reads and refill are consistently +90% lesser than the default memory allocator accross +the benchmarks listed on the graph above. This is +because of a single huge page entry at the l1 TLB +layer. This means most address translations hit L1 +TLB without having to walk through the heirarchy of +TLB translations. + +The micro benchmarks are designed for more memory reads +and shows on average a 50% reduction on wallclock runtimes. +The macro benchmarks on the other hand which are larger +classes of C programs have minimal differences in wall +clock run times. +#+END_COMMENT + + +The graph above highlights the performance comparison between the modified memory allocator and +Jemalloc, the default memory allocator. The FAT pointer memory allocator, specifically optimized +for use with huge pages, demonstrates a clear advantage in scenarios where memory allocation +patterns benefit from its design. The results align with expectations, showcasing the impact +of its capability to handle memory more efficiently by leveraging huge pages. + +A particularly striking observation is the significant reduction in data TLB walks, +L2 data TLB reads, and TLB refills—consistently showing a 90% decrease across all +benchmarks compared to Jemalloc. This improvement is due to the modified allocator's +use of a single huge page entry at the L1 TLB layer. By enabling most address translations +to be resolved directly at the L1 TLB, the need to walk through the deeper TLB hierarchy is +largely eliminated. This reduction in translation overhead is a key factor in the allocator's +superior performance for certain types of workloads. + +The micro benchmarks, which are crafted to emphasize memory read operations, highlight the +allocator's strengths. These tests simulate frequent and intensive memory access patterns, +where the reduction in TLB misses directly translates into measurable performance gains. +On average, the FAT pointer allocator achieves a 50% reduction in wall clock runtimes for +these workloads, underscoring its ability to optimize high-throughput memory operations. + +On the other hand, macro benchmarks, which represent larger and more complex real-world applications, +exhibit minimal differences in wall clock runtimes when using the FAT pointer allocator. +This outcome is expected, as macro benchmarks typically involve a broader range of operations +beyond memory allocation, diluting the impact of the allocator's optimizations. Additionally, +the benefits of huge pages may be less pronounced for these workloads, as they are often +bottlenecked by factors such as computation or I/O rather than memory translation overhead. + #+ATTR_HTML: :align right #+ATTR_ORG: :align center [[./diagrams/kmeans.png]] +#+BEGIN_COMMENT +The kmeans was executed with various cluster sizes to see +the percentage difference against the baseline allocator as +the size of the workload increases. It can be noted that +the percentage difference stays the same except during +the cluster size of 2000. +#+END_COMMENT +The K-means algorithm was executed with varying cluster sizes to evaluate the performance difference +between the FAT pointer allocator and the baseline allocator as the workload scales. This analysis +aimed to understand how the allocator's optimizations, particularly its ability to manage memory +more efficiently with huge pages, impact performance under different workload conditions. + +For most cluster sizes tested, the percentage difference in performance remained relatively +consistent. This indicates that the allocator's efficiency scales predictably with increasing +workload sizes, suggesting a stable and uniform benefit across different configurations. The +consistent performance gain is likely due to the allocator's ability to minimize TLB misses +and efficiently manage memory allocations for the centroid and data point structures used in +the K-means algorithm. + +However, an anomaly was observed at a cluster size of 2000, where the percentage difference +deviated significantly from the trend. This irregularity could be attributed to several factors. +At this cluster size, the memory access patterns and allocation behavior may align in a way that +temporarily offsets the advantages of the FAT pointer allocator. For example, the memory layout +might interact with system-level caching mechanisms or TLB behavior differently, leading to an +unexpected change in performance. Additionally, the increased complexity of managing a higher +number of clusters might introduce computational overhead that overshadows the memory allocator's +optimizations. + +This observation highlights the importance of testing across a range of workload sizes and +configurations to uncover edge cases or specific scenarios where performance deviates from the +expected pattern. Understanding these anomalies can provide insights into the allocator's +behavior and guide future improvements to address such outliers. Despite the deviation at a +cluster size of 2000, the overall results reaffirm the allocator's capability to maintain +consistent performance benefits across most scenarios. + +#+BEGIN_COMMENT #+ATTR_HTML: :align right #+ATTR_ORG: :align center [[./diagrams/glibc.png]] - +#+END_COMMENT ** Usability +The FAT pointer memory allocator demonstrates significant potential for enhancing +memory management in systems that benefit from huge page optimizations. Its design +effectively reduces TLB misses, achieving up to 90% fewer data TLB walks, L2 TLB reads, +and TLB refills compared to Jemalloc. These improvements lead to noticeable performance +gains, especially in micro benchmarks, where the allocator reduces wall clock runtimes +by an average of 50%. + +The allocator integrates seamlessly into memory-intensive workloads, as evidenced by its +consistent performance across varying cluster sizes in the K-means benchmark, with only +minor anomalies observed under specific conditions. These outliers provide valuable +insights into the allocator's interaction with system-level caching and memory translation mechanisms. + +While the allocator excels in scenarios emphasizing high memory throughput, its impact on +macro benchmarks is less pronounced. This suggests that its benefits are most relevant for +applications with frequent and intensive memory operations rather than those constrained by +computation or I/O bottlenecks. \ No newline at end of file diff --git a/docs/evaluation/evaluation.pdf b/docs/evaluation/evaluation.pdf index cecc05ddb2c5c6c1f7cec032f7aa7a81a26f05f8..93ec0eba27d8f67f1fd6f9be4619b9a071e87e4a 100644 GIT binary patch delta 36050 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 delta 80168 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%0D-}<2a)f9pN1-KOb;@bY4*Y*!6=(H-=&XI|K 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 Hqm20