diff options
author | Tamar Christina <tamar@zhox.com> | 2019-06-02 14:55:34 +0100 |
---|---|---|
committer | Ben Gamari <ben@smart-cactus.org> | 2020-07-15 16:41:01 -0400 |
commit | 71245fcce24723910f12f934fbc4c700658b727a (patch) | |
tree | 83d387775893a72afc97cb73b345864f77b1bf98 /rts/RtsFlags.c | |
parent | 90e69f779b6da755fac472337535a1321cbb7917 (diff) | |
download | haskell-71245fcce24723910f12f934fbc4c700658b727a.tar.gz |
winio: Add new io-manager cmdline options
Diffstat (limited to 'rts/RtsFlags.c')
-rw-r--r-- | rts/RtsFlags.c | 66 |
1 files changed, 66 insertions, 0 deletions
diff --git a/rts/RtsFlags.c b/rts/RtsFlags.c index 6180f42e39..3963e6d0d5 100644 --- a/rts/RtsFlags.c +++ b/rts/RtsFlags.c @@ -35,6 +35,7 @@ #endif #include <fs_rts.h> +#include <stdbool.h> // Flag Structure RTS_FLAGS RtsFlags; @@ -254,6 +255,16 @@ void initRtsFlagsDefaults(void) RtsFlags.MiscFlags.internalCounters = false; RtsFlags.MiscFlags.linkerAlwaysPic = DEFAULT_LINKER_ALWAYS_PIC; RtsFlags.MiscFlags.linkerMemBase = 0; +#if defined(DEFAULT_NATIVE_IO_MANAGER) + RtsFlags.MiscFlags.ioManager = IO_MNGR_NATIVE; +#else + RtsFlags.MiscFlags.ioManager = IO_MNGR_POSIX; +#endif +#if defined(THREADED_RTS) && defined(mingw32_HOST_OS) + RtsFlags.MiscFlags.numIoWorkerThreads = getNumberOfProcessors(); +#else + RtsFlags.MiscFlags.numIoWorkerThreads = 1; +#endif #if defined(THREADED_RTS) RtsFlags.ParFlags.nCapabilities = 1; @@ -474,7 +485,14 @@ usage_text[] = { " fatal error. When symbols are available an attempt will be", " made to resolve addresses to names. (default: yes)", #endif +" --io-manager=<native|posix>", +" The I/O manager subsystem to use. (default: posix)", #if defined(THREADED_RTS) +#if defined(mingw32_HOST_OS) +" --io-manager-threads=<num>", +" The number of worker threads to use in the native I/O manager to", +" handle completion events. (defualt: num cores)", +#endif " -e<n> Maximum number of outstanding local sparks (default: 4096)", #endif #if defined(x86_64_HOST_ARCH) @@ -933,6 +951,16 @@ error = true; OPTION_SAFE; RtsFlags.MiscFlags.internalCounters = true; } + else if (strequal("io-manager=native", + &rts_argv[arg][2])) { + OPTION_UNSAFE; + RtsFlags.MiscFlags.ioManager = IO_MNGR_NATIVE; + } + else if (strequal("io-manager=posix", + &rts_argv[arg][2])) { + OPTION_UNSAFE; + RtsFlags.MiscFlags.ioManager = IO_MNGR_POSIX; + } else if (strequal("info", &rts_argv[arg][2])) { OPTION_SAFE; @@ -945,6 +973,31 @@ error = true; RtsFlags.GcFlags.useNonmoving = true; } #if defined(THREADED_RTS) +#if defined(mingw32_HOST_OS) + else if (!strncmp("io-manager-threads", + &rts_argv[arg][2], 18)) { + OPTION_SAFE; + uint32_t num; + if (rts_argv[arg][20] == '=') { + num = (StgWord)strtol(rts_argv[arg]+21, + (char **) NULL, 10); + } else { + errorBelch("%s: Expected number of threads to use.", + rts_argv[arg]); + error = true; + break; + } + + if (num < 1) { + errorBelch("%s: Expected number of threads to be at least 1.", + rts_argv[arg]); + error = true; + break; + } + + RtsFlags.MiscFlags.numIoWorkerThreads = num; + } +#endif else if (!strncmp("numa", &rts_argv[arg][2], 4)) { if (!osBuiltWithNumaSupport()) { errorBelch("%s: This GHC build was compiled without NUMA support.", @@ -2460,3 +2513,16 @@ built in the -debug, -eventlog, -prof ways. And even if they do, the damage should be limited to DOS, information disclosure and writing files like <progname>.eventlog, not arbitrary files. */ + +/* ---------------------------------------------------------------------------- + Helper utilities to query state. + ------------------------------------------------------------------------- */ + +bool is_io_mng_native_p (void) +{ +#if defined(mingw32_HOST_OS) + return RtsFlags.MiscFlags.ioManager == IO_MNGR_NATIVE; +#else + return false; +#endif +} |