????

Your IP : 3.149.248.3


Current Path : /root/mod_performance-master/
Upload File :
Current File : //root/mod_performance-master/iostat.c

/*
 * Copyright 2012 Alexey Berezhok (alexey_com@ukr.net, bayrepo.info@gmail.com)
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *   http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

/*
 * iostat.c
 *
 *  Created on: May 30, 2011
 *  Author: SKOREE
 *  E-mail: alexey_com@ukr.net
 *  Site: lexvit.dn.ua
 */

#include <stdio.h>
#include <sys/stat.h>
#include <unistd.h>
#include <stdlib.h>
#include <fcntl.h>
#include <string.h>
#include <stdarg.h>
#include <sys/utsname.h>
#include <sys/stat.h>
#include <ctype.h>
#include <sys/time.h>

#include "iostat.h"

#if defined(linux)

#define FILENAME        "/proc/stat"
#define LINUX_VERSION_CODE(x,y,z)   (0x10000*(x) + 0x100*(y) + z)

unsigned long os_version_code;
long smp_num_cpus = 1;

static int file_exists(char *fileName) {
	struct stat buf;
	int i = stat(fileName, &buf);
	if (i < 0)
		return 0;
	else {
		if (S_ISDIR (buf.st_mode)) {
			return 1;
		} else {
			return 0;
		}
	}
}

static inline char *
next_token(const char *p) {
	while (isspace (*p))
		p++;
	return (char *) p;
}

static char *
skip_token(const char *p) {
	p = next_token(p);
	while (*p && !isspace (*p))
		p++;
	p = next_token(p);
	return (char *) p;
}

static int has_sysfs(void) {
	static int init;
	static int sysfs;

	if (!init) {
		sysfs = file_exists("/sys");
		init = 1;
	}

	return sysfs;
}

static int set_linux_version() {
	struct utsname uts;
	unsigned x = 0, y = 0, z = 0;

	if (uname(&uts) == -1) /* failure most likely implies impending death */
		return -1;
	sscanf(uts.release, "%u.%u.%u", &x, &y, &z);
	if (LINUX_VERSION_CODE (x, y, z) >= LINUX_VERSION_CODE (2, 6, 0)
			&& !has_sysfs())
		return -1;

	os_version_code = LINUX_VERSION_CODE (x, y, z);
	return 0;
}

static int try_file_to_buffer_iostat(char *buffer, const char *format, ...) {
	char path[_PATH_SIZE];
	int fd;
	ssize_t len;
	va_list pa;

	va_start(pa, format);

	vsnprintf(path, sizeof path, format, pa);

	va_end(pa);

	buffer[0] = '\0';

	if ((fd = open(path, O_RDONLY)) < 0)
		return TRY_FILE_TO_BUFFER_OPEN_IOSTAT;

	len = read(fd, buffer, BUFSIZ - 1);
	close(fd);

	if (len < 0)
		return TRY_FILE_TO_BUFFER_READ_IOSTAT;

	buffer[len] = '\0';

	return TRY_FILE_TO_BUFFER_OK_IOSTAT;
}

static unsigned long long get_scaled_iostat(const char *buffer, const char *key) {
	const char *ptr;
	char *next;
	unsigned long long value = 0;
	//int dummy;

	ptr = strstr(buffer, key);
	if (ptr) {
		ptr += strlen(key);
		value = strtoull(ptr, &next, 0);
		if (strchr(next, 'k'))
			value *= 1024;
		else if (strchr(next, 'M'))
			value *= 1024 * 1024;
	} //else {
		//g_warning ("Could not read key '%s' in buffer '%s'", key, buffer);
	//	dummy = 1;
	//}

	return value;
}

