Вознила необходимость проверить скорость записи (и обращение вчастности) к винчестеру на виртуальном сервере.
Посмотрим насколько шустро сервачок справится с данно командочкой:
[code=sh] time dd if=/dev/zero of=FileOfZeros.txt bs=1024k count=1024 [/code]
результат не заставил долго ждать:
[code=sh]
1024+0 records in
1024+0 records out
1073741824 bytes (1.1 GB) copied, 31.8767 seconds, 33.7 MB/s
real 1m4.198s
user 0m0.009s
sys 0m2.792s
[/code]
Насторожило несоответсвие времени которое посчитал time и dd, оно отличается в два раза. предполагаю, что лишние 32 секунды были потрачены на открытие/закрытие файлового дескриптора. Что очень странно. И такой фигни на локальной машине нет. Т.к. установить systrace патч на ядро нет возможности написал сишную прожку чтоб замерить время обращения на определенных этапах обрщения к венику.
[code=c]
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <errno.h>
#include <time.h>
#include <signal.h>
#include <sys/fcntl.h>
#include <sys/ioctl.h>
#define SIZE 1024*5 //1024
#define TIMEOUT 30
#define FILESIZE 1024
time_t start;
void checkpoint(char point[100])
{
time_t end;
time(&end);
printf(".nCheckpoint: %s second, %.2f ms spentn",
point, 1000.0 * ( end - start ) );
start = end;
}
int main(int argc, char **argv)
{
int fd, i;
char buff[SIZE];
for(i = 0; i < SIZE; i++) buff[i] = 'q';
time(&start);
if (argc != 2) {
printf("Usage: mydd <file name>n");
exit(EXIT_SUCCESS);
}
fd = open(argv[1] , O_RDWR | O_CREAT | O_TRUNC, 0666);
checkpoint("Opened file");
if (fd < 0) {
exit(EXIT_FAILURE);
}
for(i = 0; i < FILESIZE; i++)
write(fd, buff, SIZE);
char str[100];
sprintf(str, "Writed %d Mb", (int)FILESIZE/ 1024 ) ;
checkpoint( str );
close(fd);
checkpoint("Closed File");
return 0;
}
[/code]
При тестировании с гиговым файлом удалось засечь багу...
[code]
=>./mydd test
Checkpoint: Opened file second, 0.00 ms spent
Checkpoint: Writed 1 Gb second, 5000.00 ms spent
Checkpoint: Closed File second, 0.00 ms spent
=>./mydd test
Checkpoint: Opened file second, 118000.00 ms spent
Checkpoint: Writed 1 Gb second, 5000.00 ms spent
Checkpoint: Closed File second, 0.00 ms spent
[/code]
Но с 5 меговым файлом повторить не удалось. Хотя при записи vim-ом исходники не раз была задержка в !пол минуты!
Загнал в цикл тулзню для 5 метров, в итоге за 20 циклов записи файла при открытии файла было 3 задержки 1, 3 и 8 секунд! Суппорт VDS64.com молчит!
Ты их напугал =/
ОтветитьУдалить