From 065a32f064ac8927e4fcdee28ecb2b64370a4a6d Mon Sep 17 00:00:00 2001 From: Myles Borins Date: Thu, 13 Feb 2020 15:27:47 -0800 Subject: [PATCH] Revert "src: make --use-largepages a runtime option" This reverts commit fcbd2d245ac917785cb59ff51e0f599a7886df6b. PR-URL: https://github.com/nodejs/node/pull/31782 Reviewed-By: James M Snell Reviewed-By: Richard Lau --- configure.py | 33 +++++++++++++++++++++++ doc/api/cli.md | 17 ------------ doc/node.1 | 10 ------- node.gyp | 5 ++-- node.gypi | 6 +++-- src/large_pages/node_large_page.cc | 19 ++++++------- src/node.cc | 30 +++++++-------------- src/node_options.cc | 9 ------- src/node_options.h | 1 - test/parallel/test-startup-large-pages.js | 29 -------------------- 10 files changed, 58 insertions(+), 101 deletions(-) delete mode 100644 test/parallel/test-startup-large-pages.js diff --git a/configure.py b/configure.py index 210bd8ec279909..14f5665e0299a2 100755 --- a/configure.py +++ b/configure.py @@ -398,6 +398,17 @@ dest='with_etw', help='build with ETW (default is true on Windows)') +parser.add_option('--use-largepages', + action='store_true', + dest='node_use_large_pages', + help='build with Large Pages support. This feature is supported only on Linux kernel' + + '>= 2.6.38 with Transparent Huge pages enabled and FreeBSD') + +parser.add_option('--use-largepages-script-lld', + action='store_true', + dest='node_use_large_pages_script_lld', + help='link against the LLVM ld linker script. Implies -fuse-ld=lld in the linker flags') + intl_optgroup.add_option('--with-intl', action='store', dest='with_intl', @@ -1050,6 +1061,28 @@ def configure_node(o): else: o['variables']['node_use_dtrace'] = 'false' + if options.node_use_large_pages and not flavor in ('linux', 'freebsd', 'mac'): + raise Exception( + 'Large pages are supported only on Linux, FreeBSD and MacOS Systems.') + if options.node_use_large_pages and flavor in ('linux', 'freebsd', 'mac'): + if options.shared or options.enable_static: + raise Exception( + 'Large pages are supported only while creating node executable.') + if target_arch!="x64": + raise Exception( + 'Large pages are supported only x64 platform.') + if flavor == 'mac': + info('macOS server with 32GB or more is recommended') + if flavor == 'linux': + # Example full version string: 2.6.32-696.28.1.el6.x86_64 + FULL_KERNEL_VERSION=os.uname()[2] + KERNEL_VERSION=FULL_KERNEL_VERSION.split('-')[0] + if KERNEL_VERSION < "2.6.38" and flavor == 'linux': + raise Exception( + 'Large pages need Linux kernel version >= 2.6.38') + o['variables']['node_use_large_pages'] = b(options.node_use_large_pages) + o['variables']['node_use_large_pages_script_lld'] = b(options.node_use_large_pages_script_lld) + if options.no_ifaddrs: o['defines'] += ['SUNOS_NO_IFADDRS'] diff --git a/doc/api/cli.md b/doc/api/cli.md index 979c1214f5c59e..7703d0b6bd99d2 100644 --- a/doc/api/cli.md +++ b/doc/api/cli.md @@ -881,22 +881,6 @@ environment variables. See `SSL_CERT_DIR` and `SSL_CERT_FILE`. -### `--use-largepages=mode` - - -Re-map the Node.js static code to large memory pages at startup. If supported on -the target system, this will cause the Node.js static code to be moved onto 2 -MiB pages instead of 4 KiB pages. - -The following values are valid for `mode`: -* `off`: No mapping will be attempted. This is the default. -* `on`: If supported by the OS, mapping will be attempted. Failure to map will - be ignored and a message will be printed to standard error. -* `silent`: If supported by the OS, mapping will be attempted. Failure to map - will be ignored and will not be reported. - ### `--v8-options`