From: liyu <liyu@ccoss.com.cn>
To: Fawad Lateef <fawadlateef@gmail.com>
Cc: rml@novell.com, LKML <linux-kernel@vger.kernel.org>
Subject: Re: [question] I doublt on timer interrput.
Date: Tue, 08 Nov 2005 11:05:48 +0800 [thread overview]
Message-ID: <4370160C.9040206@ccoss.com.cn> (raw)
In-Reply-To: <1e62d1370511071853o5d65f0dcm7548b7563615ed35@mail.gmail.com>
I get it !
I am sorry to spend your time so much, all trouble are came from one my
low-level fault.
I put "++count_tick" in scheduler_tick(), but that function() can return
before it!
This is one sample result:
> [root@CCOSS_629884359 root]# cat /proc/sys/kernel/count_tick
> /proc/interrupts
> 157491
> CPU0
> 0: 157390 IO-APIC-edge timer
> 1: 10 IO-APIC-edge i8042
> 8: 1 IO-APIC-edge rtc
> 9: 0 IO-APIC-level acpi
> 12: 111 IO-APIC-edge i8042
> 14: 57616 IO-APIC-edge ide0
> 15: 2 IO-APIC-edge ide1
> 16: 0 IO-APIC-level uhci_hcd:usb1
> 17: 0 IO-APIC-level uhci_hcd:usb2
> 18: 893 IO-APIC-level eth0
> NMI: 0
> LOC: 157326
> ERR: 0
We can see:
157491 > 157390 !
Yeah, I got it.
Thanks a lot again.
-liyu
Fawad Lateef wrote:
>On 11/8/05, liyu <liyu@ccoss.com.cn> wrote:
>
>
>>Fawad Lateef Wrote:
>>
>>
>>
>>>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 !
>>>
>>>
>>>
>>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.
>>
>>
>>
>
>Yes, this is the thing which I missed
>
>
>
>
>>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.
>>
>>
>>
>
>By saying __might_be_called_from_somewhere__ I meant that I am missing
>some-other place __with-in_the_kernel_code__ from where it is called,
>which you pointed to me (about do_timer.h) :)
>
>
>
>>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.
>>
>>
>>
>
>If you are declaring count_tick as a global variable (without static)
>in sched.c then you can just use it in your test module by specifying
>extern for your variable
>
>
>
>>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 ?!
>>
>>
>>
>
>Yes, I am now sure that it will be called for every timer interrupt ! :)
>
>Thanks,
>
>--
>Fawad Lateef
>
>
>
>
next prev parent reply other threads:[~2005-11-08 3:04 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
2005-11-08 2:53 ` Fawad Lateef
2005-11-08 3:05 ` liyu [this message]
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=4370160C.9040206@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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.