URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID3
Нить номер: 77683
[ Назад ]

Исходное сообщение
"ioping - утилита для анализа отзывчивости подсистемы ввода/в..."

Отправлено opennews , 06-Июн-11 17:35 
Константин Хлебников разработал (http://k001.livejournal.com/810982.html) полезную утилиту ioping (http://code.google.com/p/ioping/), позволяющую в стиле утилиты ping наблюдать за изменением отзывчивости системы ввода/вывода в Linux.

Пример выполнения:

<font color="#461b7e">
   $ ioping /home
   4096 bytes from . (ext4 /dev/sda5): request=1 time=0.4 ms
   4096 bytes from . (ext4 /dev/sda5): request=2 time=0.8 ms
   4096 bytes from . (ext4 /dev/sda5): request=3 time=0.9 ms
   4096 bytes from . (ext4 /dev/sda5): request=4 time=0.3 ms
   4096 bytes from . (ext4 /dev/sda5): request=5 time=0.2 ms
   --- . ioping statistics ---
   5 requests completed in 4266.5 ms
   min/avg/max/mdev = 0.2/0.5/0.9/0.1 ms

</font>


URL: http://k001.livejournal.com/810982.html
Новость: http://www.opennet.me/opennews/art.shtml?num=30791


Содержание

Сообщения в этом обсуждении
"ioping - утилита для анализа отзывчивости подсистемы ввода/в..."
Отправлено spanasik , 06-Июн-11 17:35 
А вот я бы структурки-то обнулял при объявлении сразу, в местах типа
struct timeval tv = {0};
так, на всякий случай.

"ioping - утилита для анализа отзывчивости подсистемы ввода/в..."
Отправлено Аноним , 06-Июн-11 19:00 
Зачем? Первая строчка после объявления структуры - передача её в gettimeofday.

"ioping - утилита для анализа отзывчивости подсистемы ввода/в..."
Отправлено spanasik , 06-Июн-11 19:42 
Это когда сам всё пишешь и на 110% уверен, что там всё будет ОК, можно и так оставить. А когда юзаешь чужой код, дабы избежать трудноуловимых багов, порождённых иницилизацией структуры случайным мусором, лучше обнулять.



"ioping - утилита для анализа отзывчивости подсистемы ввода/в..."
Отправлено bircoph , 06-Июн-11 20:48 
вот так и возникают тормозные программы с грязным кодом...

"ioping - утилита для анализа отзывчивости подсистемы ввода/в..."
Отправлено spanasik , 06-Июн-11 20:49 
Как ?



"ioping - утилита для анализа отзывчивости подсистемы ввода/в..."
Отправлено zazik , 06-Июн-11 20:51 
> Как ?

Спроси у авторов Excel 2010, который не может открыть более одного файла с одинаковыми именами.


"ioping - утилита для анализа отзывчивости подсистемы ввода/в..."
Отправлено spanasik , 06-Июн-11 20:55 
Был однажды вопрос к Windows Server-департаменту ихнему, по поводу одной ерунды в их ОС, в официальном форуме техподдержки (остальные способы техподдержки все очень платные) посоветовали прикупить дополнительное third-party ПО, которое фиксит этот вопрос за over 9000. Так что спасибо, нет желания у них что-либо спрашивать, да и не юзаю я этот самый Excel 2010 :-)


"ioping - утилита для анализа отзывчивости подсистемы ввода/в..."
Отправлено letsmac , 06-Июн-11 22:19 
Да самое оно для секретарш.  И чем вас это парит?

"ioping - утилита для анализа отзывчивости подсистемы ввода/в..."
Отправлено zazik , 07-Июн-11 09:31 
> Да самое оно для секретарш.  И чем вас это парит?

Мне приходится его использовать. К счастью, дома я свободен в выборе софта.


"ioping - утилита для анализа отзывчивости подсистемы ввода/в..."
Отправлено Archer73 , 06-Июн-11 19:04 
Смущает время 0.2 ms

./ioping /home -c 6 -i 1 -D
4096 bytes from /home (ext4 /dev/sdc2): request=1 time=14.7 ms
4096 bytes from /home (ext4 /dev/sdc2): request=2 time=6.0 ms
4096 bytes from /home (ext4 /dev/sdc2): request=3 time=0.2 ms
4096 bytes from /home (ext4 /dev/sdc2): request=4 time=0.2 ms
4096 bytes from /home (ext4 /dev/sdc2): request=5 time=2.5 ms
4096 bytes from /home (ext4 /dev/sdc2): request=6 time=3.5 ms

--- /home ioping statistics ---
6 requests completed in 5028.8 ms
min/avg/max/mdev = 0.2/4.5/14.7/5.0 ms

