On Thu, Oct 15, 2009 at 7:40 AM, vinit dhatrak <vinit.dhatrak@xxxxxxxxx> wrote: > On Thu, Oct 15, 2009 at 12:44 AM, Leonidas . <leonidas137@xxxxxxxxx> wrote: >> On Wed, Oct 14, 2009 at 7:52 PM, vinit dhatrak <vinit.dhatrak@xxxxxxxxx> wrote: >>> On Wed, Oct 14, 2009 at 7:43 PM, vinit dhatrak <vinit.dhatrak@xxxxxxxxx> wrote: >>>> On Wed, Oct 14, 2009 at 7:39 PM, Leonidas . <leonidas137@xxxxxxxxx> wrote: >>>>> On Wed, Oct 14, 2009 at 6:56 AM, vinit dhatrak <vinit.dhatrak@xxxxxxxxx> wrote: >>>>>> On Wed, Oct 14, 2009 at 4:34 PM, Leonidas . <leonidas137@xxxxxxxxx> wrote: >>>>>>> On Wed, Oct 14, 2009 at 3:34 AM, Leonidas . <leonidas137@xxxxxxxxx> wrote: >>>>>>>> Hi, >>>>>>>> >>>>>>>> I am running Ubuntu Jaunty currently, with kernel version 2.6.28 kernel. >>>>>>>> I was assuming that, all the kernels above 2.6 will have CONFIG_PREEMPT >>>>>>>> =1 by default, but my default kernel does not have it set. >>>>>>>> >>>>>>>> Is that the norm? I can understand certain use cases which might require >>>>>>>> the kernel to be non pre-emptible but even a regular desktop distro does >>>>>>>> not have it set? Surprising? >>>>>>>> >>>>>>>> -Leo. >>>>>>>> >>>>>>> >>>>>>> >>>>>>> Even the vmware image which I use for development does not have >>>>>>> CONFIG_PREEMPT=1. >>>>>>> though it says kernel is SMP. >>>>>>> >>>>>>> #uname -a >>>>>>> >>>>>>> Linux ubuntu-vm 2.6.27.2 -generic #1 SMP Thu Aug 28 17:20:02 UTC 2008 >>>>>>> i686 GNU/Linux >>>>>>> >>>>>>> -Leo. >>>>>>> >>>>>>> -- >>>>>>> To unsubscribe from this list: send an email with >>>>>>> "unsubscribe kernelnewbies" to ecartis@xxxxxxxxxxxx >>>>>>> Please read the FAQ at http://kernelnewbies.org/FAQ >>>>>>> >>>>>>> >>>>>> >>>>>> Ok so I can see 3 option for setting preemption model while building kernel, >>>>>> >>>>>> 1) CONFIG_PREEMPT_NONE 2) CONFIG_PREEMPT_VOLUNTARY (default) >>>>>> 3) CONFIG_PREEMPT (might be Ubuntu specific because I can not see this >>>>>> in vanila kernel) >>>>>> >>>>>> >>>>>> So by default on Ubuntu (Desktop), CONFIG_PREEMPT_VOLUNTARY is >>>>>> selected not CONFIG_PREEMPT >>>>>> >>>>>> The difference between symbol exported by these 2 kernels is, >>>>>> >>>>>> 1) Ubuntu (CONFIG_PREEMPT_VOLUNTARY) (You can see some symbols by kvm >>>>>> also but you can ignore them) >>>>>> >>>>>> vinitd@pe-lt271:~$ cat /proc/kallsyms | grep preempt >>>>>> c0121550 T preempt_notifier_register >>>>>> c0121580 T preempt_notifier_unregister >>>>>> c012a350 t check_preempt_curr_idle >>>>>> c012ab50 t check_preempt_curr_rt >>>>>> c012ac50 t check_preempt_wakeup >>>>>> c045a8f0 r __ksymtab_preempt_notifier_unregister >>>>>> c045a8f8 r __ksymtab_preempt_notifier_register >>>>>> c045ed3c r __kcrctab_preempt_notifier_unregister >>>>>> c045ed40 r __kcrctab_preempt_notifier_register >>>>>> c0460612 r __kstrtab_preempt_notifier_unregister >>>>>> c046062e r __kstrtab_preempt_notifier_register >>>>>> c0477824 D preempt_mark_thresh >>>>>> f8fc8a68 d kvm_preempt_ops [kvm] >>>>>> c0121550 u preempt_notifier_register [kvm] >>>>>> c0121580 u preempt_notifier_unregister [kvm] >>>>>> f8d46000 t lp_preempt [lp] >>>>>> vinitd@pe-lt271:~$ >>>>>> >>>>>> >>>>>> 2) Vanilla kernel (CONFIG_PREEMPT) >>>>>> >>>>>> # cat /proc/kallsyms | grep preempt >>>>>> c00258f4 t svc_preempt >>>>>> c00407a8 t check_preempt_curr_rt >>>>>> c00407d4 t check_preempt_curr_idle >>>>>> c0040ce0 T sub_preempt_count >>>>>> c0040d8c T add_preempt_count >>>>>> c00441b8 t check_preempt_wakeup >>>>>> c0308c84 T preempt_schedule_irq >>>>>> c0308d00 T preempt_schedule >>>>>> c03b3a70 r __ksymtab_add_preempt_count >>>>>> c03b3a78 r __ksymtab_sub_preempt_count >>>>>> c03b3a88 r __ksymtab_preempt_schedule >>>>>> c03ba5c7 r __kstrtab_add_preempt_count >>>>>> c03ba5d9 r __kstrtab_sub_preempt_count >>>>>> c03ba5f4 r __kstrtab_preempt_schedule >>>>>> # >>>>>> >>>>>> >>>>>> Hope this will help you. >>>>>> >>>>>> -Vinit >>>>>> >>>>> >>>>> CONFIG_PREEMPT is universal. >>>>> >>>>> If you look at the definition of preemptible(), it will be clear. >>>>> >>>>> -Leo. >>>>> >>>> >>>> What do you mean by universal? Do you mean always TRUE? >>>> >>>> -Vinit >>>> >>> >>> You can read about CONFIG_PREEMPT_VOLUNTARY at, >>> >>> http://kernel.xc.net/html/linux-2.6.18/i386/PREEMPT_VOLUNTARY >>> http://kerneltrap.org/node/3440 >>> >>> -Vinit >>> >> >> >> By universal I meant, CONFIG_PREEMPT should be available on vanilla >> kernel as well as Ubuntu kernels. >> >> If you look here, >> http://lxr.linux.no/linux+*/include/linux/hardirq.h#L114 >> >> you will see that config_preempt is part of vanilla kernel too. If it is not set >> then preemptible() will be 0x0, means your kernel is not preemptible. >> >> -Leo. >> > > You are right, CONFIG_PREEMPT and CONFIG_PREEMPT_VOLUNTARY both are > available in vanilla kernel. But its distribution specific decision > not to enable CONFIG_PREEMPT in their kernel package. Its really > interesting to read the difference between these 2 flags. > CONFIG_PREEMPT_VOLUNTARY is also preempting the kernel but not as much > as CONFIG_PREEMPT. > > The possible reason for not enabling CONFIG_PREEMPT can be found here, > > http://lists.mandriva.com/kernel-discuss/2009-02/msg00027.php > http://thread.gmane.org/gmane.comp.audio.pulseaudio.general/2845 > > -Vinit > Also, to find the preemption points that are inserted in kernel for CONFIG_PREEMPT_VOLUNTARY, search for might_sleep() calls and its definition. -Vinit -- To unsubscribe from this list: send an email with "unsubscribe kernelnewbies" to ecartis@xxxxxxxxxxxx Please read the FAQ at http://kernelnewbies.org/FAQ