30 #include <sys/types.h>
31 #include <sys/resource.h>
32 #include <sys/sysctl.h>
33 #include <vm/vm_param.h>
62 char abspath[PATH_MAX * 2 + 1];
68 abspath_size = readlink(
"/proc/curproc/file", abspath,
sizeof(abspath));
72 assert(abspath_size > 0);
75 if (*
size > abspath_size)
85 char abspath[PATH_MAX * 2 + 1];
94 mib[2] = KERN_PROC_PATHNAME;
97 abspath_size =
sizeof abspath;
98 if (sysctl(mib,
ARRAY_SIZE(mib), abspath, &abspath_size, NULL, 0))
101 assert(abspath_size > 0);
105 if (*
size > abspath_size)
106 *
size = abspath_size;
117 size_t size =
sizeof(freecount);
119 if (sysctlbyname(
"vm.stats.vm.v_free_count", &freecount, &
size, NULL, 0))
122 return (
uint64_t) freecount * sysconf(_SC_PAGESIZE);
129 int which[] = {CTL_HW, HW_PHYSMEM};
131 size_t size =
sizeof(info);
147 size_t size =
sizeof(info);
148 int which[] = {CTL_VM, VM_LOADAVG};
152 avg[0] = (double) info.ldavg[0] / info.fscale;
153 avg[1] = (
double) info.ldavg[1] / info.fscale;
154 avg[2] = (double) info.ldavg[2] / info.fscale;
159 struct kinfo_proc kinfo;
166 mib[2] = KERN_PROC_PID;
169 kinfo_size =
sizeof(kinfo);
171 if (sysctl(mib,
ARRAY_SIZE(mib), &kinfo, &kinfo_size, NULL, 0))
174 page_size = getpagesize();
177 *rss = kinfo.kp_vm_rssize * page_size;
179 *rss = kinfo.ki_rssize * page_size;
189 r = clock_gettime(CLOCK_MONOTONIC, &sp);
199 unsigned int ticks = (
unsigned int)sysconf(_SC_CLK_TCK),
203 const char* maxcpus_key;
204 const char* cptimes_key;
205 const char* model_key;
212 #if defined(__DragonFly__)
217 maxcpus_key =
"hw.ncpu";
218 cptimes_key =
"kern.cp_time";
220 maxcpus_key =
"kern.smp.maxcpus";
221 cptimes_key =
"kern.cp_times";
224 #if defined(__arm__) || defined(__aarch64__)
226 model_key =
"hw.machine";
229 model_key =
"hw.model";
231 size =
sizeof(cpuspeed);
232 if (sysctlbyname(
"hw.clockrate", &cpuspeed, &
size, NULL, 0))
236 size =
sizeof(model);
237 if (sysctlbyname(model_key, &model, &
size, NULL, 0))
240 size =
sizeof(numcpus);
241 if (sysctlbyname(
"hw.ncpu", &numcpus, &
size, NULL, 0))
244 *cpu_infos =
uv__malloc(numcpus *
sizeof(**cpu_infos));
253 size =
sizeof(maxcpus);
254 if (sysctlbyname(maxcpus_key, &maxcpus, &
size, NULL, 0)) {
262 if (cp_times == NULL) {
267 if (sysctlbyname(cptimes_key, cp_times, &
size, NULL, 0)) {
273 for (
i = 0;
i < numcpus;
i++) {
274 cpu_info = &(*cpu_infos)[
i];
283 cpu_info->
speed = cpuspeed;
294 struct uv__mmsghdr* mmsg,
296 unsigned int flags) {
297 #if __FreeBSD__ >= 11
298 return sendmmsg(fd, mmsg, vlen,
flags);
300 return errno = ENOSYS, -1;
306 struct uv__mmsghdr* mmsg,
310 #if __FreeBSD__ >= 11
313 return errno = ENOSYS, -1;