./ioping /dev/sdc2 -c 6 -i 1 -D
4096 bytes from /dev/sdc2 (block device): request=1 time=29.5 ms
4096 bytes from /dev/sdc2 (block device): request=2 time=13.3 ms
4096 bytes from /dev/sdc2 (block device): request=3 time=8.5 ms
4096 bytes from /dev/sdc2 (block device): request=4 time=7.8 ms
4096 bytes from /dev/sdc2 (block device): request=5 time=15.8 ms
4096 bytes from /dev/sdc2 (block device): request=6 time=18.2 ms

--- /dev/sdc2 ioping statistics ---
6 requests completed in 5094.0 ms
min/avg/max/mdev = 7.8/15.5/29.5/7.3 ms


"ioping - утилита для анализа отзывчивости подсистемы ввода/в..."
Отправлено Онаним , 07-Июн-11 10:27 
Это оптимизации на уровне файловой системы. Уже не раз замечал, что тестирование (dd) раздела raid10 медленнее, чем тестирование большого файла в файловой системе, лежащей на этом же разделе.

"ioping - утилита для анализа отзывчивости подсистемы ввода/в..."
Отправлено oneonfire , 06-Июн-11 19:14 
Всем пользователям Archlinux - милости прошу - https://aur.archlinux.org/packages.php?ID=49608

"ioping - утилита для анализа отзывчивости подсистемы ввода/в..."
Отправлено Дмитрий , 07-Июн-11 10:34 
Спасибо за PKGBUILD!

"ioping - утилита для анализа отзывчивости подсистемы ввода/в..."
Отправлено ZaWertun , 06-Июн-11 22:21 
Репозитории для OpenSUSE (11.3, 11.4, Factory, Tumbleweed) и SLE (11, 11 SP1): http://download.opensuse.org/repositories/home:/ZaWertun:/co.../

"ioping - утилита для анализа отзывчивости подсистемы ввода/в..."
Отправлено Funt , 06-Июн-11 22:54 
где ebuild, не в одном оверлеи нету

"ioping - утилита для анализа отзывчивости подсистемы ввода/в..."
Отправлено k0l0b0k , 06-Июн-11 23:17 
присоединяюсь к запросу. ебилды писать не умею (

"ioping - утилита для анализа отзывчивости подсистемы ввода/в..."
Отправлено slepnoga , 06-Июн-11 23:45 
> присоединяюсь к запросу. ебилды писать не умею (

Однака, зачем мало-мало гента пингвин ставил, крутада ?

"Настоящие гентушники ебилдов не ждут, они их пишут" ( кто то и @g.org)


"ioping - утилита для анализа отзывчивости подсистемы ввода/в..."
Отправлено k0l0b0k , 07-Июн-11 00:00 
честно - некогда писать. и таки да, "Настоящие гентушники ебилдов не ждут, они их пишут" - враки. бывают еще и пользователи

"ioping - утилита для анализа отзывчивости подсистемы ввода/в..."
Отправлено pavlinux , 07-Июн-11 00:10 
Пользователь Gentoo, это даже смешнее, чем Windows сервер. :)

"ioping - утилита для анализа отзывчивости подсистемы ввода/в..."
Отправлено VX , 07-Июн-11 01:01 
...сам пошутил, сам посмеялся.

"ioping - утилита для анализа отзывчивости подсистемы ввода/в..."
Отправлено Sergey722 , 07-Июн-11 08:51 
> Пользователь Gentoo, это даже смешнее, чем Windows сервер. :)

А если это Calculate?


"ioping - утилита для анализа отзывчивости подсистемы ввода/в..."
Отправлено slepnoga , 07-Июн-11 09:31 
>> Пользователь Gentoo, это даже смешнее, чем Windows сервер. :)
> А если это Calculate?

То вот это уже смешно. На чем не пытайся делать макось, все равно винда получится, и соотв юзера винде юзера сбегутся.
Калька - это слишком много пиара при достаточно малом объеме дела.


"ioping - утилита для анализа отзывчивости подсистемы ввода/в..."
Отправлено daks , 07-Июн-11 12:34 
> Пользователь Gentoo, это даже смешнее, чем Windows сервер. :)

Как сказать. У меня жена является пользователем Gentoo. Точнее - Calculate с бинарным профилем. Полгода, полёт нормальный. Я только обновляю раз в неделю-две.


"ioping - утилита для анализа отзывчивости подсистемы ввода/в..."
Отправлено ach , 07-Июн-11 14:49 
Значит трясите разрабов Calculate. А проще, ей-Богу, посмотреть представленный PKGBUILD для арча, взять какой-нить ebuild для примера и сделать. Это только кажется, что трудно.