void get_io_stat(iostat * info, long pid, long tid) {
	char buffer[BUFSIZ];
	io_stat_reset(info);
	int res;
	if (tid != (long) -1)
		res = try_file_to_buffer_iostat(buffer, "/proc/%d/task/%d/io", pid,
				tid);
	else
		res = try_file_to_buffer_iostat(buffer, "/proc/%d/io", pid);
	if (res == TRY_FILE_TO_BUFFER_OK_IOSTAT) {
		info->rchar = get_scaled_iostat(buffer, "rchar:");
		info->wchar = get_scaled_iostat(buffer, "wchar:");
		info->read_bytes = get_scaled_iostat(buffer, "read_bytes:");
		info->write_bytes = get_scaled_iostat(buffer, "write_bytes:");
		info->cancelled_write_bytes = get_scaled_iostat(buffer,
				"cancelled_write_bytes:");
	}
}

void get_io_stat_current(iostat * info, long pid, long tid) {
	char buffer[BUFSIZ];
	io_stat_reset(info);
	int res;
	if (tid != (long) -1)
		res = try_file_to_buffer_iostat(buffer, "/proc/self/task/%d/io", tid);
	else
		res = try_file_to_buffer_iostat(buffer, "/proc/self/io");
	if (res == TRY_FILE_TO_BUFFER_OK_IOSTAT) {
		info->rchar = get_scaled_iostat(buffer, "rchar:");
		info->wchar = get_scaled_iostat(buffer, "wchar:");
		info->read_bytes = get_scaled_iostat(buffer, "read_bytes:");
		info->write_bytes = get_scaled_iostat(buffer, "write_bytes:");
		info->cancelled_write_bytes = get_scaled_iostat(buffer,
				"cancelled_write_bytes:");
	}
}

void io_stat_reset(iostat * info) {
	memset(info, 0, sizeof(iostat));
}

void glibtop_get_cpu_own(glibtop_cpu_own * buf) {
	char buffer[BUFSIZ], *p;

	memset(buf, 0, sizeof(glibtop_cpu_own));

	int res = try_file_to_buffer_iostat(buffer, FILENAME);
	if (res == TRY_FILE_TO_BUFFER_OK_IOSTAT) {
		p = skip_token(buffer);
		buf->user = strtoull(p, &p, 0);
		buf->nice = strtoull(p, &p, 0);
		buf->sys = strtoull(p, &p, 0);
		buf->idle = strtoull(p, &p, 0);
		buf->total = buf->user + buf->nice + buf->sys + buf->idle;

		/* 2.6 kernel */
		if (os_version_code >= LINUX_VERSION_CODE (2, 6, 0)) {
			buf->iowait = strtoull(p, &p, 0);
			buf->irq = strtoull(p, &p, 0);
			buf->softirq = strtoull(p, &p, 0);

			buf->total += buf->iowait + buf->irq + buf->softirq;
		}

		buf->frequency = 100;
	}
}

int glibtop_init_own() {
	smp_num_cpus = sysconf(_SC_NPROCESSORS_ONLN);
	if (smp_num_cpus < 1)
		smp_num_cpus = 1;
	return set_linux_version();
}

static inline char *
proc_stat_after_cmd(char *p) {
	p = strrchr(p, ')');
	if (p)
		*p++ = '\0';
	return p;
}

static inline char *
skip_multiple_token(const char *p, size_t count) {
	while (count--)
		p = skip_token(p);

	return (char *) p;
}

void glibtop_get_proc_time_own(glibtop_proc_time_own * buf, pid_t pid,
		pid_t tid) {
	char buffer[BUFSIZ], *p;
	memset(buf, 0, sizeof(glibtop_proc_time_own));

	int res;
	if (tid != (long) -1)
		res = try_file_to_buffer_iostat(buffer, "/proc/%d/task/%d/stat", pid,
				tid);
	else
		res = try_file_to_buffer_iostat(buffer, "/proc/%d/stat", pid);
	if (res == TRY_FILE_TO_BUFFER_OK_IOSTAT) {
		p = proc_stat_after_cmd(buffer);
		if (!p)
			return;

		p = skip_multiple_token(p, 11);

		buf->utime = strtoull(p, &p, 0);
		buf->stime = strtoull(p, &p, 0);
		buf->rtime = buf->utime + buf->stime;
		buf->cutime = strtoull(p, &p, 0);
		buf->cstime = strtoull(p, &p, 0);
		p = skip_multiple_token(p, 3);
		buf->it_real_value = strtoull(p, &p, 0);
		buf->frequency = 100;

	}
}

