Exemple #1
0
int main(int argc, char *argv[])
{
    pid_t pid;
    if (argc < 2) {
        printf("%s <PID>\n", argv[0]);
        return 0;
    }

    sscanf(argv[1], "%d", &pid);

    cpu_set_t mask;
    unsigned int len = sizeof(mask);
    if (sched_getaffinity(pid, len, &mask) < 0) {
        perror("sched_getaffinity");
        return -1;
    }

    int i, cpu_num = get_cpu_num();
    if (cpu_num < 0) {
        printf("can't get cpu number\n");
        return 1;
    }

    printf("PID[%d]: ", pid);
    for (i = 0; i < cpu_num; i++) {
        printf("%d", CPU_ISSET(i, &mask));
    }
    printf("\n");
    return 0;
}
void MachineMonitor::run()
{
    LOG.info("%s: start to monitor machine status.", _name.c_str());

    HostInfo::HostState::type machine_state = HostInfo::HostState::AVAILABLE;

    // check machine resource.
    LOG.trace("%s: start to monitor machine resource.", _name.c_str());
    ResourceTuple resource(get_cpu_num(), get_total_memory(), get_total_disk());
    if (resource._cpu_num <= 0L || resource._memory_mb <= 0L || resource._disk_total_mb <= 0L)
    {
        LOG.error("%s: get machine resource error.", _name.c_str());
        machine_state = HostInfo::HostState::FAILED;
    }
    LOG.info("%s: machine resource: %s", _name.c_str(),
                                         resource.to_json().toStyledString().c_str());

    if (!monitor_disk()) {
        LOG.error("%s: monitor disk error.", _name.c_str());
        machine_state = HostInfo::HostState::FAILED;
    }

    LOG.info("%s: machine status: %s", _name.c_str(),
                                       HostInfo::HostState::to_string(machine_state).c_str());
    
    _manager.report_machine_status(machine_state);
    _manager.report_machine_resource(resource);

    if (machine_state == HostInfo::HostState::FAILED) {
        die();
    }

    LOG.info("%s: finish to monitor machine.", _name.c_str());
}
Exemple #3
0
/*
 * initialize event manager.
 * socketer_num --- socket total number. must greater than 1.
 * thread_num --- thread number, if less than 0, then start by the number of cpu threads
 */
