5 #include "src/base/sys-info.h" 10 #include <sys/types.h> 13 #include <sys/resource.h> 18 #include <sys/sysctl.h> 23 #include "src/base/logging.h" 24 #include "src/base/macros.h" 26 #include "src/base/win32-headers.h" 33 int SysInfo::NumberOfProcessors() {
35 int mib[2] = {CTL_HW, HW_NCPU};
37 size_t len =
sizeof(ncpu);
38 if (sysctl(mib, arraysize(mib), &ncpu, &len,
nullptr, 0) != 0) {
43 long result = sysconf(_SC_NPROCESSORS_ONLN);
47 return static_cast<int>(result);
49 SYSTEM_INFO system_info = {};
50 ::GetNativeSystemInfo(&system_info);
51 return static_cast<int>(system_info.dwNumberOfProcessors);
57 int64_t SysInfo::AmountOfPhysicalMemory() {
59 int mib[2] = {CTL_HW, HW_MEMSIZE};
61 size_t len =
sizeof(memsize);
62 if (sysctl(mib, arraysize(mib), &memsize, &len,
nullptr, 0) != 0) {
68 size_t size =
sizeof(pages);
69 sysctlbyname(
"vm.stats.vm.v_page_count", &pages, &size,
nullptr, 0);
70 sysctlbyname(
"vm.stats.vm.v_page_size", &page_size, &size,
nullptr, 0);
71 if (pages == -1 || page_size == -1) {
74 return static_cast<int64_t>(pages) * page_size;
75 #elif V8_OS_CYGWIN || V8_OS_WIN 76 MEMORYSTATUSEX memory_info;
77 memory_info.dwLength =
sizeof(memory_info);
78 if (!GlobalMemoryStatusEx(&memory_info)) {
82 if (result < 0) result = std::numeric_limits<int64_t>::max();
86 if (stat(
"/proc", &stat_buf) != 0) {
89 return static_cast<int64_t>(stat_buf.st_size);
91 int64_t result = sysconf(_SC_AIX_REALMEM);
92 return static_cast<int64_t>(result) * 1024L;
94 long pages = sysconf(_SC_PHYS_PAGES);
95 long page_size = sysconf(_SC_PAGESIZE);
96 if (pages == -1 || page_size == -1) {
99 return static_cast<int64_t>(pages) * page_size;
105 int64_t SysInfo::AmountOfVirtualMemory() {
106 #if V8_OS_WIN || V8_OS_FUCHSIA 110 int result = getrlimit(RLIMIT_DATA, &rlim);
114 return (rlim.rlim_cur == RLIM_INFINITY) ? 0 : rlim.rlim_cur;