aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSverker Eriksson <[email protected]>2016-02-22 18:18:15 +0100
committerSverker Eriksson <[email protected]>2016-02-23 12:15:39 +0100
commit8e2a21f1df1140867d0b074ec7a86610d1e1b51e (patch)
treedc3edd24e9233f0b9c5b110f2e8bb6cc27141427
parentabe5967c1964a4ca93f321c6cd564c8650f11a53 (diff)
downloadotp-8e2a21f1df1140867d0b074ec7a86610d1e1b51e.tar.gz
otp-8e2a21f1df1140867d0b074ec7a86610d1e1b51e.tar.bz2
otp-8e2a21f1df1140867d0b074ec7a86610d1e1b51e.zip
erts: Add emulator flag +MIscs for literal super carrier size
-rw-r--r--erts/doc/src/erts_alloc.xml10
-rw-r--r--erts/emulator/beam/erl_alloc.c11
-rw-r--r--erts/etc/common/erlexec.c1
3 files changed, 20 insertions, 2 deletions
diff --git a/erts/doc/src/erts_alloc.xml b/erts/doc/src/erts_alloc.xml
index 75de74523e..0965f9b49c 100644
--- a/erts/doc/src/erts_alloc.xml
+++ b/erts/doc/src/erts_alloc.xml
@@ -566,6 +566,16 @@
set to <c>false</c>, <c>sys_alloc</c> carriers will never be
created by allocators using the <c>alloc_util</c> framework.</item>
</taglist>
+ <p>The following flag is special for <c>literal_alloc</c>:</p>
+ <taglist>
+ <tag><marker id="MIscs"/><c><![CDATA[+MIscs <size in MB>]]></c></tag>
+ <item>
+ <c>literal_alloc</c> super carrier size (in MB). The amount of
+ <em>virtual</em> address space reserved for literal terms in
+ Erlang code on 64-bit architectures. The default is 1024 (1GB)
+ and is usually sufficient. The flag is ignored on 32-bit
+ architectures.</item>
+ </taglist>
<p>Instrumentation flags:</p>
<taglist>
<tag><marker id="Mim"/><c>+Mim true|false</c></tag>
diff --git a/erts/emulator/beam/erl_alloc.c b/erts/emulator/beam/erl_alloc.c
index 7c880342bd..a266ea6d19 100644
--- a/erts/emulator/beam/erl_alloc.c
+++ b/erts/emulator/beam/erl_alloc.c
@@ -1489,8 +1489,15 @@ handle_args(int *argc, char **argv, erts_alc_hndl_args_init_t *init)
case 'B':
handle_au_arg(&init->binary_alloc, &argv[i][3], argv, &i, 0);
break;
- case 'I':
- handle_au_arg(&init->literal_alloc, &argv[i][3], argv, &i, 0);
+ case 'I':
+ if (has_prefix("scs", argv[i]+3)) {
+#if HAVE_ERTS_MSEG
+ init->mseg.literal_mmap.scs =
+#endif
+ get_mb_value(argv[i]+6, argv, &i);
+ }
+ else
+ handle_au_arg(&init->literal_alloc, &argv[i][3], argv, &i, 0);
break;
case 'D':
handle_au_arg(&init->std_alloc, &argv[i][3], argv, &i, 0);
diff --git a/erts/etc/common/erlexec.c b/erts/etc/common/erlexec.c
index 91204fda5c..54da59e50d 100644
--- a/erts/etc/common/erlexec.c
+++ b/erts/etc/common/erlexec.c
@@ -122,6 +122,7 @@ static char *plusM_other_switches[] = {
"Ym",
"Ytp",
"Ytt",
+ "Iscs",
NULL
};