1/* 2 * Copyright (c) 1999 Apple Computer, Inc. All rights reserved. 3 * 4 * @APPLE_LICENSE_HEADER_START@ 5 * 6 * "Portions Copyright (c) 1999 Apple Computer, Inc. All Rights 7 * Reserved. This file contains Original Code and/or Modifications of 8 * Original Code as defined in and that are subject to the Apple Public 9 * Source License Version 1.0 (the 'License'). You may not use this file 10 * except in compliance with the License. Please obtain a copy of the 11 * License at http://www.apple.com/publicsource and read it before using 12 * this file. 13 * 14 * The Original Code and all software distributed under the License are 15 * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER 16 * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES, 17 * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, 18 * FITNESS FOR A PARTICULAR PURPOSE OR NON-INFRINGEMENT. Please see the 19 * License for the specific language governing rights and limitations 20 * under the License." 21 * 22 * @APPLE_LICENSE_HEADER_END@ 23 */ 24/* 25 * Mach Operating System 26 * Copyright (c) 1990 Carnegie-Mellon University 27 * All rights reserved. The CMU software License Agreement specifies 28 * the terms and conditions for use and redistribution. 29 */ 30/* 31 * File: hostinfo.c 32 * Author: Avadis Tevanian, Jr. 33 * 34 * Copyright (C) 1987, Avadis Tevanian, Jr. 35 * 36 * Display information about the host this program is 37 * execting on. 38 */ 39 40#include <mach/mach.h> 41#include <mach/mach_error.h> 42#include <sys/sysctl.h> 43#include <sys/errno.h> 44#include <stdio.h> 45#include <stdlib.h> 46 47struct host_basic_info hi; 48kernel_version_t version; 49int slots[1024]; 50 51int main(int argc, char *argv[]) 52{ 53 kern_return_t ret; 54 unsigned int size, count; 55 char *cpu_name, *cpu_subname; 56 int i; 57 int mib[2]; 58 size_t len; 59 uint64_t memsize; 60 processor_set_name_port_t default_pset; 61 host_name_port_t host; 62 struct processor_set_basic_info basic_info; 63 struct processor_set_load_info load_info; 64 65 host = mach_host_self(); 66 ret = host_kernel_version(host, version); 67 if (ret != KERN_SUCCESS) { 68 mach_error(argv[0], ret); 69 exit(EXIT_FAILURE); 70 } 71 printf("Mach kernel version:\n\t %s\n", version); 72 size = sizeof(hi)/sizeof(int); 73 ret = host_info(host, HOST_BASIC_INFO, (host_info_t)&hi, &size); 74 if (ret != KERN_SUCCESS) { 75 mach_error(argv[0], ret); 76 exit(EXIT_FAILURE); 77 } 78 79 ret = processor_set_default(host, &default_pset); 80 if (ret != KERN_SUCCESS) { 81 mach_error(argv[0], ret); 82 exit(EXIT_FAILURE); 83 } 84 85 count = PROCESSOR_SET_BASIC_INFO_COUNT; 86 ret = processor_set_info(default_pset, PROCESSOR_SET_BASIC_INFO, 87 &host, (processor_set_info_t)&basic_info, &count); 88 if (ret != KERN_SUCCESS) { 89 mach_error(argv[0], ret); 90 exit(EXIT_FAILURE); 91 } 92 93 count = PROCESSOR_SET_LOAD_INFO_COUNT; 94 ret = processor_set_statistics(default_pset, PROCESSOR_SET_LOAD_INFO, 95 (processor_set_info_t)&load_info, &count); 96 if (ret != KERN_SUCCESS) { 97 mach_error(argv[0], ret); 98 exit(EXIT_FAILURE); 99 } 100 101 mib[0] = CTL_HW; 102 mib[1] = HW_MEMSIZE; 103 len = sizeof(memsize); 104 memsize = 0L; 105 if(sysctl(mib, 2, &memsize, &len, NULL, 0 ) == -1) 106 { 107 perror("sysctl"); 108 exit(EXIT_FAILURE); 109 } 110 111 112 if (hi.max_cpus > 1) 113 printf("Kernel configured for up to %d processors.\n", 114 hi.max_cpus); 115 else 116 printf("Kernel configured for a single processor only.\n"); 117 printf("%d processor%s physically available.\n", hi.physical_cpu, 118 (hi.physical_cpu > 1) ? "s are" : " is"); 119 120 printf("%d processor%s logically available.\n", hi.logical_cpu, 121 (hi.logical_cpu > 1) ? "s are" : " is"); 122 123 printf("Processor type:"); 124 slot_name(hi.cpu_type, hi.cpu_subtype, &cpu_name, &cpu_subname); 125 printf(" %s (%s)\n", cpu_name, cpu_subname); 126 127 printf("Processor%s active:", (hi.avail_cpus > 1) ? "s" : ""); 128 for (i = 0; i < hi.avail_cpus; i++) 129 printf(" %d", i); 130 printf("\n"); 131 132 if (((float)memsize / (1024.0 * 1024.0)) >= 1024.0) 133 printf("Primary memory available: %.2f gigabytes\n", 134 (float)memsize/(1024.0*1024.0*1024.0)); 135 else 136 printf("Primary memory available: %.2f megabytes\n", 137 (float)memsize/(1024.0*1024.0)); 138 139 printf("Default processor set: %d tasks, %d threads, %d processors\n", 140 load_info.task_count, load_info.thread_count, basic_info.processor_count); 141 printf("Load average: %d.%02d, Mach factor: %d.%02d\n", 142 load_info.load_average/LOAD_SCALE, 143 (load_info.load_average%LOAD_SCALE)/10, 144 load_info.mach_factor/LOAD_SCALE, 145 (load_info.mach_factor%LOAD_SCALE)/10); 146 147 exit(0); 148} 149 150