[feature request] HLT (soft) CPU cooling/powersaving...

Assembler programming questions
  • AMD Bus Disconnect
    Kernel HLT implementation

    AMD PowerNOW!/ Intel SpeedStep / Transmeta LoongRun / VIA LongHaul currently not support, but if you want... do it yourself )
  • Хм... :|
    А что уважаемые коллеги скажут на эдакий рефракторинг :?:

    Code: Select all

    checkidle:
            pushad
            mov  ebx,[timer_ticks]
            call change_task
            jmp  idle_loop_entry
          idle_loop:
            cmp  ebx,[timer_ticks]
            jne  idle_exit
            rdtsc ;call _rdtsc
            mov  ecx,eax
            hlt
            rdtsc ;call _rdtsc
            sub  eax,ecx
            add  [idleuse],eax
          idle_loop_entry:
            cmp  [check_idle_semaphore],0
            je   idle_loop
            dec  [check_idle_semaphore]
          idle_exit:
            popad
            ret
    
    Не совсем, конечно, 100%-ное воспроизводство функциональности...
    Но не может же быть задача checkidle быть настолько сложной :!:
    Наворочено ведь - мама не горюй :shock:

    В смысле, права-то на SVN у меня есть, только я сейчас толком ничего проверить не могу - бодаюсь (шибко) пока со своим предыдущим рефракторингом (приблизительно: -1Кб) event+shed+хвосты в других файлах
    Добью - включу и ЭТО, если у коллег не будет возражений
  • Be careful! Bus disconnect killed my motherboard, just the Gigabyte 7VTXE+ with Athlon XP 1700+ (Palomino), no overclocking. After some months of use of S2k program under Windows, the power supply and the motherboard capacitors become damaged. I'd got the same result with Abit motherboard on VIA chipset in some other place.

    More time later I've read somethere, that bus disconnect is disabled by default on many old motherboards for Athlon XP, because they have no proof against current abrupts, appeared as result of bus disconnect. nForce2-based motherboards already use bus disconnect with multiply 2 or 4, enabled in BIOS by default.
  • Galkov wrote:А что уважаемые коллеги скажут на эдакий рефракторинг
    Что это неравноценная замена: раньше если ядро было чем-то сильно занято и только иногда отдавало управление в checkidle, то checkidle просто передавала управление дальше по списку, не вызывая hlt, а сейчас checkidle всегда ждёт прерывания таймера и возвращает управление не раньше, чем оно придёт.
    Ушёл к умным, знающим и культурным людям.
  • diamond wrote:а сейчас checkidle всегда ждёт прерывания таймера и возвращает
    А мне кажется что и сейчас не всегда, а только когда: а) семафор в нетронутом состоянии б) карусель прокрутилась быстро.
    Подробнее надо, кто-то где-то ошибается
  • Поправка принимается, я имел в виду, что на ситуацию по умолчанию, когда семафор постоянно обнулён и нет процессов, отжирающих ресурсы, накладывается сильная занятость ядра, а остальные процессы по-прежнему быстро отдают управление (либо вообще не забирают), не напрягая семафор.
    Ушёл к умным, знающим и культурным людям.
  • Хм...
    Правильно ли понял: osloop крутится например 100 мс (при этом int0 прокручивал карусель за неизмеримо малое время), доходит до checkidle, а тот - оппа, и делает halt :?:
    Если так, то упустил. Подумаю... сейчас прямо.
  • Подумал.
    Если вопрос именно в этом :idea:, то придется вернуть idlemem, как это не прискорбно
    Примерно так:

    Code: Select all

    checkidle:
            pushad
            mov  ebx,[idlemem]               ; было [timer_ticks]
            ............................
          idle_exit:
            Mov  [idlemem],eax,[timer_ticks] ; добавлено
            popad
            ret
    diamond, если ИМЕННО ЭТО Вас беспокоит (в смысле, я правильно понял) - минута на фиксинг, и всего делов.
  • Да, именно это.
  • Ну тогда осталось только повторить вопрос "А что теперь уважаемые коллеги скажут на эдакий рефракторинг" :)
  • мне вот не понятно зачем в sys_sendwindowmsg стоит cli ??? мы от них избавится не можем, а тут новые....
    и зачем крос регистры в неё вернул?
  • 1) Ставил не я.
    2) Но, мне показалось, что доступы к счетчикам и содержимому буфера обязаны проходить в режиме interlocking.
    3) Второе более приоритетно, чем стремление убрать CLI. Альтернатива - мьютексы... Думается, в данном конкретном случае, чисто временные затраты на него превзойдут время закрытия с помощью CLI.
    4) Вот те раз. Мне казалось что они БЫЛИ, а я их как раз убрал.
    Last edited by Galkov on Sat May 02, 2009 4:52 pm, edited 1 time in total.
  • мдя, чет не внимательный я сегодня, cli ещё с 665ой, а про регистры - не то посмотрел, извиняюсь.
  • Who is online

    Users browsing this forum: No registered users and 4 guests