hsysinfo.h 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. #ifndef HV_SYS_INFO_H_
  2. #define HV_SYS_INFO_H_
  3. #include "hplatform.h"
  4. #ifdef OS_LINUX
  5. #include <sys/sysinfo.h>
  6. #endif
  7. #ifdef OS_DARWIN
  8. #include <mach/mach_host.h>
  9. #include <sys/sysctl.h>
  10. #endif
  11. static inline int get_ncpu() {
  12. #ifdef OS_WIN
  13. SYSTEM_INFO si;
  14. GetSystemInfo(&si);
  15. return si.dwNumberOfProcessors;
  16. #else
  17. //return get_nprocs();
  18. //return get_nprocs_conf();
  19. //return sysconf(_SC_NPROCESSORS_ONLN); // processors available
  20. return sysconf(_SC_NPROCESSORS_CONF); // processors configured
  21. #endif
  22. }
  23. typedef struct meminfo_s {
  24. unsigned long total; // KB
  25. unsigned long free; // KB
  26. } meminfo_t;
  27. static inline int get_meminfo(meminfo_t* mem) {
  28. #ifdef OS_WIN
  29. MEMORYSTATUSEX memstat;
  30. memset(&memstat, 0, sizeof(memstat));
  31. memstat.dwLength = sizeof(memstat);
  32. GlobalMemoryStatusEx(&memstat);
  33. mem->total = (unsigned long)(memstat.ullTotalPhys >> 10);
  34. mem->free = (unsigned long)(memstat.ullAvailPhys >> 10);
  35. return 0;
  36. #elif defined(OS_LINUX)
  37. struct sysinfo info;
  38. if (sysinfo(&info) < 0) {
  39. return errno;
  40. }
  41. mem->total = info.totalram * info.mem_unit >> 10;
  42. mem->free = info.freeram * info.mem_unit >> 10;
  43. return 0;
  44. #elif defined(OS_DARWIN)
  45. uint64_t memsize = 0;
  46. size_t size = sizeof(memsize);
  47. int which[2] = {CTL_HW, HW_MEMSIZE};
  48. sysctl(which, 2, &memsize, &size, NULL, 0);
  49. mem->total = memsize >> 10;
  50. vm_statistics_data_t info;
  51. mach_msg_type_number_t count = sizeof(info) / sizeof(integer_t);
  52. host_statistics(mach_host_self(), HOST_VM_INFO, (host_info_t)&info, &count);
  53. mem->free = ((uint64_t)info.free_count * sysconf(_SC_PAGESIZE)) >> 10;
  54. return 0;
  55. #else
  56. (void)(mem);
  57. return -10;
  58. #endif
  59. }
  60. #endif // HV_SYS_INFO_H_