Как засечь время чтения сектора CD диска?

Тема в разделе "WASM.WIN32", создана пользователем ProgramMan, 28 авг 2006.

  1. ProgramMan

    ProgramMan New Member

    Публикаций:
    0
    Регистрация:
    13 янв 2004
    Сообщения:
    263
    Как засечь время чтения сектора CD диска, желательно без прав админа?
     
  2. Quantum

    Quantum Паладин дзена

    Публикаций:
    0
    Регистрация:
    6 янв 2003
    Сообщения:
    3.143
    Адрес:
    Ukraine
    1. Остановить привод (через DeviceIoControl).
    2. t0 = GetTickCount();
    3. Прочитать несколько байт из файла, который находится на диске.
    4. t1 = GetTickCount();
    5. t1 - t0 = время чтения сектора.

    Чем дальше находится сектор, тем дольше он будет читаться.

    Чтоб исключить возможность кеширования, желательно читать сектор в сыром виде, но для этого нужны права.
     
  3. _BC_

    _BC_ БЦ

    Публикаций:
    0
    Регистрация:
    20 янв 2005
    Сообщения:
    759
    Точнее всего измерить можно, читая сектор напрямую через порты... в самом обычном PIO, без басмастеров и прерываний, посылать команду 28h (или аналог), polling'ом ждать BSY=0 и замерять через rdtsc время выполнения. Это если привод на IDE/SATA, конечно. ;) Еще надо немного статистики задействовать, чтобы исключить (уменьшить) влияние кэша самого привода.
     
  4. ProgramMan

    ProgramMan New Member

    Публикаций:
    0
    Регистрация:
    13 янв 2004
    Сообщения:
    263
    Quantum? спасибо, такой вариант не побовал ещё
    _BC_, это понятно, но в моей ситуации невозможно использовать. :dntknw:
     
  5. ProgramMan

    ProgramMan New Member

    Публикаций:
    0
    Регистрация:
    13 янв 2004
    Сообщения:
    263
    Quantum, уточни пожалуйста, как это сделать.
     
  6. Quantum

    Quantum Паладин дзена

    Публикаций:
    0
    Регистрация:
    6 янв 2003
    Сообщения:
    3.143
    Адрес:
    Ukraine
    ProgramMan
    Если привод находится в состоянии покоя (не крутится), то первое обращение чтения любого сектора сначала даст команду раскрутить болванку до стабильной скорости - этот процесс может занять больше времени, чем само последующее чтение. Поэтому желательно учитывать при замере скорости начальное состояние привода. Чтоб не связываться с SPTI (для этого нужны админские привилегии), можно просто попробовать коды LOCK/UNLOCK с DeviceIoControl (см. описание в PSDK) или открыть диск с эксклюзивным доступом. Если залочить привод нельзя, то можно заключить, что его уже кто-то читает и процесса раскрутки не будет.