summaryrefslogtreecommitdiff
path: root/lib/libc/stdlib
Commit message (Collapse)AuthorAgeFilesLines
...
* Unbreak ia64: pges are 8KB.Marcel Moolenaar2008-09-061-1/+1
| | | | Notes: svn path=/head/; revision=182809
* Add thread-specific caching for small size classes, based on magazines.Jason Evans2008-08-273-256/+1133
| | | | | | | | | | | | | | | | | | | | | | | | | | | This caching allows for completely lock-free allocation/deallocation in the steady state, at the expense of likely increased memory use and fragmentation. Reduce the default number of arenas to 2*ncpus, since thread-specific caching typically reduces arena contention. Modify size class spacing to include ranges of 2^n-spaced, quantum-spaced, cacheline-spaced, and subpage-spaced size classes. The advantages are: fewer size classes, reduced false cacheline sharing, and reduced internal fragmentation for allocations that are slightly over 512, 1024, etc. Increase RUN_MAX_SMALL, in order to limit fragmentation for the subpage-spaced size classes. Add a size-->bin lookup table for small sizes to simplify translating sizes to size classes. Include a hard-coded constant table that is used unless custom size class spacing is specified at run time. Add the ability to disable tiny size classes at compile time via MALLOC_TINY. Notes: svn path=/head/; revision=182225
* Remove grantpt.c, which should have been deleted in the MPSAFE TTY commit.Ed Schouten2008-08-201-286/+0
| | | | | | | | | The routines in grantpt.c have been moved to ptsname.c in the MPSAFE TTY layer, because grantpt() is now effectively a no-op. I forgot to remove the corresponding source file from libc. Notes: svn path=/head/; revision=181915
* Integrate the new MPSAFE TTY layer to the FreeBSD operating system.Ed Schouten2008-08-204-100/+129
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | The last half year I've been working on a replacement TTY layer for the FreeBSD kernel. The new TTY layer was designed to improve the following: - Improved driver model: The old TTY layer has a driver model that is not abstract enough to make it friendly to use. A good example is the output path, where the device drivers directly access the output buffers. This means that an in-kernel PPP implementation must always convert network buffers into TTY buffers. If a PPP implementation would be built on top of the new TTY layer (still needs a hooks layer, though), it would allow the PPP implementation to directly hand the data to the TTY driver. - Improved hotplugging: With the old TTY layer, it isn't entirely safe to destroy TTY's from the system. This implementation has a two-step destructing design, where the driver first abandons the TTY. After all threads have left the TTY, the TTY layer calls a routine in the driver, which can be used to free resources (unit numbers, etc). The pts(4) driver also implements this feature, which means posix_openpt() will now return PTY's that are created on the fly. - Improved performance: One of the major improvements is the per-TTY mutex, which is expected to improve scalability when compared to the old Giant locking. Another change is the unbuffered copying to userspace, which is both used on TTY device nodes and PTY masters. Upgrading should be quite straightforward. Unlike previous versions, existing kernel configuration files do not need to be changed, except when they reference device drivers that are listed in UPDATING. Obtained from: //depot/projects/mpsafetty/... Approved by: philip (ex-mentor) Discussed: on the lists, at BSDCan, at the DevSummit Sponsored by: Snow B.V., the Netherlands dcons(4) fixed by: kan Notes: svn path=/head/; revision=181905
* Move CPU_SPINWAIT into the innermost spin loop, in order to allow fasterJason Evans2008-08-141-2/+3
| | | | | | | | | preemption while busy-waiting. Submitted by: Mike Schuster <schuster@adobe.com> Notes: svn path=/head/; revision=181733
* Re-order the terms of an expression in arena_run_reg_dalloc() to correctlyJason Evans2008-08-141-2/+2
| | | | | | | | | detect whether the integer division table is large enough to handle the divisor. Before this change, the last two table elements were never used, thus causing the slow path to be used for those divisors. Notes: svn path=/head/; revision=181732
* Remove variables which are assigned values and never used thereafter.Colin Percival2008-08-081-5/+1
| | | | | | | | Found by: LLVM/Clang Static Checker Approved by: jasone Notes: svn path=/head/; revision=181438
* Restructure and use different variables in the tests that involveSean Farley2008-08-031-13/+15
| | | | | | | | | | | | environ[0] to be more obvious that environ is not NULL before environ[0] is tested. Although I believe the previous code worked, this change improves code maintainability. Reviewed by: ache MFC after: 3 days Notes: svn path=/head/; revision=181266
* Detect if the application has cleared the environ variable by settingSean Farley2008-08-021-7/+12
| | | | | | | | | | | | | | | | | | | | | | | | | | | the first value (environ[0]) to NULL. This is in addition to the current detection of environ being replaced, which includes being set to NULL. Without this fix, the environment is not truly wiped, but appears to be by getenv() until an *env() call is made to alter the enviroment. This change is necessary to support those applications that use this method for clearing environ such as Dovecot and Postfix. Applications such as Sendmail and the base system's env replace environ (already detected). While neither of these methods are defined by SUSv3, it is best to support them due to historic reasons and in lieu of a clean, defined method. Add extra units tests for clearing environ using four different methods: 1. Set environ to NULL pointer. 2. Set environ[0] to NULL pointer. 3. Set environ to calloc()'d NULL-terminated array. 4. Set environ to static NULL-terminated array. Noticed by: Timo Sirainen MFC after: 3 days Notes: svn path=/head/; revision=181150
* Enhance arena_chunk_map_t to directly support run coalescing, and useJason Evans2008-07-181-394/+338
| | | | | | | | | | the chunk map instead of red-black trees where possible. Remove the red-black trees and node objects that are obsoleted by this change. The net result is a ~1-2% memory savings, and a substantial allocation speed improvement. Notes: svn path=/head/; revision=180599
* - This code was intially obtained from NetBSD, but it's missing licenceDaniel Gerzo2008-07-061-1/+29
| | | | | | | | | | | | statement. Add the one from the current NetBSD version. - Also bump a date to reflect my content changes I have done in previous revision Approved by: imp MFC after: 3 days Notes: svn path=/head/; revision=180329
* - Add description about a missing return valueDaniel Gerzo2008-07-061-2/+6
| | | | | | | | | PR: docs/75995 Submitted by: Tarc <tarc@po.cs.msu.su> MFC after: 3 days Notes: svn path=/head/; revision=180325
* - remove superfluous wordDaniel Gerzo2008-07-061-3/+3
| | | | | | | | | - remove contractions MFC after: 3 days Notes: svn path=/head/; revision=180323
* Mark the section describing return values with an appropriate section flag.Daniel Gerzo2008-06-261-1/+1
| | | | | | | | PR: docs/122818 MFC after: 3 days Notes: svn path=/head/; revision=180024
* Don't export the unused __use_pts() routine.Ed Schouten2008-06-172-2/+1
| | | | | | | | | | | | | The __use_pts() routine was once probably used by libutil to determine if we are using BSD or UNIX98 style PTY device names. It doesn't seem to be used outside grantpt.c, which means we can make it static and remove it from the Symbol.map. Reviewed by: cognet, kib Approved by: philip (mentor) Notes: svn path=/head/; revision=179846
* In the error path through base_alloc(), release base_mtx [1].Jason Evans2008-06-101-3/+7
| | | | | | | | | Fix bit vector initialization for run headers. Submitted by: [1] Mike Schuster <schuster@adobe.com> Notes: svn path=/head/; revision=179704
* Clean up cpp logic and comments.Jason Evans2008-05-141-8/+21
| | | | Notes: svn path=/head/; revision=178995
* Fix a comment.Jason Evans2008-05-031-1/+1
| | | | Notes: svn path=/head/; revision=178744
* Add a separate tree to track arena chunks that contain dirty pages.Jason Evans2008-05-011-157/+133
| | | | | | | | | | This substantially improves worst case allocation performance, since O(lg n) tree search can be used instead of O(n) tree iteration. Use rb_wrap() instead of directly calling rb_*() macros. Notes: svn path=/head/; revision=178709
* Add rb_wrap(), which creates C function wrappers for most rb_*()Jason Evans2008-05-011-36/+194
| | | | | | | | | | | | | macros. Add rb_foreach_next() and rb_foreach_reverse_prev(), which make it possible to re-synchronize tree iteration after the tree has been modified. Rename rb_tree_new() to rb_new(). Notes: svn path=/head/; revision=178708
* Set QUANTUM_2POW_MIN and SIZEOF_PTR_2POW parameters for MIPSOleksandr Tymoshenko2008-04-291-0/+5
| | | | | | | Approved by: imp Notes: svn path=/head/; revision=178683
* Check for integer overflow before calling sbrk(2), since it uses aJason Evans2008-04-291-0/+7
| | | | | | | signed increment argument, but the size is an unsigned integer. Notes: svn path=/head/; revision=178645
* Stricter check for integer overflow.Ruslan Ermilov2008-04-241-0/+2
| | | | Notes: svn path=/head/; revision=178457
* Implement red-black trees without using parent pointers, and store theJason Evans2008-04-232-116/+947
| | | | | | | | | | | | color bit in the least significant bit of the right child pointer, in order to reduce red-black tree linkage overhead by ~2X as compared to sys/tree.h. Use the new red-black tree implementation in malloc, which drops memory usage by ~0.5 or ~1%, for 32- and 64-bit systems, respectively. Notes: svn path=/head/; revision=178440
* Don't forget to free() currency_symbol and asciivalue when multipleRuslan Ermilov2008-04-191-0/+4
| | | | | | | | | | | conversion specifiers for them are present. Submitted by: Maxim Dounin <mdounin@mdounin.ru> Obtained from: NetBSD (partially) MFC after: 3 days Notes: svn path=/head/; revision=178313
* Better strfmon(3) conversion specifiers sanity checking.Ruslan Ermilov2008-04-191-1/+8
| | | | | | | | | | | | | There were no checks for left and right precisions at all, and a check for field width had integer overflow bug. Reported by: Maksymilian Arciemowicz Security: http://securityreason.com/achievement_securityalert/53 Submitted by: Maxim Dounin <mdounin@mdounin.ru> MFC after: 3 days Notes: svn path=/head/; revision=178312
* Use calloc() instaed of zeroing memory ourselves.Xin LI2008-04-131-2/+1
| | | | Notes: svn path=/head/; revision=178175
* Remove stale #include <machine/atomic.h>, which as needed by lazyJason Evans2008-03-071-4/+4
| | | | | | | deallocation. Notes: svn path=/head/; revision=176909
* Replace the use of warnx() with direct output to stderr using _write().Sean Farley2008-02-281-12/+36
| | | | | | | | | | | | | | | | | | | This reduces the size of a statically-linked binary by approximately 100KB in a trivial "return (0)" test application. readelf -S was used to verify that the .text section was reduced and that using strlen() saved a few more bytes over using sizeof(). Since the section of code is only called when environ is corrupt (program bug), I went with fewer bytes over fewer cycles. I made minor edits to the submitted patch to make the output resemble warnx(). Submitted by: kib bz Approved by: wes (mentor) MFC after: 5 days Notes: svn path=/head/; revision=176632
* Fix a race condition in arena_ralloc() for shrinking in-place largeJason Evans2008-02-171-25/+41
| | | | | | | | | | | reallocation, when junk filling is enabled. Junk filling must occur prior to shrinking, since any deallocated trailing pages are immediately available for use by other threads. Reported by: Mats Palmgren <mats.palmgren@bredband.net> Notes: svn path=/head/; revision=176369
* Remove support for lazy deallocation. Benchmarks across a wide range ofJason Evans2008-02-172-221/+4
| | | | | | | | | | | allocation patterns, number of CPUs, and MALLOC_OPTIONS settings indicate that lazy deallocation has the potential to worsen throughput dramatically. Performance degradation occurs when multiple threads try to clear the lazy free cache simultaneously. Various experiments to avoid this bottleneck failed to completely solve this problem, while adding yet more complexity. Notes: svn path=/head/; revision=176368
* Fix a bug in lazy deallocation that was introduced whenJason Evans2008-02-081-7/+10
| | | | | | | | | | | arena_dalloc_lazy_hard() was split out of arena_dalloc_lazy() in revision 1.162. Reduce thundering herd problems in lazy deallocation by randomly varying how many probes a thread does before taking the slow path. Notes: svn path=/head/; revision=176103
* Clean up manipulation of chunk page map elements to remove some tenuousJason Evans2008-02-081-362/+357
| | | | | | | | | | | | | | assumptions about whether bits are set at various times. This makes adding other flags safe. Reorganize functions in order to inline i{m,c,p,s,re}alloc(). This allows the entire fast-path call chains for malloc() and free() to be inlined. [1] Suggested by: [1] Stuart Parmenter <stuart@mozilla.com> Notes: svn path=/head/; revision=176100
* Track dirty unused pages so that they can be purged if they exceed aJason Evans2008-02-062-679/+973
| | | | | | | | | | | | | | | | | | | | | | | | | | | | threshold, according to the 'F' MALLOC_OPTIONS flag. This obsoletes the 'H' flag. Try to realloc() large objects in place. This substantially speeds up incremental large reallocations in the common case. Fix a bug in arena_ralloc() that caused relocation of sub-page objects even if the old and new sizes were in the same size class. Maintain trees of runs and simplify the per-chunk page map. This allows logarithmic-time searching for sufficiently large runs in arena_run_alloc(), whereas the previous algorithm required linear time in the worst case. Break various large functions into smaller sub-functions, and inline only the functions that are in the fast path for small object allocation/deallocation. Remove an unnecessary check in base_pages_alloc_mmap(). Avoid integer division in choose_arena() for the NO_TLS case on single-CPU systems. Notes: svn path=/head/; revision=176022
* Remove some now-unused macros.John Baldwin2008-01-151-3/+1
| | | | | | | MFC after: 1 week Notes: svn path=/head/; revision=175362
* Put back the openpty(3) and ptsname(3) fixes but don't disable ptsname(3)John Baldwin2008-01-151-46/+31
| | | | | | | | on pts(4) devices this time. This fixes the issues while leaving pts(4) enabled on HEAD. Notes: svn path=/head/; revision=175352
* Back out last commit, since it accidentally broke pts.Colin Percival2008-01-151-37/+48
| | | | | | | | The security fix will be re-committed soon, hopefully without breaking anything. Notes: svn path=/head/; revision=175350
* Fix issues which allow snooping on ptys. [08:01]Colin Percival2008-01-141-48/+37
| | | | | | | | | | Fix an off-by-one error in inet_network(3). [08:02] Security: FreeBSD-SA-08:01.pty Security: FreeBSD-SA-08:02.libc Notes: svn path=/head/; revision=175330
* Changing 'r' to a size_t in the previous commit turned quicksortDavid Schultz2008-01-141-4/+5
| | | | | | | | | | into slowsort for some sequences because different parts of the code used 'r' to store two different things, one of which was signed. Clean things up by splitting 'r' into two variables, and use a more meaningful name. Notes: svn path=/head/; revision=175317
* Use size_t to avoid overflow when sorting arrays larger than 2 GB.David Schultz2008-01-132-2/+3
| | | | | | | | PR: 111085 MFC after: 2 weeks Notes: svn path=/head/; revision=175259
* Enable both sbrk(2)- and mmap(2)-based memory acquisition methods byJason Evans2008-01-032-19/+20
| | | | | | | | | | | | default. This has the disadvantage of rendering the datasize resource limit irrelevant, but without this change, legitimate uses of more memory than will fit in the data segment are thwarted by default. Fix chunk_alloc_mmap() to work correctly if initial mapping is not chunk-aligned and mapping extension fails. Notes: svn path=/head/; revision=175075
* Fix a major chunk-related memory leak in chunk_dealloc_dss_record(). [1]Jason Evans2007-12-311-65/+56
| | | | | | | | | | | Clean up DSS-related locking and protect all pertinent variables with dss_mtx (remove dss_chunks_mtx). This fixes race conditions that could cause chunk leaks. Reported by: [1] kris Notes: svn path=/head/; revision=175011
* Fix a bug related to sbrk() calls that could cause address space leaks.Jason Evans2007-12-311-186/+268
| | | | | | | | | | | | | | | | | | | | | | | | | | | | This is a long-standing bug, but until recent changes it was difficult to trigger, and even then its impact was non-catastrophic, with the exception of revision 1.157. Optimize chunk_alloc_mmap() to avoid the need for unmapping pages in the common case. Thanks go to Kris Kennaway for a patch that inspired this change. Do not maintain a record of previously mmap'ed chunk address ranges. The original intent was to avoid the extra system call overhead in chunk_alloc_mmap(), which is no longer a concern. This also allows some simplifications for the tree of unused DSS chunks. Introduce huge_mtx and dss_chunks_mtx to replace chunks_mtx. There was no compelling reason to use the same mutex for these disjoint purposes. Avoid memset() for huge allocations when possible. Maintain two trees instead of one for tracking unused DSS address ranges. This allows scalable allocation of multi-chunk huge objects in the DSS. Previously, multi-chunk huge allocation requests failed if the DSS could not be extended. Notes: svn path=/head/; revision=175004
* Back out premature commit of previous version.Jason Evans2007-12-281-183/+113
| | | | Notes: svn path=/head/; revision=174957
* Maintain two trees instead of one (old_chunks --> old_chunks_{ad,szad}) inJason Evans2007-12-281-113/+183
| | | | | | | | | | | | order to support re-use of multi-chunk unused regions within the DSS for huge allocations. This generalization is important to correct function when mmap-based allocation is disabled. Avoid zeroing re-used memory in the DSS unless it really needs to be zeroed. Notes: svn path=/head/; revision=174956
* Release chunks_mtx for all paths through chunk_dealloc().Jason Evans2007-12-281-1/+4
| | | | | | | Reported by: kris Notes: svn path=/head/; revision=174953
* Add the 'D' and 'M' run time options, and use them to control whetherJason Evans2007-12-272-315/+492
| | | | | | | | | | | | | | | | | | | | | memory is acquired from the system via sbrk(2) and/or mmap(2). By default, use sbrk(2) only, in order to support traditional use of resource limits. Additionally, when both options are enabled, prefer the data segment to anonymous mappings, in order to coexist better with large file mappings in applications on 32-bit platforms. This change has the potential to increase memory fragmentation due to the linear nature of the data segment, but from a performance perspective this is mitigated by the use of madvise(2). [1] Add the ability to interpret integer prefixes in MALLOC_OPTIONS processing. For example, MALLOC_OPTIONS=lllllllll can now be specified as MALLOC_OPTIONS=9l. Reported by: [1] rwatson Design review: [1] alc, peter, rwatson Notes: svn path=/head/; revision=174950
* Clean up some of the pts(4) vs pty(4) stuff in grantpt(3) and friends:John Baldwin2007-12-211-22/+23
| | | | | | | | | | | | | - Use PTY* for all pty(4) related constants. - Use PTMX* for all pts(4) related constants. - Consistently use _PATH_DEV PTMX rather than "/dev/ptmx". - Revert 1.7 and properly fix it by using the correct prefix string for pts(4) masters. MFC after: 3 days Notes: svn path=/head/; revision=174842
* Use fixed point integer math instead of floating point math whenJason Evans2007-12-181-42/+47
| | | | | | | | | | | | | calculating run sizes. Use of the floating point unit was a potential pessimization to context switching for applications that do not otherwise use floating point math. [1] Reformat cpp macro-related comments to improve consistency. Submitted by: das Notes: svn path=/head/; revision=174745
* Refactor features a bit in order to make it possible to disable lazyJason Evans2007-12-171-52/+127
| | | | | | | | | | | | deallocation and dynamic load balancing via the MALLOC_LAZY_FREE and MALLOC_BALANCE knobs. This is a non-functional change, since these features are still enabled when possible. Clean up a few things that more pedantic compiler settings would cause complaints over. Notes: svn path=/head/; revision=174695