Я пытаюсь отследить суммарные данные, которые записываются или читаются с диска для определенного процесса в Linux.Используя инструмент dstat, я могу отслеживать общесистемные вызовы чтения, записи, используя dstat -d
.Используя strace -e trace=read,write
, я могу отслеживать возвращаемые значения системных вызовов.
Вот пример программы, для которой я хочу получить real системные значения для чтения и записи (которые включаютметаданные, записанные и считанные с диска):
#include <stdio.h>
#include <stdlib.h>
#include <fcntl.h>
int main(){
char block[4096]="0";
int count=500;
int fd, size;
for(int i=0;i<4096;i++)
{
char a='0';
block[i]=a;
}
fd = open("file.txt",O_CREAT|O_WRONLY, 0644);
while(count--){
size = write(fd,block,4096);
}
fsync(fd); //Flush all data to disk
close(fd);
Такие инструменты, как iotop
, также бесполезны, поскольку они дают постоянно меняющиеся значения.Опция dstat -d
является наиболее близкой к отслеживанию реальных значений чтения, записи, но я хочу ограничить ее только одним конкретным процессом, и dstat не имеет такой опции.
Спасибоза вашу помощь!