Я бы хотел понять следующую проблему:
Процесс выполняет только вызов sys write в бесконечном цикле. Когда я поднимаю iotop, я ожидаю увидеть ненулевую скорость записи и нулевую скорость чтения, связанные с этим процессом. Но iotop говорит, что чтение и запись могут быть одинаковыми (в зависимости от размера записи). Посмотрите на код C:
#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>
#include <fcntl.h>
#include <stdio.h>
#define BUFSIZE 1000000
char buf[BUFSIZE];
const int write_size = 4000;
int main(){
int fd;
if ((fd = open("filename", O_RDWR | O_CREAT, 0666)) < 0){
return -1;
}
ssize_t ret;
while (1){
ret = write(fd, buf, write_size);
if (ret != write_size){
return -1;
}
}
return 0;
}
Если вы назначите разные значения для write_size, вы увидите разные скорости чтения в iotop. Если значение соответствует приведенному выше коду, iotop показывает, что чтение и запись равны.
Важно:
Проблема появляется только при определенных условиях:
- Файл должен быть создан и заполнен данными (скажем, не менее 8 ГБ) перед запуском кода
OS conf:
Debian lenny, диск 2 ТБ, (протестированы как xfs, так и ext4),
uname -a
Linux g-6 2.6.26-bpo.1-xen-amd64 # 1 SMP понедельник, 12 января 14:32:40 UTC 2009 x86_64 GNU / Linux
Заранее спасибо за разгадку тайны,
Михал.