summaryrefslogtreecommitdiffstats
path: root/documentation
diff options
context:
space:
mode:
authorScott Rifenbark <scott.m.rifenbark@intel.com>2011-12-14 10:26:17 -0800
committerRichard Purdie <richard.purdie@linuxfoundation.org>2011-12-16 16:58:40 +0000
commit64d51768657c5d85e325338c38183398bb8bb64e (patch)
treefa226284a57f133b480d611203071f537396922f /documentation
parent2ce852ad7b068ac27e589a5204fc0dca036ebebe (diff)
downloadpoky-64d51768657c5d85e325338c38183398bb8bb64e.tar.gz
documenation/poky-ref-manual/technical-details.xml: Shared State
I updated the tips and tricks section to include two sub-sections. The first if the debugging stuff from Richard's email. The second section is how to invalidate a section of the sstate cache on a per-class basis. Fixes [YOCTO #1500] (From yocto-docs rev: 7493f5e7ec641e7cd79f8e3e6c045cadf7a6999c) Signed-off-by: Scott Rifenbark <scott.m.rifenbark@intel.com> Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
Diffstat (limited to 'documentation')
-rw-r--r--documentation/poky-ref-manual/technical-details.xml179
1 files changed, 77 insertions, 102 deletions
diff --git a/documentation/poky-ref-manual/technical-details.xml b/documentation/poky-ref-manual/technical-details.xml
index 1657431495..dfb5b726c0 100644
--- a/documentation/poky-ref-manual/technical-details.xml
+++ b/documentation/poky-ref-manual/technical-details.xml
@@ -493,111 +493,86 @@
493 493
494 <para> 494 <para>
495 The code in the Yocto Project that supports incremental builds is not 495 The code in the Yocto Project that supports incremental builds is not
496 simple code. 496 simple code.
497 Consequently, when things go wrong, debugging needs to be straightforward. 497 This section presents some tips and tricks that help you work around
498 Because of this, the Yocto Project team included strong debugging 498 issues related to shared state code.
499 tools. 499 </para>
500 </para> 500
501 501 <section id='debugging'>
502 <para> 502 <title>Debugging</title>
503 First, whenever a shared state package is written out, so is a 503
504 corresponding <filename>.siginfo</filename> file. 504 <para>
505 This practice results in a pickled python database of all 505 When things go wrong, debugging needs to be straightforward.
506 the metadata that went into creating the hash for a given shared state 506 Because of this, the Yocto Project team included strong debugging
507 package. 507 tools:
508 </para> 508 <itemizedlist>
509 509 <listitem><para>Whenever a shared state package is written out, so is a
510 <para> 510 corresponding <filename>.siginfo</filename> file.
511 Second, if BitBake is run with the <filename>--dump-signatures</filename> 511 This practice results in a pickled python database of all
512 (or <filename>-S</filename>) option, BitBake dumps out 512 the metadata that went into creating the hash for a given shared state
513 <filename>.siginfo</filename> files in 513 package.</para></listitem>
514 the stamp directory for every task it would have executed instead of 514 <listitem><para>If BitBake is run with the <filename>--dump-signatures</filename>
515 building the target package specified. 515 (or <filename>-S</filename>) option, BitBake dumps out
516 </para> 516 <filename>.siginfo</filename> files in
517 517 the stamp directory for every task it would have executed instead of
518 <para> 518 building the target package specified.</para></listitem>
519 Finally, there is a <filename>bitbake-diffsigs</filename> command that 519 <listitem><para>There is a <filename>bitbake-diffsigs</filename> command that
520 can process these <filename>.siginfo</filename> files. 520 can process these <filename>.siginfo</filename> files.
521 If one file is specified, it will dump out the dependency 521 If one file is specified, it will dump out the dependency
522 information in the file. 522 information in the file.
523 If two files are specified, it will compare the 523 If two files are specified, it will compare the
524 two files and dump out the differences between the two. 524 two files and dump out the differences between the two.
525 This allows the question of "What changed between X and Y?" to be 525 This allows the question of "What changed between X and Y?" to be
526 answered easily. 526 answered easily.</para></listitem>
527 </para> 527 </itemizedlist>
528 </para>
529 </section>
530
531 <section id='invalidating-shared-state'>
532 <title>Invalidating Shared State</title>
533
534 <para>
535 The Yocto Project shared state code uses checksums and shared state memory
536 cache to avoide building tasks that don't need built.
537 As with all schemes, this one has some drawbacks.
538 It is possible that you could make implicit changes that are not factored into the checksum
539 calculation, but do affect a task's output.
540 A good example is perhaps when a tool changes its output.
541 Let's say that the output of <filename>rpmdeps</filename> needed to change.
542 The result of the change should be that all the "package", "package_write_rpm",
543 and "package_deploy-rpm" shared state cache items would become invalid.
544 But, because this is a change that is external to the code and therefore implicit,
545 the associated shared state cache items do not become invalidated.
546 In this case, the build process would use the cache items rather than running the
547 task again.
548 Obviously, these types of implicit changes can cause problems.
549 </para>
550
551 <para>
552 To avoid these problems during the build, you need to understand the effects of any
553 change you make.
554 Note that any changes you make directly to a function automatically are factored into
555 the checksum calculation and thus, will invalidate the associated area of sstate cache.
556 You need to be aware of any implicit changes that are not obvious changes to the
557 code and could affect the output of a given task.
558 Once you are aware of such a change, you can take steps to invalidate the cache
559 and force the task to run.
560 The step to take is as simple as changing a function's comments in the source code.
561 For example, to invalidate package shared state files, change the comment statments
562 of <filename>do_package</filename> or the comments of one of the functions it calls.
563 The change is purely cosmetic, but it causes the checksum to be recalculated and
564 forces the task to be run again.
565 </para>
566
567 <note>
568 For an example of a commit that makes a cosmetic change to invalidate an sstate,
569 see this
570 <ulink url='http://git.yoctoproject.org/cgit.cgi/poky/commit/meta/classes/package.bbclass?id=737f8bbb4f27b4837047cb9b4fbfe01dfde36d54'>commit</ulink>.
571 </note>
572 </section>
528 </section> 573 </section>
529</section> 574</section>
530 575
531<!--
532
533 <para>
534 The Yocto Project build process uses a shared state caching scheme to avoid having to
535 rebuild software when it is not necessary.
536 Because the build time for a Yocto image can be significant, it is helpful to try and
537 determine what really needs built and what can be skipped given a particular project's
538 build process.
539 </para>
540
541 <para>
542 The scheme that the Yocto Project uses involves checksum generation and comparison for
543 a task's inputs.
544 The scheme also employs an area of memory called the shared state cache that is
545 pointed to by the <filename>SSTATE_DIR</filename> variable.
546 This area contains task output generated from a previous build.
547 If a given task's checksum matches the checksum of a previous build for the same
548 task, the build process uses the state of the cache rather than rerunning that
549 task.
550 </para>
551
552 <para>
553 The previous paragraph is a simplistic explanation of how the build process
554 uses checksums and shared state memory cache to avoide building tasks that
555 don't need built.
556 If you want a bit more explanation on the topic,
557 see "<ulink url='https://lists.yoctoproject.org/pipermail/yocto/2011-March/003366.html'>Shared
558 State - What does it mean and why should I care?</ulink>" from the Yocto
559 Project discussion archives.
560 </para>
561
562 <para>
563 As with all schemes, this one has some drawbacks.
564 It is possible that you could make implicit changes that are not factored into the checksum
565 calculation, but do affect a task's output.
566 A good example is perhaps when a tool changes its output.
567 Let's say that the output of <filename>rpmdeps</filename> needed to change.
568 The result of the change should be that all the "package", "package_write_rpm",
569 and "package_deploy-rpm" sstate-cache items would become invalid.
570 But, because this is a change that is external to the code and therefore implicit,
571 the associated sstate-cache items do not become invalidated.
572 In this case, the build process would use the cache items rather than running the
573 task again.
574 Obviously, these types of implicit changes can cause problems.
575 </para>
576
577 <para>
578 To avoid these problems during the build, you need to understand the effects of any
579 change you make.
580 Note that any changes you make directly to a function automatically are factored into
581 the checksum calculation and thus, will invalidate the associated area of sstate cache.
582 You need to be aware of any implicit changes that are not obvious changes to the
583 code and could affect the output of a given task.
584 Once you are aware of such a change, you can take steps to invalidate the cache
585 and force the task to run.
586 The step to take is as simple as changing a function's comments in the source code.
587 For example, to invalidate package sstate files, change the comment statments
588 of <filename>do_package</filename> or one of the functions it calls.
589 The change is purely cosmetic, but it causes the checksum to be recalculated and
590 forces the task to be run again.
591 </para>
592
593 <note>
594 For an example of a commit that makes a cosmetic change to invalidate an sstate,
595 see this
596 <ulink url='http://git.yoctoproject.org/cgit.cgi/poky/commit/meta/classes/package.bbclass?id=737f8bbb4f27b4837047cb9b4fbfe01dfde36d54'>commit</ulink>.
597 </note>
598</section>
599-->
600
601</chapter> 576</chapter>
602<!-- 577<!--
603vim: expandtab tw=80 ts=4 578vim: expandtab tw=80 ts=4