"ioping - утилита для анализа отзывчивости подсистемы ввода/в..."
Отправлено daks , 07-Июн-11 15:29 
> Значит трясите разрабов Calculate. А проще, ей-Богу, посмотреть представленный PKGBUILD
> для арча, взять какой-нить ebuild для примера и сделать. Это только
> кажется, что трудно.

Не надо никого трясти, sys-process/ioping-0.4.ebuild с утра в оверлее Calculate.


"ioping - утилита для анализа отзывчивости подсистемы ввода/в..."
Отправлено anonymous , 07-Июн-11 19:22 
> Пользователь Gentoo, это даже смешнее, чем Windows сервер. :)

Однако, пытавшийся хоть раз написать что-то для генты, знает, какой это геморрой. Использовать их навязанные функции и прочую ерунду. Сидел на слаке, писал слакбилды регулярно. Гента во многом удобнее слаки, но вот писать ебилды - та еще др*чь.


"ioping - утилита для анализа отзывчивости подсистемы ввода/в..."
Отправлено daks , 07-Июн-11 12:31 
ioping-0.4 в оверлее Calculate. Welcome.

"ioping - утилита для анализа отзывчивости подсистемы ввода/в..."
Отправлено pavlinux , 06-Июн-11 23:21 
./ioping /
4096 bytes from / (xfs /dev/root): request=1 time=0.0 ms
4096 bytes from / (xfs /dev/root): request=2 time=0.0 ms
4096 bytes from / (xfs /dev/root): request=3 time=0.0 ms

Пля... :)


"ioping - утилита для анализа отзывчивости подсистемы ввода/в..."
Отправлено reminux , 07-Июн-11 15:07 
это нирвана

"ioping - утилита для анализа отзывчивости подсистемы ввода/в..."
Отправлено Buy , 07-Июн-11 00:49 
Интересно! Скачал поставил ;) min/avg/max понятно, а что такое mdev?

"ioping - утилита для анализа отзывчивости подсистемы ввода/в..."
Отправлено pavlinux , 07-Июн-11 02:23 
>  min/avg/max понятно, а что такое mdev?

time_avg = time_sum / request;
sqrt(time_sum2 / request - time_avg * time_avg);

корень из разности квадратов ... х.з, наверно cреднеквадратическое отклонение.


"ioping - утилита для анализа отзывчивости подсистемы ввода/в..."
Отправлено pavlinux , 07-Июн-11 02:01 

diff -ur a/ioping.c b/ioping.c
--- a/ioping.c  2011-06-02 22:51:03.000000000 +0400
+++ b/ioping.c  2011-06-07 02:35:12.126000920 +0400
@@ -379,7 +379,7 @@

        if (S_ISDIR(st.st_mode)) {
                char *tmpl = "/ioping.XXXXXX";
-               char *temp = malloc(strlen(path) + strlen(tmpl) + 1);
+               char *temp = calloc(1, PATH_MAX); // :)

                if (!temp)
                        err(2, NULL);
@@ -498,7 +498,7 @@

                usleep(interval);
        }
-
+       free(buf); // end of posix_memalign()
        time_total = now() - time_total;

        time_sum += part_sum;


"ioping - утилита для анализа отзывчивости подсистемы ввода/в..."
Отправлено pavlinux , 07-Июн-11 03:47 

diff -ur a/ioping.c b/ioping.c
--- a/ioping.c    2011-06-02 22:51:03.000000000 +0400
+++ b/ioping.c    2011-06-07 04:01:04.000000000 +0400
@@ -166,6 +166,7 @@
char *path = NULL;
char *fstype = "";
char *device = "";
+short strduped = 0;

int fd;
char *buf;
@@ -258,41 +259,43 @@

