public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
From: liyu <liyu@ccoss.com.cn>
To: Fawad Lateef <fawadlateef@gmail.com>, rml@novell.com
Cc: LKML <linux-kernel@vger.kernel.org>
Subject: Re: [question] I doublt on timer interrput.
Date: Tue, 08 Nov 2005 09:33:34 +0800	[thread overview]
Message-ID: <4370006E.1050806@ccoss.com.cn> (raw)
In-Reply-To: <1e62d1370511070353o1d1d4931ncf0ff8a5f5658069@mail.gmail.com>

Fawad Lateef Wrote:

>On 11/7/05, liyu <liyu@ccoss.com.cn> wrote:
>  
>
>>    I have one question about timer interrupt (i386 architecture).
>>
>>    As we known, the timer emit HZ times interrputs per second,
>>and in i386. The interrupt handler will call scheduler_tick()
>>each time (on i386 at least, both enable or disable APIC).
>>
>>    On my Celeron machine(IOW, only one CPU, not SMP/SMT), I defined
>>a global int variable 'tick_count' in kernel/sched.c, and add one line
>>of code like follow in scheduler_tick():
>>
>>    ++tick_count;
>>
>>    but I found it is not same with content of the /proc/interrupts,
>>and the differennt between them is not little.
>>
>>    I can not understand why that is.
>>
>>    Any useful idea.
>>
>>
>>    
>>
>
>What I found in the kernel code is that scheduler_tick is called from
>two locations in the kernel (2.6.14-mm1) code (i386).
>
>1) from kernel/timer.c in update_process_times which is called from
>arch/i386/kernel/apic.c and its calling depends on the CONFIG_SMP
>defined or not (see
>http://sosdg.org/~coywolf/lxr/source/arch/i386/kernel/apic.c#L1160)
>and as you don't have CONFIG_SMP enabled so its won't be called from
>here.
>
>2) from sched_fork function in kernel/sched.c
>(http://sosdg.org/~coywolf/lxr/source/kernel/sched.c#L1414) and I
>think its called when newly forked process setup is going to be
>performed, and I think as from here scheduler_tick is called in your
>case, so you are getting different value for your variable tick_count
>
>scheduler_tick might be called from somewhere else which I am missing
>so please CMIIW !
>
>--
>Fawad Lateef
>-
>To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
>the body of a message to majordomo@vger.kernel.org
>More majordomo info at  http://vger.kernel.org/majordomo-info.html
>Please read the FAQ at  http://www.tux.org/lkml/
>
>
>  
>
Please see this URL:

http://lxr.linux.no/source/include/asm-i386/mach-default/do_timer.h#L20

static inline void do_timer_interrupt_hook(struct pt_regs *regs)
{
        do_timer(regs);
#ifndef CONFIG_SMP
        update_process_times(user_mode(regs));
#endif
/*
 * In the SMP case we use the local APIC timer interrupt to do the
 * profiling, except when we simulate SMP mode on a uniprocessor
 * system, in that case we have to call the local interrupt handler.
 */
#ifndef CONFIG_X86_LOCAL_APIC
        profile_tick(CPU_PROFILING, regs);
#else
        if (!using_apic_timer)
                smp_local_timer_interrupt(regs);
#endif
}


That is the code in 2.6.12, but 2.6.13.3 also same with it at least.
So we call scheduler_tick() HZ times per second, both enable
SMP or disable it.

Nod, I agree with your words, the scheduler_tick() do not same with
timer interrupt handler on call times. but I guess it should be more
than jiffies, beacause of other functions also can call it (for example,
as Lateef said, sched_fork().)

I think that

scheduler_tick() might be called from somewhere

is not exact.

We may note, it do not be EXPORT_SYMBOL_*()ed , so it only can be called 
from kernel core,
not kernel modules. Such a few places we can find it use LXR or grep.

I use setup one sysctl integer variable to watch the value of 'count_tick',
Do this way have any problem? I found some value skips, but I think it is
normal case.


However, I will make a experiemnt that write one hook like do_timer(), 
as Love said

PS: if our scheduler_tick() is not called every timer interrput, the 
compute of task timeslice
also is not exact ?!

Thanks a lot.


-liyu


  reply	other threads:[~2005-11-08  1:32 UTC|newest]

Thread overview: 6+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2005-11-07  6:05 [question] I doublt on timer interrput liyu
2005-11-07 11:53 ` Fawad Lateef
2005-11-08  1:33   ` liyu [this message]
2005-11-08  2:53     ` Fawad Lateef
2005-11-08  3:05       ` liyu
2005-11-07 16:16 ` Robert Love

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=4370006E.1050806@ccoss.com.cn \
    --to=liyu@ccoss.com.cn \
    --cc=fawadlateef@gmail.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=rml@novell.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox