IPB
ЛогинПароль:

> среднее время доступа к жесткому диску, ОС Windows (Visual C)
сообщение
Сообщение #1


Влюблённый псих
***

Группа: Пользователи
Сообщений: 185
Пол: Женский
Реальное имя: Лейла

Репутация: -  1  +


Как подсчитать среднее время доступа к информации на жестком диске по записи?
Вроде бы оно равняется задержке между получением команды и моментом считывания первого бита данных.
Буду рада любым разъяснениям, ссылкам.

Сообщение отредактировано: Тёмный Эльф -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов(1 - 3)
сообщение
Сообщение #2


Гуру
*****

Группа: Пользователи
Сообщений: 1 168
Пол: Мужской
Реальное имя: Сергей Андрианов

Репутация: -  28  +


Среднее время, очевидно, величина статистическая.
Измеряется, например, чтением 1000 различных секторов, случайно разбросанных по поверхности диска.
Впрочем, фирмы-производители применяют другие более сложные методики. Обычно при их использовании время получается несколько меньше, чем при выборе номеров секторов датчиком псвдослучайных чисел.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


Влюблённый псих
***

Группа: Пользователи
Сообщений: 185
Пол: Женский
Реальное имя: Лейла

Репутация: -  1  +


Можно пожалуйста поподробнее про чтение секторов? Например, примеры реализации на Си
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #4


Гуру
*****

Группа: Пользователи
Сообщений: 1 168
Пол: Мужской
Реальное имя: Сергей Андрианов

Репутация: -  28  +


На Си нету. Есть на Паскале (ТМТ).
Увы, в TMT не додеаны арифметические операции с int64, поэтому кое-что написано с учетом этой специфики.
Ограничение - объем диска не больше терабайта.
SeekSize - размер либо всего диска, либо той его части, в которой следует вычислять время доступа.
NumSeek - количество читаемых секторов. Рекомендуется не менее 1000 (но и время измерения при этом будет 15-20 сек).
var
handle : thandle; // хэндл устройства
// ...

function GetSeekTime(SeekSize : extended) : extended; // вычисление времени поиска
var
e0,e1 : extended; // измерение времени
buf : array[0..1023]of byte; // буфер чтения
SecSize : dword; // количество секторов
i : longint;
j,n : dword;
point1,point2 : array[0..1]of dword; // позиция в файле
begin
e0 := GetTimer_Q;
SecSize := trunc(SeekSize/512);
for i := 0 to NumSeek-1 do begin
n := random(SecSize);
point1[0] := n shl 9;
point1[1] := n shr 23;
point2 := point1;
point1[0] := SetFilePointer (handle, point1[0], @point1[1], FILE_BEGIN);
if (point1[0] <> point2[0]) or (point1[1] <> point2[1]) then deb2file('Seek ERROR! ',trunc(SeekSize/1024/1024));
ReadFile(handle, buf, 512, j, nil);
if j <> 512 then deb2file('Read ERROR! ',trunc(SeekSize/1024/1024));
end;
e1 := GetTimer_Q;
GetSeekTime := (e1-e0)/NumSeek;
end;
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 16.04.2024 22:10
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name