TLSFMem

TLSF (Two-Level Segregate Fit) to implementacja nowego systemu alokacji pamięci – pierwszy raz na ten temat pisali włoscy programiści M. Masmano, I. Ripoll i A. Crespo w publikacji naukowej z 2005 roku. Podstawowe założenie algorytmu to zmniejszenie fragmentacji pamięci. Proces rezerwowania i zwalniania obszarów pamięci wykonywany jest bez przerwy, bez względu na poziom jej fragmentacji. Ponadto TLSF jest alokatorem typu „Exact Fit” wzgl. „Good Fit” tzn. ciągle poszukiwany jest blok pamięci, który odpowiada (możliwie blisko) poszukiwanej wielkości pamięci. To również zmniejsza poziom fragmentacji.

http://www.gii.upv.es/tlsf/main/used

Amigową wersję TLSFMem przygotował Chris Hodges. Zastępuje standardowy mechanizm systemowy, stworzony dla AmigaOS i łatwo się z nim integruje. Współpracuje z FlashRom lub Custom-Kickstarts (tylko TLSFMem). Kompatybilność z oprogramowaniem napisanym zgodnie z dokumentacją systemową jest bardzo wysoka. Dokładne informacje dotyczące działania programu, wady i zalety rozwiązania, a także wskazania i przeciwskazania znajdują się w dokumentacji.
TLSFMem ma status freeware, autor będzie cieszył się ze wszystkich form podziękowania za pracę.

TLSFMem nakłada łatki na następujące funkcje exec.library:
– AllocMem()
– FreeMem()
– AvailMem()
– AllocAbs()
– Allocate()
– Deallocate()
– AddMemList()

TLSFMemPool zawiera powyższe i jeszcze dodatkowo cztery:
– CreatePool()
– DeletePool()
– AllocPooled()
– FreePooled()

TLSFMem1

TLSFMem2

TLSF możemy również umieścić w naszym Custom ROM, ale uwaga tylko samego TLSFMem bez TLSFMemPool. Jeśli się zdecydujemy na uruchamianie już na tak wczesnym etapie musimy zastosować poprawkę (odpowiedni patch) do scsi.device, która ma jakiś błąd uniemożliwiający start TLSF w CustomROM.
Na mojej konfiguracji z kontrolerem Blizzard SCSI Kit udało się uruchomić amigę pewnym trikiem
i zobaczyć na liście rezydentnych modułów nowego allokatora TLSF, ale niestety u mnie nie zadziałał (nie daje przyspieszenia – nie jest w ogóle aktywny).
Może sterownik 1230scsi.device gryzie się z TLSF lub jakiś inny moduł którego używam… Pozostaje mi odpalać TLSF ręcznie lub z sekwencji startowej.
TLSF_Allocator_residents

 

Oryginalna wersja 1.6 (Chris Hodges) została zoptymalizowana przez Cosmos:

TLSFMem v1.9 (2372 bytes)
– v1.8 -> v1.9
– misc optimization here and here
– 376 bytes saved

TLSFMem v1.8 (2488 bytes)
– v1.7 -> v1.8
– TLSF_AllocMem_020 optimized
– TLSF_FreeMem_020 optimized
– TLSF_AvailMem_020 optimized
– TLSF_AllocAbs_020 optimized
– TLSF_Allocate_020 optimized
– TLSF_Deallocate_020 optimized
– TLSF_AddMemList_020 optimized
– 260 bytes saved

TLSFMem v1.7 (2728 bytes)
– v1.6 -> v1.7
– Works with exec.library v45.22+
– 20 bytes saved

TLSFMem v1.6 (2748 bytes)
– by Chris Hodges

 

Test wydajności programem Allocatorbenchmark (Uwaga: program ten nie potrafi mierzyć wydajności MemoryPool). Konfiguracja testowa Blizzard 1260/50, 128MB Fast

exec.library 45.20 – AmigaOS3.9 BB2
AllocatorBenchmark RANDOMLY
Time: 18.564 secs for 50000 Allocs and 49998 free Ops. Largest: 88909880

exec.library 45.25.28 – Cosmos
AllocatorBenchmark RANDOMLY
Time: 19.420 secs for 50000 Allocs and 49998 free Ops. Largest: 88902376


<< TLSFMem >>

AllocatorBenchmark RANDOMLY
Time: 0.896 secs for 50000 Allocs and 49998 free Ops. Largest: 88944824

Komentowanie jest wyłączone