static unsigned get_kernel_HZ(void) { if (kernel_HZ) return kernel_HZ; /* Works for ELF only, Linux 2.4.0+ */ kernel_HZ = find_elf_note(AT_CLKTCK); if (kernel_HZ == (unsigned)-1) kernel_HZ = get_HZ_by_waiting(); G.seconds_since_boot = get_uptime(); return kernel_HZ; }
static void init_libproc(void){ // ought to count CPUs in /proc/stat instead of relying // on glibc, which foolishly tries to parse /proc/cpuinfo // // SourceForge has an old Alpha running Linux 2.2.20 that // appears to have a non-SMP kernel on a 2-way SMP box. // _SC_NPROCESSORS_CONF returns 2, resulting in HZ=512 // _SC_NPROCESSORS_ONLN returns 1, which should work OK smp_num_cpus = sysconf(_SC_NPROCESSORS_ONLN); if(smp_num_cpus<1) smp_num_cpus=1; /* SPARC glibc is buggy */ if(linux_version_code > LINUX_VERSION(2, 4, 0)){ Hertz = find_elf_note(AT_CLKTCK); if(Hertz!=NOTE_NOT_FOUND) return; fputs("2.4+ kernel w/o ELF notes? -- report this\n", stderr); } old_Hertz_hack(); }
static unsigned get_kernel_HZ(void) { //char buf[64]; struct sysinfo info; if (kernel_HZ) return kernel_HZ; /* Works for ELF only, Linux 2.4.0+ */ kernel_HZ = find_elf_note(AT_CLKTCK); if (kernel_HZ == (unsigned)-1) kernel_HZ = get_HZ_by_waiting(); //if (open_read_close("/proc/uptime", buf, sizeof(buf)) <= 0) // bb_perror_msg_and_die("can't read %s", "/proc/uptime"); //buf[sizeof(buf)-1] = '\0'; ///sscanf(buf, "%llu", &seconds_since_boot); sysinfo(&info); seconds_since_boot = info.uptime; return kernel_HZ; }