void parse_device(dev_t dev)
{
-    char *buf = NULL, *ptr;
-    unsigned major, minor;
-    struct stat st;
-    size_t len;
    FILE *file;
+    char *buf, *ptr;
+    unsigned major, minor;
+    size_t len = (~0);

    /* since v2.6.26 */
    file = fopen("/proc/self/mountinfo", "r");
-    if (!file)
-        goto old;
-    while (getline(&buf, &len, file) > 0) {
+
+    if (file != NULL) {
+    buf = calloc(1, PATH_MAX);
+        while (getline(&buf, &len, file) > 0) {
        sscanf(buf, "%*d %*d %u:%u", &major, &minor);
        if (makedev(major, minor) != dev)
            continue;
        ptr = strstr(buf, " - ") + 3;
        fstype = strdup(strsep(&ptr, " "));
-        device = strdup(strsep(&ptr, " "));
-        goto out;
-    }
-old:
-    /* for older versions */
-    file = fopen("/proc/mounts", "r");
-    if (!file)
+        device = strdup(strsep(&ptr, " "));                
+        }
+       } else {
+        /* for older versions */
+        file = fopen("/proc/mounts", "r");
+        if (!file)
        return;
-    while (getline(&buf, &len, file) > 0) {
+
+        struct stat st;
+
+        while (getline(&buf, &len, file) > 0) {
        ptr = buf;
        strsep(&ptr, " ");
        if (*buf != '/' || stat(buf, &st) || st.st_rdev != dev)
            continue;
        strsep(&ptr, " ");
        fstype = strdup(strsep(&ptr, " "));
-        device = strdup(buf);
-        goto out;
+        device = strdup(buf);                
+        }
    }
-out:
+        strduped = 1;
    free(buf);
    fclose(file);
}
@@ -312,6 +315,12 @@
    sigaction(signo, &sa, NULL);
}

+void free_on_exit(void) {
+    
+    if (strduped)
+        free(fstype), free(device);
+}
+
int main (int argc, char **argv)
{
    ssize_t ret_size;
@@ -323,6 +332,8 @@
    double time_sum, time_sum2, time_mdev, time_avg;
    double part_sum, part_sum2, part_mdev, part_avg;

+        atexit(free_on_exit);
+        
    parse_options(argc, argv);

    if (wsize)
@@ -379,7 +390,7 @@

    if (S_ISDIR(st.st_mode)) {
        char *tmpl = "/ioping.XXXXXX";
-        char *temp = malloc(strlen(path) + strlen(tmpl) + 1);
+        char *temp = calloc(1, PATH_MAX);

        if (!temp)
            err(2, NULL);
@@ -498,7 +509,7 @@

        usleep(interval);
    }
-
+    free(buf);
    time_total = now() - time_total;

    time_sum += part_sum;

patch -p1 < copy-n-paste.diff;

# valgrind --leak-check=full  --show-reachable=yes --track-origins=yes ./ioping -c5 .

==8328== Memcheck, a memory error detector
==8328== Copyright (C) 2002-2010, and GNU GPL'd, by Julian Seward et al.
==8328== Using Valgrind-3.6.1 and LibVEX; rerun with -h for copyright info
==8328== Command: ./ioping -c5 .
==8328==
4096 bytes from . (tmpfs tmpfs): request=1 time=1.7 ms
4096 bytes from . (tmpfs tmpfs): request=2 time=0.1 ms
4096 bytes from . (tmpfs tmpfs): request=3 time=0.1 ms
4096 bytes from . (tmpfs tmpfs): request=4 time=0.1 ms
4096 bytes from . (tmpfs tmpfs): request=5 time=0.1 ms

--- . ioping statistics ---
5 requests completed in 4120.7 ms
min/avg/max/mdev = 0.1/0.4/1.7/0.7 ms
==8328==
==8328== HEAP SUMMARY:
==8328==     in use at exit: 0 bytes in 0 blocks
==8328==   total heap usage: 6 allocs, 6 frees, 12,868 bytes allocated
==8328==
==8328== All heap blocks were freed -- no leaks are possible
==8328==
==8328== For counts of detected and suppressed errors, rerun with: -v
==8328== ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 4 from 4)

Йес!!! Я спать! :)


"ioping - утилита для анализа отзывчивости подсистемы ввода/в..."
Отправлено Гентушник , 07-Июн-11 07:06 
Ты это лучше в апстрим отправь, тут то зачем публикуешь?

"ioping - утилита для анализа отзывчивости подсистемы ввода/в..."
Отправлено тру йода , 07-Июн-11 18:42 
Он тут свое ЧСВ удовлетворяет, если еще не понятно. С освоил - нешуточное дело. Но бабы не ценят, а вот опеннет - совсем другое дело.

"ioping - утилита для анализа отзывчивости подсистемы ввода/в..."
Отправлено тру йода , 07-Июн-11 18:44 
Судя по павлинуксу, кстати, бабы также не ценят Opteron и SSD. Приходится ему бедному время от времени на опеннете невзначай так про них упомянуть.

"ioping - утилита для анализа отзывчивости подсистемы ввода/в..."
Отправлено x , 07-Июн-11 18:57 
он кстати нормальный чувак, в отличие от.
и писать на Си может, когда другие только балаболят.

"ioping - утилита для анализа отзывчивости подсистемы ввода/в..."
Отправлено товарищ , 07-Июн-11 19:33 
товарищи, объясните пожалуйста как эта утилитка работает?