Ограничить загрузку процессора

Тема в разделе "WASM.WIN32", создана пользователем Folk Acid, 25 окт 2005.

  1. Folk Acid

    Folk Acid New Member

    Публикаций:
    0
    Регистрация:
    23 авг 2005
    Сообщения:
    432
    Адрес:
    Ukraine
    Требуется написать приложение, которое будет ограничивать загруженность процессора каким-то определенным процессом.



    Например, ограничить загрузку CPU процессом Excel.exe до 30%



    Хотелось бы услышать мнения людей о том, какие есть методики для достижения этого.



    Я знаю, есть программы, которые это делают, но как они работают, я не знаю.



    У меня пока есть одна мысль - периодически делать SuspendThread всем потокам процесса на несколько миллисекунд. Не думаю, что это лучший способ, хотя с точки зрения планировщика он ничуть не хуже других.



    У кого есть какие мысли?
     
  2. Folk Acid

    Folk Acid New Member

    Публикаций:
    0
    Регистрация:
    23 авг 2005
    Сообщения:
    432
    Адрес:
    Ukraine
    Забыл сказать.



    Всё это дело нужно для Windows 2003, там есть встроенный Resource Manager, но есть ли там Resource Management API?
     
  3. semen

    semen New Member

    Публикаций:
    0
    Регистрация:
    8 июн 2004
    Сообщения:
    334
    Адрес:
    Russia
    Folk Acid

    Хм, а что там за Resource Manager есть? Он такое позволяет делать?
     
  4. DelExe

    DelExe New Member

    Публикаций:
    0
    Регистрация:
    22 авг 2005
    Сообщения:
    165
    Неуверен. Помоему задачи такое позволяют (по крайнем мере квант времени выделять).

    Делать SuspendThread потокам - довольно плохая идея. Заморозить все потоки процеса в один миг не возможно. Следовательно на некоторых прогах это даст Fatal Error, в основном такие проблеммы с музыкой и игрушками.
     
  5. __Dian

    __Dian New Member

    Публикаций:
    0
    Регистрация:
    15 окт 2005
    Сообщения:
    10
    Напрашивеается вопрос: для чего, собственно, это нужно? (Может быть можно обойти)
     
  6. Folk Acid

    Folk Acid New Member

    Публикаций:
    0
    Регистрация:
    23 авг 2005
    Сообщения:
    432
    Адрес:
    Ukraine
    semen

    Resource Manager



    Вот скачаю и посмотрю что он такое позволяет делать.



    DelExe

    Помоему задачи такое позволяют (по крайнем мере квант времени выделять).



    Можно подробнее?



    Думаю, если процессор в системе один, то отложить переключение на задачу из другой задачи с помощью SuspendThread на несколько миллисекунд можно. А вот если процессоров несколько... Придется еще определять как-то, что данный поток в данный момент не выполняется.



    __Dian

    Начальство захотело ограничить юзеров на сервере
     
  7. KiNDeR

    KiNDeR New Member

    Публикаций:
    0
    Регистрация:
    13 июн 2003
    Сообщения:
    258
    Адрес:
    Russia
    а не проще, ли через start запускать программы с заниженым приорететом? в *nix'ах есть утилита nice которая занижает или завышает приоритет процессам, не знаю есть ли подобные утилы в виндах... я при большой загрузки сервера, понижаю приоритет процесса и все...
     
  8. Folk Acid

    Folk Acid New Member

    Публикаций:
    0
    Регистрация:
    23 авг 2005
    Сообщения:
    432
    Адрес:
    Ukraine
    KiNDeR



    С приоритетами всё понятно, и скорее всего, Resource Manager с ними и играется (судя по эффективнсти работы).



    Приоритеты - темный лес в лапах Майкрософт, всё не так уж и очевидно.



    Да и как объяснить юзеру, что сегодня его прога работает с одной скоростью, а завтра из за загрузки сервера с другой. Да и юзеры бывают несознательные. Что больше займет процессорного времени - пятнадцать калькуляторов в low вычисляющих факториал 9999999 или один рассчет таблицы экселем в normal?
     
  9. Folk Acid

    Folk Acid New Member

    Публикаций:
    0
    Регистрация:
    23 авг 2005
    Сообщения:
    432
    Адрес:
    Ukraine
    Если кому интерестно - в аттаче моя кривая версия ограничилки CPU для процесса. На однопроцессорной машине работает вполне безглючно даже на 3D игрушках

    [​IMG] 509790396__cpulimit.cpp
     
  10. LocTb

    LocTb New Member

    Публикаций:
    0
    Регистрация:
    11 окт 2004
    Сообщения:
    54
    Ну, а почему бы Job'ы не поюзать?
     
  11. Folk Acid

    Folk Acid New Member

    Публикаций:
    0
    Регистрация:
    23 авг 2005
    Сообщения:
    432
    Адрес:
    Ukraine
    LocTb

    Но а дальше что? Job не ограничиает процессорное время автоматом, получается что придется опять-таки suspend'ить процесс (понижение приоритета не устраивает). Слишком часто suspend'ить потоки нельзя - при этом сам вызов Suspend/Resume занимает слишком много времени.



    А нельзя ли подобраться с помощью драйвера к внутренним структурам планировщика? Где бы про это почитать?
     
  12. Folk Acid

    Folk Acid New Member

    Публикаций:
    0
    Регистрация:
    23 авг 2005
    Сообщения:
    432
    Адрес:
    Ukraine
    А прочитать можно у Шрайбера. Ключевые слова: KPRCB, KTHREAD