Appendix E. Changes Between ReleasesΒΆ
This Appendix contains a list of changes between the releases of 60East MTS.
August 1st, 2017 Version 7.13.6
- Fixed memory alignment for Huge Pages Mode
- Changed Documentation to HTML Format
- Added Documentation for Environment Variables
February 9th, 2016 Version 7.13.5
- removed a runtime check from page table lookup that could cause a segv
- added random size allocation test pcRandomMiddle.cc
January 21st, 2016 Version 7.13.4
- update fix for middle allocator race condition won’t initiate coalescing in malloc() if free() is called on adjacent pages.
Sept. 5th, 2015 Version 7.13.2
- updated fix for race condition in middle allocator to defer free()
- if acquiring page object exceeds time limit
- fixed double delete detection broken in 7.12.2
- speeded up cross thread delete for small sizes (<= 4096)
- added huge page support. works for RH6 and later
- added env variables to control prefaulting and mmap() flags
- added flags for small/large heap set sizes to control mmap flags
May 4th, 2015 Version 7.12.2
- fixed race condition in middle allocator that would cause segv in free()
- fixed message handler to conform to mts.h guidelines
January 14, 2015 Version 7.12.1
- improved effeciency for free list processing
- change MTSPoolFree to use internal free
- “out of space” message for page index update
April 7, 2014 Version 7.12.0
- added const char* mts_version()
- added compilation test to make sure internal and external versions match
March 31st, 2014 Version 7.11.0
- added functions to collect active as well as inactive thread stats mts_collect_active_pthread_stats() and mts_collect_inactive_pthread_stats()
- revamped error_callback handling to accomodate recursive malloc calls from the error_callback and to limit the number of recursive errors that might result. Number of recursion default to 10, but can be set by mts_callback_recursion_max(int). Also, added an emergency 1 Megbyte private heap to provide support for error_callback malloc processing.
- added int mts_check_consistency(int options) designed to be called on exit to check internal mts data structures and report on any abnormalities. No options currently. Note, that this is experimental for now and should be extensively tested before used in production.
January 20th, 2014 Version 7.10.2
- implemented mts stats based on pthread usage mts_collect_pthread_stats()
- improved the speed of cross thread free()
Dec 10th, 2013 Version 7.10.1
- fixed an issue with lwpool memory reuse
- changed spin locks back to nanosleep with an initial spin count of 1000
Sept 20th, 2013 Version 7.9.6
Summary of important changes from 7.9.2 to current
- The stats have been incorrect. Under various scenarios, mts_total_heap_stats1() has returned incorrect results.
- Internal MTS error handling has not always remedied the error resulting in repeated error messages for the same error. Errors are typically overwrites of internal MTS free lists and double deletes.
- MTS now initializes itself when loaded rather than when first called. This results in MTS atfork handlers being called later in the fork process and earlier when forking is complete. In practical terms this means that malloc/free works for more libraries during the forking process.
- 4%- 5% performance improvement due to minor code changes.
- The release process has been automated, functional and performance tests have been added to the release. An mts disable library has been added to the release as 3rd/mts/7.9.6/disable and the mdb library has also been included in the release as 3rd/mts/7.9.6/mdb . Both the disable and mdb libraries are now called libmts.so
June 14th, 2013 Version 7.9.5
- fixed error handling for memory overwrites which generated multiple error messages for the same overwrite.
- added hardening to local and global page lists
- fixed stats of large blocks that weren’t aligned on 16k boundries
- fixed ‘out of memory handler’ trying non local heaps looking for available memory
- fixed ‘out of memory’ returning wrong error message
- changed valloc to use memalign
May 17th, 2013 Version 7.9.4
- fixed stats error. Large block allocations (default >512k ) were not updating total heap space. Current bytes was accurate.
- rolled back attempts to process malloc calls during fork. mts cannot process malloc calls after its parent fork handler is called (neither can any other allocator). This implies that mts fork handlers should be regestered, i.e. mts initialized, before any other app libraries. Changed mts library to initialize on load via DT_INIT rather than on first malloc/free call.
- changed spin locks back to using sched_yield. calling nanosleep without increasing the spin count was causing a performance drop
April, 4th, 2013 Version 7.9.3d
- fixed another atfork problem caused by popen(). This time had a repeatable error to work with.
January 29th, 2013 Version 7.9.3c
- fixed a config error that caused large heaps to initialize to 1Gig
Novemeber 27th., 2012 Version 7.9.3b
- fixed atfork locking problem uncovered by popen()
July 9th, 2012 Version 7.9.3a
- fixed MTSPoolGet to not fault on out of bounds address and check for mts initialized
June 8th. 2012 version 7.9.3
- turned off initial prefault for initial mmap’ed memory
- added MTSPreFaultPrev to mts_set_small(large)_heap_size options. this will prefault existing mmapped memory.
May 29th., 2012 Version 7.9.3
- changed locks to use nanosleep rather than sched_yield.
- prefault all initial mmap’ed memory from the OS.
- add a prefault flag to calls controlling heap sizes.
- fixed a bug in light weight pools dynamic growth.
Dec 16th., 2011 Version 7.9.2
- new light weight pools, details in mts.h
- new calls to control sizing of heaps, details in mts.h
Nov 27th. Version 7.9.1
- adjusted page recycling to store pages locally before putting them on the global list
- fixed free() of pool allocations. Broken in 7.9.0
Oct 26th. Version 7.9.0
- new large allocator uses mmap directly
- changes to the small allocator page usage
- reduced OS memory grabs from 1 meg to 256k
- reduced self memory usage
Sep 9th. 2011 Version 7.8.9
- updated MTSPoolCreate to V3. now using bitmap options instead of enums
- dropped support for previous versions of MTSPoolCreate
Aug. 25th., 2011 Version 7.8.8
- improved memalign performance (the 7.8.2 locking bug also affected memalign)
- added unified callback to map memory under user control for pools as well as the general allocator
July 26th, 2011 Version 7.8.7a
- fixed incorrect pool heap size for Private and Shared pools
July 18th, 2011 Version 7.8.7
- removed the automated recognizion of mts_user_memory_callback.
- use mts_set_memory_callback to override internal mmap calls for standard malloc library calls
Version 7.8.6 July 14th, 2011
- If
extern "C" void* *mts_user_memory_callback (size_t length)
is - defined in a library linked to the app, MTS will use this call instead of
- its internal call to sbrk/mmap
Version 7.8.5 July 13th, 2011
- Modified MTSPoolCreateV2 to include a flag that controlls user/mts unmapping of memory
- fixed Private pools not to grab additional memory from the OS
Version 7.8.4 July 12th, 2011
- Created a unified MTSPoolCreateV2 that handles internal, private and shared pools.
- Fixed a problem with the user unmapping memory for private Pools.
Version 7.8.3 July 7th, 2011
- fixed MTSPoolDestroy to not unmap memory for SHARED OR PRIVATE pools.
Version 7.8.2 June 14th, 2011
- fixed a locking bug in pools that should be thread safe.
April 21, 2011 Version 7.8.1
- Added a MTSPoolCreateV1 to support pools in user supplied memory that isn’t shared
- modified page recycling
April 3rd, 2011 Vesrion 7.8.0
- changed free list corruption and double delete detection
- min allocation is now one pointer (was two)
March 1, 2011
Version 7.7.8
- Added external linkage for MTSPoolAllocSize
- Fixed a deferred free when used on an MTSPool allocation
Nov 1st., 2010
Version 7.7.7
- fixed 8 byte truncation of pointers in error messages
Sept. 23, 2010
Version 7.7.6
- increased small size allocator to 4k sizes
- changed linux deferred free locking
Sept. 15th, 2010
Version 7.7.5
- To avoid fragmentation, gathered all large allocations into one virtual heap This stops smaller allocations from breaking up large allocations (>64k) that might be repeatadly re-used. Losses some parallelism.
- fixed an edge case in double delete detection
May 11th, 2010
- fixed byte_count initialization. No version change.
May 3rd, 2010
Version 7.7.4
- changed MTS to handle tls being used before MTS initilization
January 24, 2010
Version 7.7.3
- added double delete detection
- enabled a bad free error message for middle allocator
January 7, 2010
Version 7.7.2e
- improved cross thread de-allocation
October 29th, 2009
Version 7.7.2d
- Enabled MTS_ABORT_ON_NO_SPACE
October 27th, 2009
Version 7.7.2c
- fixed a locking issue with cross thread de-allocations.
Ocotber 22nd, 2009
Version 7.7.2b
- released with stats and free list hardening turned on.
October 15th., 2009
Version 7.7.2a
- fixed an mts initialization problem if a call to create a shared memory pool was the first call to mts
October 1st., 2009
Version 7.7.2
- fixed posix_memalign signiture
- created memalign subsystem within mts
September 25, 2009
Version 7.7.1a
- added posix_memalign to list of extern entry points
September 17, 2009
Version 7.7.1
- eliminated most locking on cross thread de-allocations resulting in significant speed improvement
- eliminated collecting allocation/free type info (small/middle/large) also to improve speed.
March 28, 2009
Version 7.7.0
- improved coalescing of memory
- added more extensive reporting
Sept 25, 2008
Version 7.6.2 - HP-UX 11i v3 pa-risc port - fixed a problem with pool locking during MTSPoolDestroy - using pthread locks for HP port
Sept 15, 2008
- HP-UX 11i v3 ia64 port.
August 12, 2008
- fixed a startup problem under fedora 8 (first allocation larger than 1k)
July 15th, 2008
- Simplyfied global page list queues.
- Fixed a pooling create problem. Was linking pool into the global pool list before pool was fully initialized. Doesn’t apply to pools in mapped space.
- Fixed forking issue.
July 6th, 2008
Version 7.5.2
- Fixed initialization problem that resulted in a SIGFPE
July 1st, 2008
Version 7.5.1
- Fixed a race condition for threads calling malloc for the first time that resulted in corrupted data structures. Programs would die in various ways including hanging in a loop or outputing bad free messages and coring. This bug exists on all version 7 releases.
May 30th, 2008
Version 7.5
- updated pool in shared memory interface to accomodate restarting pools in shared memory for a new process.
April 17th, 2008
Version 7.4
- Add user defined space to pool interface