Hi Qi,

Chen, Qi <qi.c...@windriver.com> escreveu no dia sexta, 18/11/2022 à(s)
14:06:

> Hi Jose,
>
>
>
> Thanks a lot for your review. I’d like to explain the case in more details.
>
>
>
> * indeterministic (not reproducible) issue
>
> The use case is: the user wants to disable reproducible build for kernel,
> and wants to get the actual build time of kernel. In other words, we want
> it to be indeterministic. This is actually what KERNEL_DEBUG_TIMESTAMPS is
> expected to do.
>

I don't fully understand the use case when looking at the patch as one of
the primary intentions is make it not reproducible.


>
>
> * state cache issue
>
> I think if the kernel is taken from the sstate cache and not rebuilt, it’s
> acceptable. The timestamp in /proc/version (or `uname -a` output) is
> reflecting the actual kernel build time.
>
> The situation that really confuses users is that when kernel do_compile is
> re-executed, the timestamp is not updated, even if we want it to (by
> enabling KERNEL_DEBUG_TIMESTAMPS).
>
> It’s complained that even do_compile is forced to re-run, the timestamp is
> not updated.
>

Understand so the main idea is to get the timestamp of the last do_compile
task running time even when they will come from the sstate, when it comes
from the sstate the timestamp is the same one that was taken when the
do_compile runs.


> In such case, I only see two choices:
>
> 1. delete the compile.h in do_compile (I have to admit that I didn’t try
> this method out)
>
> 2. set KBUILD_BUILD_TIMESTAMP explicitly
>
> I chose the second one because I wanted to output the value of
> KBUILD_BUILD_TIMESTAMP just like when KERNEL_DEBUG_TIMESTAMPS is disabled.
>
> Also, `date` will be run in one way or another. It will either be run in
> mkcompile_h or be run in do_compile.
>
>
>
> * DATETIME
>
> The DATETIME’s value is the time when bitbake.conf is parsed. By using
> DATETIME + varexclude, it’s basically achieving the same result as using
> `date` directly.
>
> The ssate cache issue you mentioned remains the same, although I think
> it’s actually the expected behavior as explained above. And when source
> code/config changes and do_compile is re-run, KBUILD_BUILD_TIMESTAMP is set
> to a different value from the previous run.
>
> The only difference is that DATETIME reflects the time bitbake.conf is
> parsed, and `date` reflects the time kernel’s do_compile is executed.
>

This suggestion is only to be more bitbake friendly and use a variable that
already exists, using `data` will provide the same and is maybe better in
this case as it does not need the varexclude.


>
>
> Does my explanation make some sense? If I still miss something, please let
> me know.
>

Thanks for explaining the full picture.

Best regards,
Jose


