3,075 research outputs found
Storage Coalescing
Typically, when a program executes, it creates objects dynamically and requests storage for its objects from the underlying storage allocator. The patterns of such requests can potentially lead to internal fragmentation as well as external fragmentation. Internal fragmentation occurs when the storage allocator allocates a contiguous block of storage to a program, but the program uses only a fraction of that block to satisfy a request. The unused portion of that block is wasted since the allocator cannot use it to satisfy a subsequent allocation request. External fragmentation, on the other hand, concerns chunks of memory that reside between allocated blocks. External fragmentation becomes problematic when these chunks are not large enough to satisfy an allocation request individually. Consequently, these chunks exist as useless holes in the memory system. In this thesis, we present necessary and sufficient storage conditions for satisfying allocation and deallocation sequences for programs that run on systems that use a binary-buddy allocator. We show that these sequences can be serviced without the need for defragmentation. We also explore the effects of buddy-coalescing on defragmentation and on overall program performance when using a defragmentation algorithm that implements buddy system policies. Our approach involves experimenting with Sun’s Java Virtual Machine and a buddy system simulator that embodies our defragmentation algorithm. We examine our algorithm in the presence of two approximate collection strategies, namely Reference Counting and Contaminated Garbage Collection, and one complete collection strategy - Mark and Sweep Garbage Collection. We analyze the effectiveness of these approaches with regards to how well they manage storage when we alter the coalescing strategy of our simulator. Our analysis indicates that prompt coalescing minimizes defragmentation and delayed coalescing minimizes number of coalescing in the three collection approaches
G Electronics and Data Acquisition (Forward-Angle Measurements)
The G parity-violation experiment at Jefferson Lab (Newport News, VA) is
designed to determine the contribution of strange/anti-strange quark pairs to
the intrinsic properties of the proton. In the forward-angle part of the
experiment, the asymmetry in the cross section was measured for
elastic scattering by counting the recoil protons corresponding to the two
beam-helicity states. Due to the high accuracy required on the asymmetry, the
G experiment was based on a custom experimental setup with its own
associated electronics and data acquisition (DAQ) system. Highly specialized
time-encoding electronics provided time-of-flight spectra for each detector for
each helicity state. More conventional electronics was used for monitoring
(mainly FastBus). The time-encoding electronics and the DAQ system have been
designed to handle events at a mean rate of 2 MHz per detector with low
deadtime and to minimize helicity-correlated systematic errors. In this paper,
we outline the general architecture and the main features of the electronics
and the DAQ system dedicated to G forward-angle measurements.Comment: 35 pages. 17 figures. This article is to be submitted to NIM section
A. It has been written with Latex using \documentclass{elsart}. Nuclear
Instruments and Methods in Physics Research Section A: Accelerators,
Spectrometers, Detectors and Associated Equipment In Press (2007
Analysis of data processing systems
Mathematical simulation models and software monitoring of multiprogramming computer syste
Experimental Implementation for Prefix B-tree and Associated Dynamic Lists
This thesis deals with an experimental implementation of a combined B-tree indexing scheme and a buddy system for organizing and managing key words and inverted lists respectively. Measurements are developed to compare the performance of buddy system variations in terms of execution time and storage utilization.Computing and Information Scienc
A Survey on Cache Management Mechanisms for Real-Time Embedded Systems
© ACM, 2015. This is the author's version of the work. It is posted here by permission of ACM for your personal use. Not for redistribution. The definitive version was published in ACM Computing Surveys, {48, 2, (November 2015)} http://doi.acm.org/10.1145/2830555Multicore processors are being extensively used by real-time systems, mainly because of their demand for
increased computing power. However, multicore processors have shared resources that affect the predictability
of real-time systems, which is the key to correctly estimate the worst-case execution time of tasks. One of
the main factors for unpredictability in a multicore processor is the cache memory hierarchy. Recently, many
research works have proposed different techniques to deal with caches in multicore processors in the context
of real-time systems. Nevertheless, a review and categorization of these techniques is still an open topic and
would be very useful for the real-time community. In this article, we present a survey of cache management
techniques for real-time embedded systems, from the first studies of the field in 1990 up to the latest research
published in 2014. We categorize the main research works and provide a detailed comparison in terms of
similarities and differences. We also identify key challenges and discuss future research directions.King Saud University
NSER
Embedded dynamic memory allocator optimisation
The objective of this thesis was to improve upon the dynamic memory allocator used in U-Blox GNSS receivers. After initial analysis, the main weakness of the currently used Buddy allocator was determined to be high fragmentation, so lowering this was the focus.
To understand the problem better and find possible alternatives to Buddy, a literature survey was conducted. The survey examined the fundamental building blocks of dynamic memory allocation and how they could be combined for desired results. Using knowledge gained from the survey, a number of allocators were chosen for further examination. Among them, the most promising were two real-time allocators TLSF and a Half Fit variant called O1Heap due to their focus on integrity and more constrained heaps.
After preliminary testing, two more allocators were considered as a response to the observed shortcomings of previously mentioned allocators. First was Half Fit CSTM, which makes slight modifications to the Half Fit algorithm trading constant execution time for lower fragmentation. The second allocator is Half Tree, which is a new allocator created in the scope of this research. It aims to address the weaknesses of the other considered allocators and achieve good results in all required aspects.
A testing framework was designed and implemented to assist in evaluating each allocator’s suitability as an alternative for the Buddy allocator. Performance tests measured each allocator’s average and worst execution times while fragmentation tests measured the required heap size and other metrics for fragmentation. The tests were run on a real device to provide more accurate results. Testing focused on real allocation sequences (memory traces) gathered from a production device, but synthetic traces were also included. All allocators went through the same tests, and their results were compared to those of the Buddy allocator.
Out of the 4 allocators considered, TLSF and Half Tree were determined to be the most suitable. Half Tree was deemed superior to TLSF because of much better performance while still having low fragmentation. Finally, Half Tree reduces fragmentation to approximately 15% to that of Buddy while only being 0–15% slower in real trace test scenarios. It requires 25% less heap for the same memory traces.
Overall, the thesis objectives have been met. Half Tree allocator provides a significant improvement in memory efficiency over Buddy while maintaining comparable performance.Työn tavoitteena oli parantaa U-Bloxin GNSS laitteissa käytettyä muistiallokaattoria. Alustavan analyysin perusteella, nykyisen Buddy-allokaattorin heikkoutena oli korkea fragmentaatio, joten tutkimuksen pääpainona oli tämän alentaminen.
Ongelman ja sen taustojen ymmärtämiseksi, sekä parempien allokaattorien löytämiseksi, tehtiin työn alussa kirjallisuusselvitys. Selvityksen avulla määriteltiin dynaamisen muistinhallinan perusteet ja kuinka niiden avulla voidaan rakentaa halutunlaisia allokaattoreita. Selvityksen osana tarkasteltiin useita erilaisia allokaattoreita ja päädyttiin lopulta valitsemaan 2 allokaattoria tarkempaa tutkimusta varten. Nämä olivat reaaliaika käyttöön suunnitellut ja laajalti tunnetut TLSF ja Half Fit variantti O1Heap.
Alustavien kokeiden perusteella, toteutettiin kaksi uutta allokaattoria vastaamaan kokeissa havaittuihin TLSF:n ja O1Heapin heikkouksiin. Ensimmäisenä Half Fit CSTM, joka tekee pieniä muutoksia Half Fittiin vaihtaen vakioaikaisen suorituksen matalampaan fragmentaatioon. Half Tree puolestaan on uusi allokaattori suunniteltu tätä tutkimusta varten. Sen tavoitteena oli vastata muiden allokaattereiden heikkouksiin ja suoriutua hyvin kaikilla osa-alueilla.
Allokaattoreiden soveltuvuutta Buddyn korvaajaksi arvioitiin kokeellisesti. Kokeiden avulla mitattiin allokaatoreidenn keskimääräistä suorituaikaa, huonointa suoritusaikaa sekä fragmentaatiota ja muistintarvetta. Koejärjestelyt suunniteltiin ja toteutettiin kohdelaitteella tulosten todenmukaisuutta ajatellen. Kokeet keskittyivät laitteelta kerättyihin oikeisiin muistijälkiin, mutta myös synteettisiä muistijälkiä hyödynnettiin. Kaikille 4 allokaattorille suoritettiin samat kokeet ja niiden tuloksia verratiin Buddy -allokaattoriin ja toisiinsa.
Valituista allokaattoreista TLSF ja Half Tree osoittautuivat parhaiten soveltuviksi. TLSF on kuitenkin erittäin hidas verrattuna Buddy -allokaattoriin. Half Tree puolestaan on selvästi parempi, tarjoten edelleen matalan fragmentation, mutta ilman merkittävää kompromissia suorituskyvyssä. Half Treen fragmentaatio on noin 15% Buddy-allokaattorin fragmentaatiosta ja suorituskyky heikkenee vain 0–15% muistijäljestä riippuen. Vaaditun muistin määrässä alempi fragmentaatio tarkoittaa noin 25% parannusta.
Työ täytti sille asetetut tavoitteet. Half Tree allokaattori tarjoaa merkittävän parannuksen muistitehokkuudessa Buddy-allokaattoriin verrattuna, tekemättä suuria uhrauksia suorituskyvyssä
Recommended from our members
Intelligent Memory Manager: Towards improving the locality behavior of allocation-intensive applications.
Dynamic memory management required by allocation-intensive (i.e., Object Oriented and linked data structured) applications has led to a large number of research trends. Memory performance due to the cache misses in these applications continues to lag in terms of execution cycles as ever increasing CPU-Memory speed gap continues to grow. Sophisticated prefetcing techniques, data relocations, and multithreaded architectures have tried to address memory latency. These techniques are not completely successful since they require either extra hardware/software in the system or special properties in the applications. Software needed for prefetching and data relocation strategies, aimed to improve cache performance, pollutes the cache so that the technique itself becomes counter-productive. On the other hand, extra hardware complexity needed in multithreaded architectures decelerates CPU's clock, since "Simpler is Faster." This dissertation, directed to seek the cause of poor locality behavior of allocation--intensive applications, studies allocators and their impact on the cache performance of these applications. Our study concludes that service functions, in general, and memory management functions, in particular, entangle with application's code and become the major cause of cache pollution. In this dissertation, we present a novel technique that transfers the allocation and de-allocation functions entirely to a separate processor residing in chip with DRAM (Intelligent Memory Manager). Our empirical results show that, on average, 60% of the cache misses caused by allocation and de-allocation service functions are eliminated using our technique
Storage management in Ada. Three reports. Volume 1: Storage management in Ada as a risk to the development of reliable software. Volume 2: Relevant aspects of language. Volume 3: Requirements of the language versus manifestations of current implementations
The risk to the development of program reliability is derived from the use of a new language and from the potential use of new storage management techniques. With Ada and associated support software, there is a lack of established guidelines and procedures, drawn from experience and common usage, which assume reliable behavior. The risk is identified and clarified. In order to provide a framework for future consideration of dynamic storage management on Ada, a description of the relevant aspects of the language is presented in two sections: Program data sources, and declaration and allocation in Ada. Storage-management characteristics of the Ada language and storage-management characteristics of Ada implementations are differentiated. Terms that are used are defined in a narrow and precise sense. The storage-management implications of the Ada language are described. The storage-management options available to the Ada implementor and the implications of the implementor's choice for the Ada programmer are also described
- …