bool eventmgr_init(int socketer_num, int thread_num) {
	if (s_mgr || socketer_num < 1)
		return false;

	if (thread_num <= 0) {
		thread_num = get_cpu_num();
	}

	/* in kqueue, must only one thead. */
	thread_num = 1;

	{
		struct sigaction sa;
		memset(&sa, 0, sizeof(sa));
		sa.sa_handler = SIG_IGN;
		sigemptyset(&sa.sa_mask);
		if (sigaction(SIGPIPE, &sa, NULL) == -1)
			return false;
	}

	s_mgr = (struct kqueuemgr *)malloc(sizeof(struct kqueuemgr));
	if (!s_mgr)
		return false;

	/* initialize. */
	catomic_set(&s_mgr->event_num, 0);
	s_mgr->kqueue_fd = kqueue();
	if (s_mgr->kqueue_fd == -1) {
		free(s_mgr);
		s_mgr = NULL;
		return false;
	}

	s_mgr->thread_num = thread_num;
	s_mgr->need_exit = false;

	/* first building kqueue module, and then create thread pool. */
	s_mgr->thread_pool = cthread_pool_create(thread_num, s_mgr, leader_func, task_func);
	if (!s_mgr->thread_pool) {
		close(s_mgr->kqueue_fd);
		free(s_mgr);
		s_mgr = NULL;
		return false;
	}
	return true;
}
Exemple #4
0
int	SYSTEM_CPU_LOAD(AGENT_REQUEST *request, AGENT_RESULT *result)
{
	char	*tmp;
	int	mode, per_cpu = 1, cpu_num;
	double	load[ZBX_AVG_COUNT], value;

	if (2 < request->nparam)
		return SYSINFO_RET_FAIL;

	tmp = get_rparam(request, 0);

	if (NULL == tmp || '\0' == *tmp || 0 == strcmp(tmp, "all"))
		per_cpu = 0;
	else if (0 != strcmp(tmp, "percpu"))
		return SYSINFO_RET_FAIL;

	tmp = get_rparam(request, 1);

	if (NULL == tmp || '\0' == *tmp || 0 == strcmp(tmp, "avg1"))
		mode = ZBX_AVG1;
	else if (0 == strcmp(tmp, "avg5"))
		mode = ZBX_AVG5;
	else if (0 == strcmp(tmp, "avg15"))
		mode = ZBX_AVG15;
	else
		return SYSINFO_RET_FAIL;

	if (mode >= getloadavg(load, 3))
		return SYSINFO_RET_FAIL;

	value = load[mode];

	if (1 == per_cpu)
	{
		if (0 >= (cpu_num = get_cpu_num(1)))
			return SYSINFO_RET_FAIL;
		value /= cpu_num;
	}

	SET_DBL_RESULT(result, value);

	return SYSINFO_RET_OK;
}
int	SYSTEM_CPU_NUM(const char *cmd, const char *param, unsigned flags, AGENT_RESULT *result)
{
	char	tmp[16];
	int	cpu_num;

	if (1 < num_param(param))
		return SYSINFO_RET_FAIL;

	/* only "online" (default) for parameter "type" is supported */
	if (0 == get_param(param, 1, tmp, sizeof(tmp)) && '\0' != *tmp && 0 != strcmp(tmp, "online"))
		return SYSINFO_RET_FAIL;

	if (-1 == (cpu_num = get_cpu_num()))
		return SYSINFO_RET_FAIL;

	SET_UI64_RESULT(result, cpu_num);

	return SYSINFO_RET_OK;
}
Exemple #6
0
int main(int argc, char *argv[])
{
    pid_t pid;
    if (argc < 3) {
        printf("%s <PID> <CPU_AFFINITY>\ne.g. %s 9527 0110\n", argv[0], argv[0]);
        return 0;
    }

    sscanf(argv[1], "%d", &pid);

    int i, cpu_num = get_cpu_num();
    if (cpu_num < 0) {
        printf("can't get cpu number\n");
        return 1;
    }

    cpu_set_t mask;
    unsigned int len = sizeof(mask);
    CPU_ZERO(&mask);
    for (i = 0; i < cpu_num && argv[2][i] != '\0'; i++) {
        if (argv[2][i] == '1') {
            CPU_SET(i, &mask);
        }
        else if (argv[2][i] == '0') {
            CPU_CLR(i, &mask);
        }
        else {
            printf("bad cpu_affinity, only 0/1 is allowed\n");
            return 2;
        }
    }

    if (sched_setaffinity(pid, len, &mask) < 0) {
        perror("sched_setaffinity");
        return -1;
    }
    
    printf("PID[%d] set to [%s] ok\n", pid, argv[2]);

    return 0;
}
Exemple #7
0
int	SYSTEM_CPU_NUM(AGENT_REQUEST *request, AGENT_RESULT *result)
{
	char	*tmp;

	if (1 < request->nparam)
	{
		SET_MSG_RESULT(result, zbx_strdup(NULL, "Too many parameters."));
		return SYSINFO_RET_FAIL;
	}

	/* only "online" (default) for parameter "type" is supported */
	if (NULL != (tmp = get_rparam(request, 0)) && '\0' != *tmp && 0 != strcmp(tmp, "online"))
	{
		SET_MSG_RESULT(result, zbx_strdup(NULL, "Invalid first parameter."));
		return SYSINFO_RET_FAIL;
	}

	SET_UI64_RESULT(result, get_cpu_num());

	return SYSINFO_RET_OK;
}
Exemple #8
0
int	SYSTEM_CPU_NUM(AGENT_REQUEST *request, AGENT_RESULT *result)
{
	char	*tmp;
	int	cpu_num;

	if (1 < request->nparam)
		return SYSINFO_RET_FAIL;

	tmp = get_rparam(request, 0);

	/* only "online" (default) for parameter "type" is supported */
	if (NULL != tmp && '\0' != *tmp && 0 != strcmp(tmp, "online"))
		return SYSINFO_RET_FAIL;

	if (-1 == (cpu_num = get_cpu_num()))
		return SYSINFO_RET_FAIL;

	SET_UI64_RESULT(result, cpu_num);

	return SYSINFO_RET_OK;
}
Exemple #9
0
int bind_process_cpu(int cpu)
{
	cpu_set_t cmask;
	size_t n;
	int ret;

	n = get_cpu_num();

	if (cpu < 0 || cpu >= (int)n) {
		errno = EINVAL;
		return -1;
	}

	CPU_ZERO(&cmask);
	CPU_SET(cpu, &cmask);

	ret = sched_setaffinity(0, n, &cmask);

	CPU_ZERO(&cmask);

	return ret;
}
Exemple #10
0
int	SYSTEM_CPU_NUM(AGENT_REQUEST *request, AGENT_RESULT *result)
{
	char	*tmp;
	int	online = 0, ncpu;

	if (1 < request->nparam)
		return SYSINFO_RET_FAIL;

	tmp = get_rparam(request, 0);

	if (NULL == tmp || '\0' == *tmp || 0 == strcmp(tmp, "online"))
		online = 1;
	else if (0 != strcmp(tmp, "max"))
		return SYSINFO_RET_FAIL;

	if (-1 == (ncpu = get_cpu_num(online)))
		return SYSINFO_RET_FAIL;

	SET_UI64_RESULT(result, ncpu);

	return SYSINFO_RET_OK;
}
int	SYSTEM_CPU_LOAD(const char *cmd, const char *param, unsigned flags, AGENT_RESULT *result)
{
	char	tmp[16];
	int	mode, per_cpu = 1, cpu_num;
	double	load[ZBX_AVG_COUNT], value;

	if (2 < num_param(param))
		return SYSINFO_RET_FAIL;

	if (0 != get_param(param, 1, tmp, sizeof(tmp)) || '\0' == *tmp || 0 == strcmp(tmp, "all"))
		per_cpu = 0;
	else if (0 != strcmp(tmp, "percpu"))
		return SYSINFO_RET_FAIL;

	if (0 != get_param(param, 2, tmp, sizeof(tmp)) || '\0' == *tmp || 0 == strcmp(tmp, "avg1"))
		mode = ZBX_AVG1;
	else if (0 == strcmp(tmp, "avg5"))
		mode = ZBX_AVG5;
	else if (0 == strcmp(tmp, "avg15"))
		mode = ZBX_AVG15;
	else
		return SYSINFO_RET_FAIL;

	if (mode >= getloadavg(load, 3))
		return SYSINFO_RET_FAIL;

	value = load[mode];

	if (1 == per_cpu)
	{
		if (0 >= (cpu_num = get_cpu_num()))
			return SYSINFO_RET_FAIL;
		value /= cpu_num;
	}

	SET_DBL_RESULT(result, value);

	return SYSINFO_RET_OK;
}
Exemple #12
0
int main(int argc, char *argv[])
{

	printf("Usage: %s [-k] [-d] [-c] [start_cpu] [-w] [worker_num] [-a] [ip:port ...] [-x] [ip:port ...]\n",
	       argv[0]);
	printf("   -c: specify the first cpu to bind each worker\n	   [default is 0]\n");
	printf("   -w: specify worker number\n	   [default is the available cpu core number]\n");
	printf("   -a: specify frontend listen address\n	   [default is 0.0.0.0:80]\n");
	printf("   -x: enable proxy mode and specify backend listen address\n	   [default is off]\n");
	printf("   -k: enable HTTP keepalive\n	   [default is off]\n");
	printf("   -v: enable verbose mode\n	   [default is off]\n");
	printf("   -d: enable debug mode\n	   [default is off]\n");
	printf("   -o: specify log file\n	   [default is ./demo.log]\n");
	printf("\n");

again:
	if (argc >= 2 && strcmp(argv[1], "-d") == 0) {
		enable_debug = 1;
		argv++;
		argc--;
		goto again;
	}

	if (argc >= 2 && strcmp(argv[1], "-v") == 0) {
		enable_verbose = 1;
		argv++;
		argc--;
		goto again;
	}

	if (argc >= 2 && strcmp(argv[1], "-k") == 0) {
		enable_keepalive = 1;
		argv++;
		argc--;
		goto again;
	}

	if (argc >= 3 && strcmp(argv[1], "-o") == 0) {
		strncpy(log_path, argv[2], sizeof(log_path));
		specified_log_file = 1;
		argv += 2;
		argc -= 2;
		goto again;
	}

	if (argc >= 3 && strcmp(argv[1], "-c") == 0) {
		start_cpu = atoi(argv[2]);

		argv += 2;
		argc -= 2;
		goto again;
	}

	if (argc >= 3 && strcmp(argv[1], "-w") == 0) {
		process_mode = 1;
		num_workers = atoi(argv[2]);

		argv += 2;
		argc -= 2;
		goto again;
	}

	if (argc >= 3 && strcmp(argv[1], "-a") == 0) {
		int i ;

		for (i = 0; i < MAX_LISTEN_ADDRESS && argv[2]; i++) {
			char *sep = strchr(argv[2], ':');

			if (sep) {
				*sep = 0;
				strncpy(la[i].param_ip, argv[2], 32);
				inet_aton(la[i].param_ip, &la[i].listenip);
				sscanf(++sep, "%d", &la[i].param_port);
			} else
				break;
			argv++;
			argc--;
			la_num++;
		}

		argv++;
		argc--;
		goto again;
	}

	if (argc >= 3 && strcmp(argv[1], "-x") == 0) {
		int i ;

		enable_proxy = 1;

		for (i = 0; i < MAX_PROXY_ADDRESS && argv[2]; i++) {
			char *sep = strchr(argv[2], ':');

			if (sep) {
				*sep = 0;
				strncpy(pa[i].param_ip, argv[2], 32);
				inet_aton(pa[i].param_ip, &pa[i].proxyip);
				sscanf(++sep, "%d", &pa[i].param_port);
			} else
				break;

			argv++;
			argc--;
			pa_num++;
		}

		argv++;
		argc--;
		goto again;
	}

	if (!process_mode)
		process_mode = 1;
	if (!num_workers)
		num_workers = get_cpu_num();

	assert(num_workers >= 1 && num_workers <= get_cpu_num());

	if (la_num) {
		int i;

		printf("Specified listen address:\n");

		for (i = 0; i < la_num; i++) {
			printf("\t%s:%d\n",
			       la[i].param_ip, la[i].param_port);
		}
	} else {
		la_num = 1;
		strncpy(la[0].param_ip, "0.0.0.0", 32);
		inet_aton(la[0].param_ip, &la[0].listenip);
		la[0].param_port = 80;
		printf("Default listen address:\n\t%s:%d\n",
		       la[0].param_ip, la[0].param_port);
	}
	printf("\n");

	if (pa_num) {
		int i;

		printf("Proxy mode is enabled, back-end address:\n");

		if (enable_keepalive)
			printf("HTTP keepalive is not supported in the proxy mode so far and therefore is disabled\n\n");

		enable_keepalive = 0;

		for (i = 0; i < pa_num; i++) {
			printf("\t%s:%d\n",
			       pa[i].param_ip, pa[i].param_port);
		}
		printf("\n");
	}

	if (enable_debug)
		printf("Debug Mode is enabled\n\n");

	if (enable_keepalive)
		printf("HTTP keepalive is enabled\n\n");

	if (process_mode)
		printf("Process Mode is enable with %d workers\n\n", num_workers);

	init_log();
	init_server();
	init_signal();

	init_workers();

	init_timer();
	do_stats();

	return 0;
}
Exemple #13
0
int checkcpu (void)
{
#if !defined(CONFIG_405)	/* not used on Xilinx 405 FPGA implementations */
	uint pvr = get_pvr();
	ulong clock = gd->cpu_clk;
	char buf[32];
#if defined(CONFIG_460EX) || defined(CONFIG_460GT)
	u32 reg;
#endif

#if !defined(CONFIG_IOP480)
	char addstr[64] = "";
	sys_info_t sys_info;
	int cpu_num;

	cpu_num = get_cpu_num();
	if (cpu_num >= 0)
		printf("CPU%d:  ", cpu_num);
	else
		puts("CPU:   ");

	get_sys_info(&sys_info);

#if defined(CONFIG_XILINX_440)
	puts("IBM PowerPC 4");
#else
	puts("AMCC PowerPC 4");
#endif

#if defined(CONFIG_405GP) || defined(CONFIG_405CR) || \
    defined(CONFIG_405EP) || defined(CONFIG_405EZ) || \
    defined(CONFIG_405EX)
	puts("05");
#endif
#if defined(CONFIG_440)
#if defined(CONFIG_460EX) || defined(CONFIG_460GT)
	puts("60");
#else
	puts("40");
#endif
#endif

	switch (pvr) {
	case PVR_405GP_RB:
		puts("GP Rev. B");
		break;

	case PVR_405GP_RC:
		puts("GP Rev. C");
		break;

	case PVR_405GP_RD:
		puts("GP Rev. D");
		break;

#ifdef CONFIG_405GP
	case PVR_405GP_RE: /* 405GP rev E and 405CR rev C have same PVR */
		puts("GP Rev. E");
		break;
#endif

	case PVR_405CR_RA:
		puts("CR Rev. A");
		break;

	case PVR_405CR_RB:
		puts("CR Rev. B");
		break;

#ifdef CONFIG_405CR
	case PVR_405CR_RC: /* 405GP rev E and 405CR rev C have same PVR */
		puts("CR Rev. C");
		break;
#endif

	case PVR_405GPR_RB:
		puts("GPr Rev. B");
		break;

	case PVR_405EP_RB:
		puts("EP Rev. B");
		break;

	case PVR_405EZ_RA:
		puts("EZ Rev. A");
		break;

	case PVR_405EX1_RA:
		puts("EX Rev. A");
		strcpy(addstr, "Security support");
		break;

	case PVR_405EXR2_RA:
		puts("EXr Rev. A");
		strcpy(addstr, "No Security support");
		break;

	case PVR_405EX1_RC:
		puts("EX Rev. C");
		strcpy(addstr, "Security support");
		break;

	case PVR_405EX2_RC:
		puts("EX Rev. C");
		strcpy(addstr, "No Security support");
		break;

	case PVR_405EXR1_RC:
		puts("EXr Rev. C");
		strcpy(addstr, "Security support");
		break;

	case PVR_405EXR2_RC:
		puts("EXr Rev. C");
		strcpy(addstr, "No Security support");
		break;

	case PVR_405EX1_RD:
		puts("EX Rev. D");
		strcpy(addstr, "Security support");
		break;

	case PVR_405EX2_RD:
		puts("EX Rev. D");
		strcpy(addstr, "No Security support");
		break;

	case PVR_405EXR1_RD:
		puts("EXr Rev. D");
		strcpy(addstr, "Security support");
		break;

	case PVR_405EXR2_RD:
		puts("EXr Rev. D");
		strcpy(addstr, "No Security support");
		break;

#if defined(CONFIG_440)
	case PVR_440GP_RB:
		puts("GP Rev. B");
		/* See errata 1.12: CHIP_4 */
		if ((mfdcr(CPC0_SYS0) != mfdcr(CPC0_STRP0)) ||
		    (mfdcr(CPC0_SYS1) != mfdcr(CPC0_STRP1)) ){
			puts (  "\n\t CPC0_SYSx DCRs corrupted. "
				"Resetting chip ...\n");
			udelay( 1000 * 1000 ); /* Give time for serial buf to clear */
			do_chip_reset ( mfdcr(CPC0_STRP0),
					mfdcr(CPC0_STRP1) );
		}
		break;

	case PVR_440GP_RC:
		puts("GP Rev. C");
		break;

	case PVR_440GX_RA:
		puts("GX Rev. A");
		break;

	case PVR_440GX_RB:
		puts("GX Rev. B");
		break;

	case PVR_440GX_RC:
		puts("GX Rev. C");
		break;

	case PVR_440GX_RF:
		puts("GX Rev. F");
		break;

	case PVR_440EP_RA:
		puts("EP Rev. A");
		break;

#ifdef CONFIG_440EP
	case PVR_440EP_RB: /* 440EP rev B and 440GR rev A have same PVR */
		puts("EP Rev. B");
		break;

	case PVR_440EP_RC: /* 440EP rev C and 440GR rev B have same PVR */
		puts("EP Rev. C");
		break;
#endif /*  CONFIG_440EP */

#ifdef CONFIG_440GR
	case PVR_440GR_RA: /* 440EP rev B and 440GR rev A have same PVR */
		puts("GR Rev. A");
		break;

	case PVR_440GR_RB: /* 440EP rev C and 440GR rev B have same PVR */
		puts("GR Rev. B");
		break;
#endif /* CONFIG_440GR */
#endif /* CONFIG_440 */

#ifdef CONFIG_440EPX
	case PVR_440EPX1_RA: /* 440EPx rev A and 440GRx rev A have same PVR */
		puts("EPx Rev. A");
		strcpy(addstr, "Security/Kasumi support");
		break;

	case PVR_440EPX2_RA: /* 440EPx rev A and 440GRx rev A have same PVR */
		puts("EPx Rev. A");
		strcpy(addstr, "No Security/Kasumi support");
		break;
#endif /* CONFIG_440EPX */

#ifdef CONFIG_440GRX
	case PVR_440GRX1_RA: /* 440EPx rev A and 440GRx rev A have same PVR */
		puts("GRx Rev. A");
		strcpy(addstr, "Security/Kasumi support");
		break;

	case PVR_440GRX2_RA: /* 440EPx rev A and 440GRx rev A have same PVR */
		puts("GRx Rev. A");
		strcpy(addstr, "No Security/Kasumi support");
		break;
#endif /* CONFIG_440GRX */

	case PVR_440SP_6_RAB:
		puts("SP Rev. A/B");
		strcpy(addstr, "RAID 6 support");
		break;

	case PVR_440SP_RAB:
		puts("SP Rev. A/B");
		strcpy(addstr, "No RAID 6 support");
		break;

	case PVR_440SP_6_RC:
		puts("SP Rev. C");
		strcpy(addstr, "RAID 6 support");
		break;

	case PVR_440SP_RC:
		puts("SP Rev. C");
		strcpy(addstr, "No RAID 6 support");
		break;

	case PVR_440SPe_6_RA:
		puts("SPe Rev. A");
		strcpy(addstr, "RAID 6 support");
		break;

	case PVR_440SPe_RA:
		puts("SPe Rev. A");
		strcpy(addstr, "No RAID 6 support");
		break;

	case PVR_440SPe_6_RB:
		puts("SPe Rev. B");
		strcpy(addstr, "RAID 6 support");
		break;

	case PVR_440SPe_RB:
		puts("SPe Rev. B");
		strcpy(addstr, "No RAID 6 support");
		break;

#if defined(CONFIG_460EX) || defined(CONFIG_460GT)
	case PVR_460EX_RA:
		puts("EX Rev. A");
		strcpy(addstr, "No Security/Kasumi support");
		break;

	case PVR_460EX_SE_RA:
		puts("EX Rev. A");
		strcpy(addstr, "Security/Kasumi support");
		break;

	case PVR_460EX_RB:
		puts("EX Rev. B");
		mfsdr(SDR0_ECID3, reg);
		if (reg & 0x00100000)
			strcpy(addstr, "No Security/Kasumi support");
		else
			strcpy(addstr, "Security/Kasumi support");
		break;

	case PVR_460GT_RA:
		puts("GT Rev. A");
		strcpy(addstr, "No Security/Kasumi support");
		break;

	case PVR_460GT_SE_RA:
		puts("GT Rev. A");
		strcpy(addstr, "Security/Kasumi support");
		break;

	case PVR_460GT_RB:
		puts("GT Rev. B");
		mfsdr(SDR0_ECID3, reg);
		if (reg & 0x00100000)
			strcpy(addstr, "No Security/Kasumi support");
		else
			strcpy(addstr, "Security/Kasumi support");
		break;
#endif

	case PVR_460SX_RA:
		puts("SX Rev. A");
		strcpy(addstr, "Security support");
		break;

	case PVR_460SX_RA_V1:
		puts("SX Rev. A");
		strcpy(addstr, "No Security support");
		break;

	case PVR_460GX_RA:
		puts("GX Rev. A");
		strcpy(addstr, "Security support");
		break;

	case PVR_460GX_RA_V1:
		puts("GX Rev. A");
		strcpy(addstr, "No Security support");
		break;

	case PVR_VIRTEX5:
		puts("x5 VIRTEX5");
		break;

	default:
		printf (" UNKNOWN (PVR=%08x)", pvr);
		break;
	}

	printf (" at %s MHz (PLB=%lu OPB=%lu EBC=%lu",
		strmhz(buf, clock),
		sys_info.freqPLB / 1000000,
		get_OPB_freq() / 1000000,
		sys_info.freqEBC / 1000000);
#if defined(CONFIG_PCI) && \
	(defined(CONFIG_440EP) || defined(CONFIG_440EPX) || \
	 defined(CONFIG_440GR) || defined(CONFIG_440GRX))
	printf(" PCI=%lu MHz", sys_info.freqPCI / 1000000);
#endif
	printf(")\n");

	if (addstr[0] != 0)
		printf("       %s\n", addstr);

#if defined(I2C_BOOTROM)
	printf ("       I2C boot EEPROM %sabled\n", i2c_bootrom_enabled() ? "en" : "dis");
#endif	/* I2C_BOOTROM */
#if defined(SDR0_PINSTP_SHIFT)
	printf ("       Bootstrap Option %c - ", bootstrap_char[bootstrap_option()]);
	printf ("Boot ROM Location %s", bootstrap_str[bootstrap_option()]);
#ifdef CONFIG_NAND_U_BOOT
	puts(", booting from NAND");
#endif /* CONFIG_NAND_U_BOOT */
	putc('\n');
#endif	/* SDR0_PINSTP_SHIFT */

#if defined(CONFIG_PCI) && !defined(CONFIG_405EX)
	printf ("       Internal PCI arbiter %sabled", pci_arbiter_enabled() ? "en" : "dis");
#endif

#if defined(CONFIG_PCI) && defined(PCI_ASYNC)
	if (pci_async_enabled()) {
		printf (", PCI async ext clock used");
	} else {
		printf (", PCI sync clock at %lu MHz",
		       sys_info.freqPLB / sys_info.pllPciDiv / 1000000);
	}
#endif

#if defined(CONFIG_PCI) && !defined(CONFIG_405EX)
	putc('\n');
#endif

#if defined(CONFIG_405EP) || defined(CONFIG_405EZ) || defined(CONFIG_405EX)
	printf ("       16 kB I-Cache 16 kB D-Cache");
#elif defined(CONFIG_440)
	printf ("       32 kB I-Cache 32 kB D-Cache");
#else
	printf ("       16 kB I-Cache %d kB D-Cache",
		((pvr | 0x00000001) == PVR_405GPR_RB) ? 16 : 8);
#endif
#endif /* !defined(CONFIG_IOP480) */

#if defined(CONFIG_IOP480)
	printf ("PLX IOP480 (PVR=%08x)", pvr);
	printf (" at %s MHz:", strmhz(buf, clock));
	printf (" %u kB I-Cache", 4);
	printf (" %u kB D-Cache", 2);
#endif

#endif /* !defined(CONFIG_405) */

	putc ('\n');

	return 0;
}
Exemple #14
0
int	SYSTEM_CPU_LOAD(AGENT_REQUEST *request, AGENT_RESULT *result)
{
	char	*tmp, *error = NULL;
	double	value;
	int	cpu_num, ret = FAIL;

	if (0 == CPU_COLLECTOR_STARTED(collector))
	{
		SET_MSG_RESULT(result, zbx_strdup(NULL, "Collector is not started."));
		return SYSINFO_RET_FAIL;
	}

	if (2 < request->nparam)
	{
		SET_MSG_RESULT(result, zbx_strdup(NULL, "Too many parameters."));
		return SYSINFO_RET_FAIL;
	}

	if (NULL == (tmp = get_rparam(request, 0)) || '\0' == *tmp || 0 == strcmp(tmp, "all"))
	{
		cpu_num = 1;
	}
	else if (0 == strcmp(tmp, "percpu"))
	{
		if (0 >= (cpu_num = get_cpu_num()))
		{
			SET_MSG_RESULT(result, zbx_strdup(NULL, "Cannot obtain number of CPUs."));
			return SYSINFO_RET_FAIL;
		}
	}
	else
	{
		SET_MSG_RESULT(result, zbx_strdup(NULL, "Invalid first parameter."));
		return SYSINFO_RET_FAIL;
	}

	if (NULL == (tmp = get_rparam(request, 1)) || '\0' == *tmp || 0 == strcmp(tmp, "avg1"))
	{
		ret = get_perf_counter_value(collector->cpus.queue_counter, 1 * SEC_PER_MIN, &value, &error);
	}
	else if (0 == strcmp(tmp, "avg5"))
	{
		ret = get_perf_counter_value(collector->cpus.queue_counter, 5 * SEC_PER_MIN, &value, &error);
	}
	else if (0 == strcmp(tmp, "avg15"))
	{
		ret = get_perf_counter_value(collector->cpus.queue_counter, 15 * SEC_PER_MIN, &value, &error);
	}
	else
	{
		SET_MSG_RESULT(result, zbx_strdup(NULL, "Invalid second parameter."));
		return SYSINFO_RET_FAIL;
	}

	if (SUCCEED == ret)
	{
		SET_DBL_RESULT(result, value / cpu_num);
		return SYSINFO_RET_OK;
	}

	SET_MSG_RESULT(result, NULL != error ? error :
			zbx_strdup(NULL, "Cannot obtain performance information from collector."));

	return SYSINFO_RET_FAIL;
}
Exemple #15
0
int merry_start(int argc, const char **argv, void (*help)(), void (*master)(), void (*onexit)(), void (*worker)(),
                int worker_count)
{
    update_time();

    /// 初始化进程命令行信息
    init_process_title(argc, argv);

    int i = strlen(argv[0]);

    while(argv[0][--i] != '/');

    program_name = argv[0] + i + 1;

    if(getarg("help")) {
        help();
        exit(0);
    }

    if(getarg("log")) {
        LOGF_T = open_log(getarg("log"), 40960); // filename, bufsize
    }

    /// 把进程放入后台
    if(getarg("daemon")) {
        daemonize();
    }

    process_count = 1;

    if(is_daemon == 1) {
        process_count = atoi(getarg("daemon"));

        if(process_count < 1) {
            process_count = get_cpu_num();
        }

        if(process_count < 1) {
            process_count = 1;
        }
    }

    if(worker_count > 0 && process_count > worker_count) {
        process_count = worker_count;
    }

    sprintf(bind_addr, "0.0.0.0");

    if(getarg("bind")) {
        if(strstr(getarg("bind"), ".")) {
            sprintf(bind_addr, "%s", getarg("bind"));

        } else {
            int _be_port = atoi(getarg("bind"));

            if(_be_port > 0) {
                bind_port = _be_port;
            }
        }
    }

    char *_port = strstr(bind_addr, ":");

    if(_port) {
        bind_addr[strlen(bind_addr) - strlen(_port)] = '\0';
        _port = _port + 1;

        if(atoi(_port) > 0 && atoi(_port) < 99999) {
            bind_port = atoi(_port);
        }
    }

    sprintf(ssl_bind_addr, "0.0.0.0");

    if(getarg("ssl-bind")) {
        if(strstr(getarg("ssl-bind"), ".")) {
            sprintf(ssl_bind_addr, "%s", getarg("ssl-bind"));
            _port = strstr(ssl_bind_addr, ":");

            if(_port) {
                ssl_bind_addr[strlen(ssl_bind_addr) - strlen(_port)] = '\0';
                _port = _port + 1;

                if(atoi(_port) > 0 && atoi(_port) < 99999) {
                    ssl_bind_port = atoi(_port);
                }
            }

        } else {
            int _be_port = atoi(getarg("ssl-bind"));

            if(_be_port > 0) {
                ssl_bind_port = _be_port;
            }
        }
    }

    server_fd = network_bind(bind_addr, bind_port);

    if(ssl_bind_port > 0) {
        ssl_server_fd = network_bind(ssl_bind_addr, ssl_bind_port);
        LOGF(INFO, "bind %s:%d ssl:%d", bind_addr, bind_port, ssl_bind_port);

    } else {
        LOGF(INFO, "bind %s:%d", bind_addr, bind_port);
    }

    for(i = 0; i < process_count; i++) {
        if(is_daemon == 1) {
            fork_process(worker);

        } else {
            set_cpu_affinity(0);
            new_thread_p(worker, 0);
        }
    }

    /// 进入主进程处理
    start_master_main(master, onexit);

    return 1;
}