> Thanks again for your review. Have a good weekend 😊
>
>
>
> Regards,
>
> Qi
>
>
>
> *From:* Jose Quaresma <quaresma.j...@gmail.com>
> *Sent:* Friday, November 18, 2022 7:11 PM
> *To:* Chen, Qi <qi.c...@windriver.com>
> *Cc:* openembedded-core@lists.openembedded.org
> *Subject:* Re: [OE-core][master][kirkstone][PATCH V2] kernel.bbclass:
> make KERNEL_DEBUG_TIMESTAMPS work at rebuild
>
>
>
>
>
>
>
> Chen Qi <qi.c...@windriver.com> escreveu no dia quinta, 17/11/2022 à(s)
> 04:12:
>
> Currently, the KERNEL_DEBUG_TIMESTAMPS is not working as expected
> at rebuild. That is, even if we set it to "1", the kernel build time
> is not changed. The problem could be reproduced by the following steps.
>   1. bitbake core-image-minimal; start image and check `uname -a` output.
>   2. set in local.conf: KERNEL_DEBUG_TIMESTAMPS = "1"
>   3. bitbake core-image-minimal; start image and check `uname -a` output.
>
> It's expected that after enabling KERNEL_DEBUG_TIMESTAMPS, the kernel
> build time will be set to current date. But it's not. This is because
> the compile.h was not re-generated when do_compile task was re-executed.
>
> In mkcompile_h, we have:
> """
>  # Only replace the real compile.h if the new one is different,
>  # in order to preserve the timestamp and avoid unnecessary
>  # recompilations.
>  # We don't consider the file changed if only the date/time changed,
>  # unless KBUILD_BUILD_TIMESTAMP was explicitly set (e.g. for
>  # reproducible builds with that value referring to a commit timestamp).
>  # A kernel config change will increase the generation number, thus
>  # causing compile.h to be updated (including date/time) due to the
>  # changed comment in the
>  # first line.
> """
> It has made it very clear that it will not be re-generated unless
> we have KBUILD_BUILD_TIMESTAMP set explicitly. So we set this variable
> explicitly in do_compile to fix this issue.
>
> Signed-off-by: Chen Qi <qi.c...@windriver.com>
> ---
>  meta/classes-recipe/kernel.bbclass | 8 ++++++++
>  1 file changed, 8 insertions(+)
>
> diff --git a/meta/classes-recipe/kernel.bbclass
> b/meta/classes-recipe/kernel.bbclass
> index 3834a42fb9..3f6b40907f 100644
> --- a/meta/classes-recipe/kernel.bbclass
> +++ b/meta/classes-recipe/kernel.bbclass
> @@ -367,6 +367,10 @@ kernel_do_compile() {
>                 export KBUILD_BUILD_TIMESTAMP="$ts"
>                 export KCONFIG_NOTIMESTAMP=1
>                 bbnote "KBUILD_BUILD_TIMESTAMP: $ts"
> +       else
> +               ts=`LC_ALL=C date`
> +               export KBUILD_BUILD_TIMESTAMP="$ts"
> +               bbnote "KBUILD_BUILD_TIMESTAMP: $ts"
>         fi
>         # The $use_alternate_initrd is only set from
>         # do_bundle_initramfs() This variable is specifically for the
> @@ -412,6 +416,10 @@ do_compile_kernelmodules() {
>                 export KBUILD_BUILD_TIMESTAMP="$ts"
>                 export KCONFIG_NOTIMESTAMP=1
>                 bbnote "KBUILD_BUILD_TIMESTAMP: $ts"
> +       else
> +               ts=`LC_ALL=C date`
> +               export KBUILD_BUILD_TIMESTAMP="$ts"
> +               bbnote "KBUILD_BUILD_TIMESTAMP: $ts"
>         fi
>         if (grep -q -i -e '^CONFIG_MODULES=y$' ${B}/.config); then
>                 oe_runmake -C ${B} ${PARALLEL_MAKE} modules
> ${KERNEL_EXTRA_ARGS}
> --
> 2.17.1
>
>
>
> Hi Chen,
>
> I think this only works on the first time you run it and after that if the
> kernel can be taken from the sstate-cache this timestamp will be bypassed.
> To generate a new timestamp you need to invalidate the stamp and run the
> task again with:
>
> bitbake virtual/linux -C do_compile
>
> Another possible issue is this will make this task indeterministic (not
> reproducible) as it uses the command 'date' that generates a
> different output in each run.
>
>
> IMO the bitbake DATETIME is better and it is deterministic:
>
> export KBUILD_BUILD_TIMESTAMP="$DATETIME"
>
> This also maybe introduces a new variable dependency exclusion on the
> tasks that uses this variable:
>
>
> kernel_do_compile[vardepsexclude] += DATETIME
>
> do_compile_kernelmodules[vardepsexclude] += DATETIME
>
> Jose
>
>
>
>
>
> 
>
>
>
>
> --
>
> Best regards,
>
>
> José Quaresma
>


-- 
Best regards,

José Quaresma
-=-=-=-=-=-=-=-=-=-=-=-
Links: You receive all messages sent to this group.
View/Reply Online (#173673): 
https://lists.openembedded.org/g/openembedded-core/message/173673
Mute This Topic: https://lists.openembedded.org/mt/95083712/21656
Group Owner: openembedded-core+ow...@lists.openembedded.org
Unsubscribe: https://lists.openembedded.org/g/openembedded-core/unsub 
[arch...@mail-archive.com]
-=-=-=-=-=-=-=-=-=-=-=-

Reply via email to