Как вычисляется использование iostat?

iostat -x -d 

может отображать много статистической информации ввода-вывода. Для использования iostat объяснение:

Процент процессорного времени, в течение которого устройству были отправлены запросы ввода-вывода (использование полосы пропускания для устройства). Насыщение устройства происходит, когда это значение близко к 100%

Я хочу знать, как вычислялась утилита?

Я провожу эксперимент (см. Следующий код), запускаю 40 потоков для случайного чтения 40 файлов. Я полагаю, что использование диска должно быть очень высоким, но я ошибаюсь, iostat выглядит следующим образом, кто-нибудь может сказать, почему? THX

Device:         rrqm/s   wrqm/s   r/s   w/s   rsec/s   wsec/s avgrq-sz avgqu-sz   await  svctm  %util
sdb1              0.01     0.44  0.24  0.57     3.44     8.14    14.34     0.00    2.28   0.66   0.05

Код:

#include <iostream>
#include <fstream>
#include <pthread.h>

using namespace std;

void* work(void* a)
{
    int* id = (int*)a;
    string file = "sys.partition";
    char buf[100];
    sprintf(buf, "%d", *id);
    file.append(string(buf));
    ifstream in(file.c_str());
    in.seekg(0, ios_base::end);
    size_t len = in.tellg();

    cout << "open file : " << file << " , " << len << endl;
    srand(time(NULL));

    while(true)
    {
        size_t pos = rand() % len;
        in.seekg(pos);
        //cout << pos << endl;
        in.read(buf, 10);
        system("sync");
    }
    in.close();
}

int main(int argc, char** argv)
{
    static const int num = 40;
    pthread_t threads[num];
    for (int i = 0; i < num; i++)       {
        pthread_create(&threads[i], NULL, work, &i);
    }
    for (int i = 0; i < num; i++)       {
        pthread_join(threads[i], NULL);
    }
    return 0;
}
15
задан osgx 25 December 2010 в 00:00
поделиться