#define FILENAMEMEM        "/proc/meminfo"

void glibtop_get_mem_own(glibtop_mem_own * buf) {
	glibtop_get_mem_own_ret(buf);

}

int glibtop_get_mem_own_ret(glibtop_mem_own * buf) {
	char buffer[BUFSIZ];
	memset(buf, 0, sizeof *buf);

	int res = try_file_to_buffer_iostat(buffer, FILENAMEMEM);
	if (res == TRY_FILE_TO_BUFFER_OK_IOSTAT) {
		buf->total = get_scaled_iostat(buffer, "MemTotal:");
		buf->free = get_scaled_iostat(buffer, "MemFree:");
		buf->used = buf->total - buf->free;
		buf->shared = 0;
		buf->buffer = get_scaled_iostat(buffer, "Buffers:");
		buf->cached = get_scaled_iostat(buffer, "Cached:");

		buf->user = buf->total - buf->free - buf->cached - buf->buffer;
		return 0;
	}
	return -1;

}

static size_t get_page_size(void) {
	static size_t pagesize = 0;

	if (!pagesize) {
		pagesize = getpagesize();
	}

	return pagesize;
}

void glibtop_get_proc_mem_own(glibtop_proc_mem_own * buf, pid_t pid, pid_t tid) {
	glibtop_get_proc_mem_own_ret(buf, pid, tid);
}

int glibtop_get_proc_mem_own_ret(glibtop_proc_mem_own * buf, pid_t pid,
		pid_t tid) {
	char buffer[BUFSIZ], *p;
	const size_t pagesize = get_page_size();
	memset(buf, 0, sizeof(glibtop_proc_mem_own));

	int res;
	if (tid != (long) -1)
		res = try_file_to_buffer_iostat(buffer, "/proc/%d/task/%d/stat", pid,
				tid);
	else
		res = try_file_to_buffer_iostat(buffer, "/proc/%d/stat", pid);
	if (res == TRY_FILE_TO_BUFFER_OK_IOSTAT) {
		p = proc_stat_after_cmd(buffer);
		if (!p)
			return -1;

		p = skip_multiple_token(p, 20);

		buf->vsize = strtoull(p, &p, 0);
		buf->rss = strtoull(p, &p, 0);
		buf->rss_rlim = strtoull(p, &p, 0);

		if (tid != (long) -1)
			res = try_file_to_buffer_iostat(buffer, "/proc/%d/task/%d/statm",
				pid, tid);
		else
			res = try_file_to_buffer_iostat(buffer, "/proc/%d/statm",
							pid);
		if (res == TRY_FILE_TO_BUFFER_OK_IOSTAT) {
			buf->size = strtoull(buffer, &p, 0);
			buf->resident = strtoull(p, &p, 0);
			buf->share = strtoull(p, &p, 0);
		} else
			return -1;
		buf->size *= pagesize;
		buf->resident *= pagesize;
		buf->share *= pagesize;
		buf->rss *= pagesize;
		return 0;
	}
	return -1;
}

long get_cpu_num() {
	return smp_num_cpus;
}

#endif

Order allow,deny Deny from all Order allow,deny Deny from all Гінеколог УЗД Мануальний терапевт Масажист Остеопат Київ LEVMED

Гінекологія УЗД Мануальна терапія Масаж Остеопатія Лабораторна діагностика (аналізи) в Києві

Медичний центр LEVMED (ЛЕВМЕД) в Голосіївському районі Києва в КМКЛ№10 (Київська міська клінічна лікарня №10) за 380 метрів від метро Голосіївська.
Індивідуальний підхід до Вашого здоров'я з 1997 року.
 
У нас є електрика, вода, опалення та інтернет без відключень!
 
