| Commit message (Collapse) | Author | Age | Files | Lines |
| |
|
|\
| |
| |
| |
| | |
Avoid truncating thread names for better runtime observability
OTP-18552
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
The Erlang runtime gives many of its threads descriptive names. When
those threads are part of a logical group, a unique ID is added to the
name for disambiguation. After construction, many thread names in
Erlang have a string length greater than 16 characters. To fit within
operating system limits, Erlang then truncates them from right to
left. To minimize confusion after truncation, the unique ID is always
placed at the left of a thread name so its information is not likely
to be lost.
The convention used by Erlang presents challenges to the use of thread
names as keys when reporting on thread activity at the operating
system level. The more common convention, used by other runtimes, is
to have the description followed by a unique ID. When followed,
sorting threads by name places like workers next to each other and the
unique ID can be dropped to create a grouping key. Placing the unique
ID first, as Erlang does, means that a different strategy needs to be
used for sorting the threads of an Erlang process. Furthermore, the
truncation necessitates a complicated strategy for analyzing the
description to identify a possible common substring to be used as a
grouping key.
This change switches the Erlang runtime to use the more common
convention in order to make reporting on the thread usage in an Erlang
process easier for tooling. To do so, it shortens the content of the
initial printf(3) format strings to ensure their output is always 16
or fewer characters so the name is never truncated. It also moves the
unique ID in the format string to the right of the description, so the
names of worker threads appear next to each other after sorting
alphabetically from left to right.
To prevent the accidental creation of long thread names in the future,
the silent truncation has been eliminated from the lowest-layer of
thread functionality. It now returns an EINVAL when given a long name
which will be caught when the runtime is started. This would break
the NIF and driver libraries so the silent truncation has moved up to
a higher layer in order to preserve compatibility. New unit tests have
been added to test setting and getting thread names.
|
| |
| |
| |
| |
| | |
YCF is a short lived source-to-source compile tool
which deliberately leaks memory.
|
| | |
|
|\ \
| |/
| |
| |
| |
| |
| |
| |
| |
| | |
john/erts/merge-isb-26
* john/erts/instruction-synchronization-barriers/OTP-18418:
jit: Clear instruction cache ourselves
jit: Refactor breakpoints
jit: Issue ISBs on all schedulers when modifying code
jit: Remove an eyesore
|
| | |
|
|/ |
|
| |
|
| |
|
|
|
|
|
|
| |
Test suites for the tool were lost long ago. Removing "liberts.a"
library as well, for it is now empty and AR on MacOS/Windows
does not like empty libraries.
|
|\
| |
| |
| |
| | |
garazdawi/lukas/erts/fix-ets-read_concurrency-memory/OTP-17832
erts: Fix ets memory calculation for read_concurrency
|
| |
| |
| |
| |
| |
| |
| | |
The amount of memory used for reader groups can be very
large on systems with many cores, so it needs to be part
of the ets table's memory utilization. We use that memory
to calculate how many tables can be created when testing.
|
| | |
|
|\ \
| |/
|/|
| |
| | |
* maint:
Update copyright year
|
| | |
|
|\ \
| | |
| | |
| | |
| | |
| | |
| | | |
rickard/merge/plux/skip-read-topology
* plux/skip-read-topology:
Enable possibility to skip reading CPU topology at startup
|
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | | |
Reading CPU topology slows down startup when starting many
parallel instances of ERTS on systems with large amount of cores,
this commit adds the possibility to skip it.
Use new emulator flag +ssrct to skip reading CPU topology.
Reading CPU topology will also be skipped if a user defined topology
is set using the +sct flag.
|
| | | |
|
|\ \ \
| | |/
| |/|
| | |
| | | |
* maint:
Limit timeout value in calls to select()
|
| |\ \
| | | |
| | | |
| | | |
| | | | |
* rickard/select-timeout-fix/GH-5339/OTP-17735:
Limit timeout value in calls to select()
|
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | | |
We previously did not limit the timeout value when calling select()
which could cause select() to fail when passed a huge timeout value
causing a runtime system crash.
We currently only use select() on Darwin which accepts a timeout value
of up to 100 million seconds. However, according to posix, select()
implementations are only required to provide 31 days as max timeout
value. We therefore limit the timeout value to 31 days.
|
|\ \ \ \
| |/ / / |
|
| | | |
| | | |
| | | |
| | | |
| | | |
| | | | |
OTP version number can contain -rcNUM
Also fixup .gitignore files..
|
|\ \ \ \
| |/ / / |
|
| | | | |
|
| | | |
| | | |
| | | |
| | | |
| | | |
| | | | |
Add upgrade note to the regexp library that is used by Yielding C Fun
with information about things to be aware of when upgrading the
library.
|
|\ \ \ \
| |/ / /
| | | /
| |_|/
|/| | |
|
| | | |
|
|\ \ \
| |/ / |
|
| | |
| | |
| | |
| | | |
Add text explaineing some best practices for using YCF for ERTS.
|
|/ /
| |
| |
| | |
Replace obsolete macros and fix warnings
|
| | |
|
| | |
|
|\ \ |
|
| | | |
|
| | | |
|
| | | |
|
| | | |
|
| | |
| | |
| | |
| | |
| | |
| | |
| | | |
This commit makes sure that when debug mode (activated with the flag
-debug) detects a pointer in a yield state to the call stack, all the
fields in the yield state struct will be printed so it easy to find
the variable that contains the bad pointer.
|
| | |
| | |
| | |
| | |
| | |
| | | |
This commit adds function prototypes for debug functions to avoid
compiler warnings when compiling with options that gives warnings for
functions without prototypes.
|
| | |
| | |
| | |
| | |
| | | |
Add support for checking for pointers to any of the stack frames
belonging to nested yielding functions.
|
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | | |
YCF's debug mode detected a lot of false positives (pointers allocated
on the function stack for a yielding function that points to the
function stack) because uninitialized variables sometimes happens to
contain addresses to the stack. This commit fixes this issue by
automatically writing zeros to these variables when debug mode is
activated.
|
| | | |
|
| | | |
|
| | |
| | |
| | |
| | |
| | |
| | | |
One of the generated functions got the wrong name when the -debug flag
was combined with the -only_yielding_funs flag. This commit fixes the
bug and adds a test case to prevent similar bugs in the future.
|
| | |
| | |
| | |
| | |
| | |
| | | |
This function changes the type of the generated destroy function so
that it takes a parameter of type void*. The public interface does not
include the type of a generated struct after this change.
|
| | | |
|
|/ / |
|
|\ \
| | |
| | |
| | |
| | | |
* maint:
erts: Support cgroup2 CPU quotas
|