aboutsummaryrefslogtreecommitdiffstats
path: root/erts/emulator
AgeCommit message (Collapse)Author
2014-02-24further enhancements for dirty schedulersSteve Vinoski
Add support for setting the number of dirty CPU schedulers online via erlang:system_flag/2. Assuming the emulator is built with dirty schedulers enabled, the number of dirty CPU schedulers online may not be less than 1, nor greater than the number of dirty CPU schedulers available, nor greater than the number of normal schedulers online. Dirty CPU scheduler threads that are taken offline via system_flag/2 are suspended. The number of dirty CPU schedulers online may be adjusted independently of the number of normal schedulers online, but if system_flag/2 is used to set the number of normal schedulers online to a value less than the current number of normal schedulers online, the number of dirty CPU schedulers online is decreased proportionally. Likewise, if the number of normal schedulers online is increased, the number of dirty CPU schedulers online is increased proportionally. For example, if 8 normal schedulers and 4 dirty CPU schedulers are online, and system_flag/2 is called to set the number of normal schedulers online to 4, the number of dirty CPU schedulers online is also decreased by half, to 2. Subsequently setting the number of normal schedulers online back to 8 also sets the number of dirty CPU schedulers online back to 4. Augment the system_flag/2 documentation in the erlang man page to explain this relationship between schedulers_online and dirty_cpu_schedulers_online. Also ensure that all dirty CPU and I/O schedulers are suspended when multi-scheduling is blocked via system_flag/2, and brought back online when multi-scheduling is unblocked. Add Rickard Green's rewritten check_enqueue_in_prio_queue() function that inspects process state more thoroughly to determine if to enqueue it and if so on what queue, including dirty queues when appropriate. Make sure dirty NIF jobs do not trigger erlang:system_monitor long_schedule messages. Add more dirty scheduler testing to the scheduler test suite. Remove the erts_no_dirty_cpu_schedulers_online global variable, since it's no longer needed. Execute dirty NIFs on a normal scheduler thread while multi-scheduling blocking is in effect. Evacuate any dirty jobs residing in the dirty run queues over to a normal run queue when multi-scheduling is blocked. Allow dirty schedulers to execute aux work. Set the dirty run queues halt_in_progress flag when halting the normal schedulers. Change dirty scheduler numbers to a structure including both scheduler number and type, either dirty CPU or dirty I/O. Add some assertions to ensure that dirty CPU schedulers operate only on dirty CPU scheduler process flags, and the same for dirty I/O schedulers.
2014-02-17allow optional whitespace in dirty scheduler erl optionsSteve Vinoski
The +SDcpu, +SDPcpu, and +SDio options did not properly handle having their arguments immediately following them without intervening whitespace, e.g. +SDio20 was treated as an error. Fix all the dirty scheduler command line options so they handle optional whitespace between them and their associated arguments.
2014-02-14Merge branch 'rickard/default_acul_mod/OTP-11604'Rickard Green
* rickard/default_acul_mod/OTP-11604: Fix +Mea config
2014-02-10Merge branch 'egil/compiler/maps-fix-codegen'Björn-Egil Dahlberg
* egil/compiler/maps-fix-codegen: compiler: Fix codegen multiple updates for Maps erts,compiler: Correct and amend tests for Maps
2014-02-07erts,compiler: Correct and amend tests for MapsBjörn-Egil Dahlberg
Faulty test for maps update
2014-02-07Merge branch 'egil/erts/fix-maps-beam_load'Björn-Egil Dahlberg
* egil/erts/fix-maps-beam_load: compiler: Update map_SUITE with error case test erts: Maps must fail on exact updates of empty Maps erts: Fix Maps for beam_load
2014-02-07erts: Maps must fail on exact updates of empty MapsBjörn-Egil Dahlberg
Exact updates on empty Maps must fail directly.
2014-02-06Merge branch 'bjorn/erts/zlib-1.2.8/OTP-11669'Björn Gustavsson
* bjorn/erts/zlib-1.2.8/OTP-11669: gzio.c: Remove unnecessary usage of the OF() macro
2014-02-05erts: Fix Maps for beam_loadBjörn-Egil Dahlberg
Map source may be anything, not only registers.
2014-02-04gzio.c: Remove unnecessary usage of the OF() macroBjörn Gustavsson
Daniel Goertzen reported that commit 8a147a7365 broke building of Erlang/OTP on Gentoo Linux because the macro OF() was missing. Apparently, on Gentoo the OF() macro in zconf.h has been renamed to _Z_OF() (to avoid polluting the global namespace). Don't use the OF() macro in gzio.c since it no longer serves any useful purpose (it provided compatibility with pre-ANSI/ISO C compilers, but the rest of Erlang/OTP requires an ANSI/ISO C compiler anyway).
2014-02-03erts: Fix bug in binary_to_term for mapsSverker Eriksson
'maps_head' was not restored when yielding. Risk for crash increases with size and number of maps in term.
2014-01-31Fix +Mea configRickard Green
2014-01-29Make it easier to revert +M<S>acul defaultRickard Green
2014-01-29Merge branch 'egil/maps/OTP-11616'Björn-Egil Dahlberg
* egil/maps/OTP-11616: (112 commits) compiler: Add core compile test for maps compiler: Fix core parse for Maps compiler: Fixup #map_pair{} spec erts: Strengthen map_SUITE tests erts: Update maps_fold test to respect maps:fold/3 stdlib: Make maps:fold/3 order-independent erts: Fixup enif_make_map_put on windows erts: Update preloaded erts_internal.beam hipe: Fixup update cerl pretty printer erts: Add map construction to driver API dialyzer: Add maps tests dialyzer: Remove dead code dialyzer: Reflect map_pair core changes in dialyzer hipe: Update cerl pretty printer compiler: Update inliner tests compiler: Squash #c_map_pair_*{} to #c_map_pair{} compiler: Squash #k_map_pair_*{} to #k_map_pair{} preloaded: Fixup export cmp_term in erts_internal erts: Change 'size' argument of enif_get_map_size from int* to size_t* erts: Fix compile error for halfword emulator ...
2014-01-29erts: Strengthen map_SUITE testsBjörn-Egil Dahlberg
* Add tests for maps:merge/2 * Add tests for maps:update/3 * Test more corner cases
2014-01-29erts: Update maps_fold test to respect maps:fold/3Björn-Egil Dahlberg
2014-01-29erts: Fixup enif_make_map_put on windowsBjörn-Egil Dahlberg
2014-01-29erts: Add map construction to driver APISverker Eriksson
erl_drv_output_term() and erl_drv_send_term() can send messages containing maps with the use of the new ERL_DRV_MAP. The driver API minor version is updated as new functionality is added.
2014-01-29erts: Change 'size' argument of enif_get_map_size from int* to size_t*Sverker Eriksson
2014-01-29erts: Fix compile error for halfword emulatorSverker Eriksson
2014-01-29erts: Add more tests for the NIF map APISverker Eriksson
2014-01-29erts: Optimize struct ErlNifMapIteratorSverker Eriksson
No need to use 64bit integers on 32bit machines.
2014-01-29erts: Fix map iterator bug when reverting from end of map positionSverker Eriksson
and simplify code by ignoring h_limit which is always zero.
2014-01-29erts: Simplify some map iterator codeSverker Eriksson
2014-01-29erts: Remove use of h_limit which is always zero.Sverker Eriksson
2014-01-29erts: Let enif_map_iterator_next/prev return 0 to signal end of map.Sverker Eriksson
2014-01-29erts: Do not allow map iterator created without mapSverker Eriksson
2014-01-29erts: Increase version for NIF API and reject experimental v2.5Sverker Eriksson
2014-01-29erts: Remove enif_find_map_valueSverker Eriksson
as it does the same thing as enif_get_map_value. Replace with placeholder to be ABI backward compatible on Windows as long as enif_find_map_value is not called.
2014-01-29Update map_SUITE to test "unsorted" encoded mapsBjörn-Egil Dahlberg
2014-01-29erts: Let erlang:binary_to_term/1 handle unsorted MapsBjörn-Egil Dahlberg
Maps may be encoded with keys in arbitrary order. This is fine, as long as keys are unique.
2014-01-29Update map_SUITE to respect term orderBjörn-Egil Dahlberg
2014-01-29erts: Optimize erts_map_update/removeSverker Eriksson
to not continue comparing keys once it has been found.
2014-01-29erts: Fix bug in erts_maps_removeSverker Eriksson
HRelease was called with wrong arguments and left garbage on heap when key was not found.
2014-01-29erts: Update maps serializing to use term orderBjörn-Egil Dahlberg
* erlang:term_to_binary/1 * erlang:binary_to_term/1
2014-01-29erts: Update maps instructions to use term orderBjörn-Egil Dahlberg
Maps internally uses term order to store keys in an ordered fashion.
2014-01-29erts: Update maps BIFs to use term orderBjörn-Egil Dahlberg
Maps internally uses term order to store keys in an ordered fashion.
2014-01-29erts: Add BIF erts_internal:cmp_term/2Björn-Egil Dahlberg
Compares terms where integer() < float().
2014-01-29erts: Add cmp_term to compareBjörn-Egil Dahlberg
Uses total order of types meaning int < float
2014-01-29erts: NIFs Map API fixupBjörn-Egil Dahlberg
2014-01-29erts: Test Maps with NIFsBjörn-Egil Dahlberg
2014-01-29erts: Add NIFs for MapsBjörn-Egil Dahlberg
- int enif_is_map(ErlNifEnv* env, ERL_NIF_TERM map) - int enif_get_map_size(ErlNifEnv *env, ERL_NIF_TERM, int*) - ERL_NIF_TERM enif_make_new_map(ErlNifEnv *env) - int enif_make_map_put(ErlNifEnv *env, ERL_NIF_TERM map_in, ERL_NIF_TERM key, ERL_NIF_TERM value, ERL_NIF_TERM* map_out) - int enif_get_map_value(ErlNifEnv *env, ERL_NIF_TERM map, ERL_NIF_TERM key, ERL_NIF_TERM* value) - int enif_find_map_value(ErlNifEnv *env, ERL_NIF_TERM map, ERL_NIF_TERM key, ERL_NIF_TERM* value) - int enif_make_map_update(ErlNifEnv *env, ERL_NIF_TERM map_in, ERL_NIF_TERM key, ERL_NIF_TERM value, ERL_NIF_TERM* map_out) - int enif_make_map_remove(ErlNifEnv *env, ERL_NIF_TERM map_in, ERL_NIF_TERM key, ERL_NIF_TERM* map_out) - int enif_map_iterator_create(ErlNifEnv *env, ERL_NIF_TERM map, ErlNifMapIterator *iter) - void enif_map_iterator_destroy(ErlNifEnv *env, ErlNifMapIterator *iter) - int enif_map_iterator_next(ErlNifEnv *env, ErlNifMapIterator *iter) - int enif_map_iterator_get_pair(ErlNifEnv *env, ErlNifMapIterator *iter, ERL_NIF_TERM *key, ERL_NIF_TERM *value)
2014-01-29Merge branch 'bjorn/fna-default/OTP-11612'Björn Gustavsson
* bjorn/fna-default/OTP-11612: Change the default file name encoding mode to +fnaw
2014-01-28erts: Add tests for Map update on expressionsBjörn-Egil Dahlberg
(foo())#{ k1 := V1, k2 => V2 }
2014-01-28erts: Add tests for non BIFs in Maps moduleBjörn-Egil Dahlberg
* maps:without/2 * maps:foldl/3 * maps:foldr/3 * maps:map/2 * maps:size/1
2014-01-28erts,stdlib: Change map module name to mapsBjörn-Egil Dahlberg
Name conforms to EEP.
2014-01-28erts: Fix map_SUITE match spec testsBjörn-Egil Dahlberg
2014-01-28Add tests for pditc, ets and tracingLukas Larsson
2014-01-28erts,stdlib: Teach matchspec compiler map guardsBjörn-Egil Dahlberg
2014-01-28Merge branch 'lukas/erts/sendfile_no_async_pool/OTP-11639'Lukas Larsson
* lukas/erts/sendfile_no_async_pool/OTP-11639: erts/kernel: sendfile no longer uses async threads