Уменьшение загрузки процессора.

Тема в разделе "WASM.WIN32", создана пользователем rav, 18 фев 2006.

  1. rav

    rav New Member

    Публикаций:
    0
    Регистрация:
    19 июл 2004
    Сообщения:
    159
    Адрес:
    Москва
    Всем доброго времени суток.



    У меня в драйвере есть список со строками. При сканировании внутри списка может серьёзно возрастать загрузка процессора (что неудивительно). Попытался воспользоваться KeDelayExecutionThread- всё подвисает. Есль ли "хорошие" способы уменьшения загрузки процессора при сканировании внутри списка в драйвере?
     
  2. Vasil

    Vasil Василь

    Публикаций:
    0
    Регистрация:
    7 янв 2006
    Сообщения:
    228
    Адрес:
    Ижевск
    А функцию "invoke Sleep, 10" внутри цикла использовать не пробовал?
     
  3. cresta

    cresta Active Member

    Публикаций:
    0
    Регистрация:
    13 июн 2004
    Сообщения:
    2.257
    ZwYieldExecution
     
  4. ubil

    ubil New Member

    Публикаций:
    0
    Регистрация:
    7 ноя 2004
    Сообщения:
    203
    Адрес:
    ODESSA:)
    KeWaitForSingleObject точно "спит" пока таймер или событие не сработает. А насчет KeDelayExecutionThread я лично в этом не уверен - чета попробовав сделать с ней то же самое, что раньше благополучно делал с KeWaitForSingleObject, получил какие-то глюки непонятные...

    Да, кстати, можно же сделать приоритет потока небольшим(LOW_PRIORITY, если не ошибаюсь).
     
  5. Vasil

    Vasil Василь

    Публикаций:
    0
    Регистрация:
    7 янв 2006
    Сообщения:
    228
    Адрес:
    Ижевск




    Всёравно ЦП грузанётся на 100%, просто система не будет зависать.
     
  6. S_T_A_S_

    S_T_A_S_ New Member

    Публикаций:
    0
    Регистрация:
    27 окт 2003
    Сообщения:
    1.754
    Загрузка процессора всегда 100%. Если надо, что бы таскменеджер показывал на процесс System - см.PsCreateSystemThread. Хотя проще вручную отдавать кванты как советует cresta.
     
  7. andy_biiig

    andy_biiig New Member

    Публикаций:
    0
    Регистрация:
    5 фев 2006
    Сообщения:
    20
    Адрес:
    Russia
    можно ли сделать так, чтобы процесс занимал не более n(+-5) процентов CPU, даже если остальное достанется idle?
     
  8. cresta

    cresta Active Member

    Публикаций:
    0
    Регистрация:
    13 июн 2004
    Сообщения:
    2.257
    Если процессор нагружается неким циклом достаточно большого количества проходов, то можно запустить таймер, и по каждому кванту таймера выполнять небольшую часть от общего количества проходов цикла.
     
  9. S_T_A_S_

    S_T_A_S_ New Member

    Публикаций:
    0
    Регистрация:
    27 окт 2003
    Сообщения:
    1.754
    Количество времени которое достаётся треду можно узнать из NtQueryInformationThread с параметром ThreadTimes. Если его достается слишком много - отдавать системе.