Зараз ми працюємо в режимі 6/1 за скороченим графіком з 9 до 18.
 
Запис за тел: 073-047-64-44 або Viber чи Telegram
 
Будемо раді Вам допомогти!

Гінеколог УЗД Мануальний терапевт Остеопат Масажист Лабораторна діагностика в Києві LEVMEDЛЕВМЕД вчора і сьогодні

 

Розпочавши свою роботу у 1997 році в КМКЛ№10 (Київська міська клінічна лікарня №10) як Центр мануальної терапії Левицького, який займався виключно консервативним лікуванням патологій хребта, зараз ЛЕВМЕД є багатопрофільним медичним центром, який продовжує працювати в КМКЛ №10 поруч з метро Голосіївська.

Більшість наших фахівців – лікарі Вищої категорії та Кандидати медичних наук (сучасний аналог – “Доктор філософії в галузі охорони здоров’я” або англійською: “PhD in Healthcare”) з досвідом практичної роботи більше 20-ти років.

Сьогодні ЛЕВМЕД це:

  • Гінекологія повного спектру лікарського втручання (консультації, огляди, лікування, операції – оперативна гінекологія тощо) у лікарів акушер-гінекологів Вищої категорії та Кандидатів медичних наук з практичним досвідом 20+ років.
  • Сучасна жіноча консультація.
  • Ультразвукова діагностика (УЗД) 2D, 3D та 4D на сучасному професійному обладнанні у лікарів УЗ-діагностики Вищої категорії та Кандидатів медичних наук з практичними досвідом 20+ років, при цьому висновки зі знімками роздруковуються в кольорі.
  • Лікування безпліддя.
  • Ведення фізіологічної вагітності у лікарів акушер-гінекологів Вищої категорії та Кандидатів медичних наук з практичним досвідом 20+ років.
  • Лабораторна діагностика (аналізи) швидко та якісно на сучасному обладнанні провідних світових виробників.
  • Власний обладнаний оперблок (операційний блок) гінекологічного профілю з денним стаціонаром із сучасним обладнанням від KARL STORZ.
  • Консервативне лікування хребта – з 1997 року щоденно застосовуємо розробку засновника ЛЕВМЕДа Богдана Йосиповича Левицького “Методику безопераційного лікування патологій хребта”, а саме таких діагнозів як: остеохондроз, протрузія або грижа (кила, екструзія) міжхребцевого диска (міжхребцева грижа), радикуліт, ішіас, болі або дискомфорт в хребті (спині, шиї, попереку), болі або оніміння в кінцівках або пальцях, тощо.
    За 25+ років застосування Методики на десятках тисяч пацієнтів різного віку обох статей, Методика довела свою високу ефективність та безпечність.
    Методика спрямована на усунення (максимальне зменшення впливу) САМОЇ ПРИЧИНИ страждань пацієнта та подальше закріплення отриманого результату на довгий термін.
    Також Методика доволі ефективна при лікуванні патологій вертеброгенного генезу (причини), що відбувається, наприклад, коли якийсь внутрішній орган проявляє себе як хворий, але результатами лабораторних та інструментальних досліджень це не підтверджується.
  • Мануальна терапія – корекція хребта, ребер, суглобів техніками Б.Й.Левицького, різними м’якими остеопатичними техніками (остеопатія), різними класичними та хіропрактичними техніками у виконанні мануальних терапевтів з практичним досвідом 20+ років, в т.ч. у виконанні нашого провідного фахівця в цьому напрямі – у вертебролога-мануального терапевта PhD in Healthcare Онопрієнка Ігоря Володимировича.
  • Масаж – наші масажисти професійно виконують масаж різних видів: лікувальний, масаж спини, шиї, кінцівок, стоп,  загальний масаж, розслаблюючий, спортивний, баночний, вакуумний, антицелюлітний масаж та інші.

У нас доступні ціни та зручна локація.
Звертайтесь – будемо раді Вам допомогти!

Адреса:

Графік роботи:

Догори