From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Date: Sat, 7 May 2022 03:49:04 +0300 From: Vitaly Chikunov To: ALT Linux kernel packages development Message-ID: <20220507004904.aqpof32nijy3pieg@altlinux.org> References: <20220506144437.aqcwdw4oo37tp5dr@altlinux.org> <20220506145449.xg5mcuqaknb7mudy@altlinux.org> <20220506145929.GA24271@altlinux.org> <20220506153110.6wygefz343jvascg@altlinux.org> <20220506184915.GA26339@altlinux.org> <20220506211618.smtrvgu77gzmxxcc@altlinux.org> MIME-Version: 1.0 Content-Type: text/plain; charset=koi8-r Content-Disposition: inline Content-Transfer-Encoding: 8bit In-Reply-To: <20220506211618.smtrvgu77gzmxxcc@altlinux.org> Subject: Re: [d-kernel] CONFIG_PREEMPT=y --> CONFIG_PREEMPT_VOLUNTARY=y X-BeenThere: devel-kernel@lists.altlinux.org X-Mailman-Version: 2.1.12 Precedence: list Reply-To: ALT Linux kernel packages development List-Id: ALT Linux kernel packages development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 07 May 2022 00:49:04 -0000 Archived-At: List-Archive: List-Post: On Sat, May 07, 2022 at 12:16:19AM +0300, Vitaly Chikunov wrote: > On Fri, May 06, 2022 at 09:49:15PM +0300, Dmitry V. Levin wrote: > > On Fri, May 06, 2022 at 06:31:10PM +0300, Vitaly Chikunov wrote: > > > On Fri, May 06, 2022 at 05:59:29PM +0300, Dmitry V. Levin wrote: > > > > On Fri, May 06, 2022 at 05:54:49PM +0300, Vitaly Chikunov wrote: > > > > > On Fri, May 06, 2022 at 05:53:06PM +0300, Vladimir D. Seleznev wrote: > > > > > > On Fri, May 06, 2022 at 05:44:37PM +0300, Vitaly Chikunov wrote: > > > > > > > > > > > > > Предлагаю так же отключить нашу традиционную std-def опцию CONFIG_PREEMPT=y > > > > > > > > > > > > Вроде бы CONFIG_PREEMPT=y включен в un-def, а в std-def традиционно > > > > > > выключен. > > > > > > > > > > Да это и имелось ввиду. Спасибо за поправку. > > > > > > > > Главное - не выключать CONFIG_PREEMPT_DYNAMIC. > > > > > > Это другой вариант о котором я не думал, но может стоит сделать и так. > > > > > > На сколько я понял, по умолчанию эта опция включает PREEMPT_NONE, а не > > > PREEMPT_VOLUNTARY. То есть умолчание хуже чем CONFIG_PREEMPT_VOLUNTARY=y. > > > > Давайте почитаем код вслух: > > Я это читал - но понял так, что он выбирает из тех что включены, начиная с > NONE. Если не включать NONE, то тогда остается выбор только между VOLUNTARY и > PREEMPT. Хотя наверное это хороший выбор. > > > > > config PREEMPT_NONE > > bool "No Forced Preemption (Server)" > > select PREEMPT_NONE_BUILD if !PREEMPT_DYNAMIC > > > > config PREEMPT_VOLUNTARY > > bool "Voluntary Kernel Preemption (Desktop)" > > depends on !ARCH_NO_PREEMPT > > select PREEMPT_VOLUNTARY_BUILD if !PREEMPT_DYNAMIC > > > > config PREEMPT > > bool "Preemptible Kernel (Low-Latency Desktop)" > > depends on !ARCH_NO_PREEMPT > > select PREEMPT_BUILD Эти пункты внутри choice prompt "Preemption Model" default PREEMPT_NONE То есть из них можно выбрать только 1. Судя по коду ниже это и будет preempt mode по умолчанию. Но, > > > > config PREEMPT_DYNAMIC > > bool "Preemption behaviour defined on boot" > > depends on HAVE_PREEMPT_DYNAMIC && !PREEMPT_RT > > select JUMP_LABEL if HAVE_PREEMPT_DYNAMIC_KEY > > select PREEMPT_BUILD > > default y if HAVE_PREEMPT_DYNAMIC_CALL Это было в 5.17, а в 5.15: Symbol: PREEMPT_DYNAMIC [=n] Type : bool Defined at kernel/Kconfig.preempt:85 Selected by [n]: - PREEMPT [=n] && && !ARCH_NO_PREEMPT [=n] && HAVE_PREEMPT_DYNAMIC [=y] То есть для него нужен PREEMPT=y. А значит, для старых ядер, PREEMPT_DYNAMIC можно включить только при выбранном PREEMPT и умолчанием всегда будет PREEMPT. > > > > static void __init preempt_dynamic_init(void) > > { > > if (preempt_dynamic_mode == preempt_dynamic_undefined) { > > if (IS_ENABLED(CONFIG_PREEMPT_NONE)) { > > sched_dynamic_update(preempt_dynamic_none); > > } else if (IS_ENABLED(CONFIG_PREEMPT_VOLUNTARY)) { > > sched_dynamic_update(preempt_dynamic_voluntary); > > } else { > > /* Default static call setting, nothing to do */ > > WARN_ON_ONCE(!IS_ENABLED(CONFIG_PREEMPT)); > > preempt_dynamic_mode = preempt_dynamic_full; > > pr_info("Dynamic Preempt: full\n"); > > } > > } > > } > > > > Получается, что PREEMPT_DYNAMIC по сути включает CONFIG_PREEMPT, > > что соответствует preempt=full. > > Не понимаю откуда такой вывод. > > > > > Похоже, что HAVE_PREEMPT_DYNAMIC_CALL включено по умолчанию только на x86*. > > > > > > -- > > ldv > > _______________________________________________ > > devel-kernel mailing list > > devel-kernel@lists.altlinux.org > > https://lists.altlinux.org/mailman/listinfo/devel-kernel