cpu stats and another interrupt question

Andriy Gapon avg at icyb.net.ua
Thu Feb 14 20:31:23 UTC 2008


Dear hackers,
I'd like to check with you if my understanding of some code is correct.

If we speak about a typical older i386 system, with UP and "AT" PIC, I
think this is how the CPU utilization stats are collected.
RTC is configured to generate interrupts (IRQ8) 128 times per second.
Each time interrupt is generated RTC interrupt handler (I will use
simple non technical terms) takes a peek at what was interrupted and
depending on the properties of that thing (kernel thread) bills a tick
to particular category. E.g. if it sees that the "idle" thread is
interrupted then a tick is billed to "idle", if an interrupt thread is
interrupted (software or hardware) then a tick is billed to interrupt,
if a thread is running user-mode code then a tick is billed to "user" or
"nice", otherwise it's "system".
I understand that I oversimplify, but is the above correct in general ?

Another, unrelated, question.
Considering this snippet from sys/i386/isa/atpic.c, i8259_init():
#ifndef PC98
        /* OCW2_L1 sets priority order to 3-7, 0-2 (com2 first). */
        if (!slave)
                outb(pic->at_ioaddr, OCW2_R | OCW2_SL | OCW2_L1);
#endif

Do I understand correctly the code and the comment that here we use a
feature of 8259 PIC that can be called "cyclic shift of interrupt
priorities" ?
So, we really have the following order of interrupts, from higher
priority to lower: 3-7,0,1,8-15? Considering two chained 8259s, of course.

-- 
Andriy Gapon


More information about the freebsd-hackers mailing list