diff mbox series

dev-manual: disk-space: mention faster "find" command to trim sstate cache

Message ID 20230811090920.1095076-1-michael.opdenacker@bootlin.com
State New
Headers show
Series dev-manual: disk-space: mention faster "find" command to trim sstate cache | expand

Commit Message

Michael Opdenacker Aug. 11, 2023, 9:09 a.m. UTC
From: Michael Opdenacker <michael.opdenacker@bootlin.com>

[YOCTO #15182]

Signed-off-by: Michael Opdenacker <michael.opdenacker@bootlin.com>
Reported-by: Yoann CONGAL <yoann.congal@smile.fr>
Reported-by: Randy MacLeod <randy.macleod@windriver.com>
Reported-by: Josef Holzmayr <jester@theyoctojester.info>
---
 documentation/dev-manual/disk-space.rst | 24 +++++++++++++++---------
 1 file changed, 15 insertions(+), 9 deletions(-)

Comments

Richard Purdie Aug. 11, 2023, 3:06 p.m. UTC | #1
On Fri, 2023-08-11 at 11:09 +0200, Michael Opdenacker via
lists.yoctoproject.org wrote:
> From: Michael Opdenacker <michael.opdenacker@bootlin.com>
> 
> [YOCTO #15182]
> 
> Signed-off-by: Michael Opdenacker <michael.opdenacker@bootlin.com>
> Reported-by: Yoann CONGAL <yoann.congal@smile.fr>
> Reported-by: Randy MacLeod <randy.macleod@windriver.com>
> Reported-by: Josef Holzmayr <jester@theyoctojester.info>
> ---
>  documentation/dev-manual/disk-space.rst | 24 +++++++++++++++---------
>  1 file changed, 15 insertions(+), 9 deletions(-)
> 
> diff --git a/documentation/dev-manual/disk-space.rst b/documentation/dev-manual/disk-space.rst
> index c63591cc7a..670f3d2792 100644
> --- a/documentation/dev-manual/disk-space.rst
> +++ b/documentation/dev-manual/disk-space.rst
> @@ -27,19 +27,25 @@ Purging Duplicate Shared State Cache Files
>  ==========================================
>  
>  After multiple build iterations, the Shared State (sstate) cache can contain
> -duplicate cache files for a given package, while only the most recent one
> -is likely to be reusable. The following command purges all but the
> -newest sstate cache file for each package::
> +duplicate cache files for a given package, consuming a substantial amount of
> +disk space. However, only the most recent cache files are likeky to be reusable.
>  
> -   sstate-cache-management.sh --remove-duplicated --cache-dir=build/sstate-cache
> +The following command is a quick way to purge all the cache files which
> +are older than a specified number of days::
>  
> -This command will ask you to confirm the deletions it identifies.
> +   find build/sstate-cache -type f -atime +$DAYS -delete
>  
> -.. note::
> +OpenEmbedded-Core also offers a command which can be used to look for
> +cache files only for enabled architectures, and purge all but the newest
> +ones on each architecture::
>  
> -   The duplicated sstate cache files of one package must have the same
> -   architecture, which means that sstate cache files with multiple
> -   architectures are not considered as duplicate.
> +   sstate-cache-management.sh --remove-duplicated --cache-dir=build/sstate-cache
>  
> +This command will ask you to confirm the deletions it identifies.
>  Run ``sstate-cache-management.sh`` for more details about this script.

As long as bitbake builds have writable access to the sstate cache,
files are touched as they are accessed so it is easy to know which ones
are being used and which ones are not. As such you can use mtime in the
above example even for a partition mounted as "noatime" for performance
reasons.

>  
> +.. note::
> +
> +   As this command is much more cautious and selective, removing only cache files,
> +   it will execute much slower than the simple ``find`` command described above.
> +   Therefore, it may not be your best option to trim huge cache directories.

It doesn't remove only cache files, it removes files that it considers
to be unreachable by exploring a set of build configurations. It
requires full build environment to be available and doesn't work well
covering multiple releases. It also doesn't work in a limited
environment like a BSD based NAS where the above find command would
still likely work easily.

Can we get rid of sstate-cache-management.sh? :)

Cheers,

Richard
Michael Opdenacker Aug. 11, 2023, 3:50 p.m. UTC | #2
Hi Richard,

On 11.08.23 at 17:06, Richard Purdie wrote:
> On Fri, 2023-08-11 at 11:09 +0200, Michael Opdenacker via
> lists.yoctoproject.org wrote:
>> From: Michael Opdenacker <michael.opdenacker@bootlin.com>
>>
>> [YOCTO #15182]
>>
>> Signed-off-by: Michael Opdenacker <michael.opdenacker@bootlin.com>
>> Reported-by: Yoann CONGAL <yoann.congal@smile.fr>
>> Reported-by: Randy MacLeod <randy.macleod@windriver.com>
>> Reported-by: Josef Holzmayr <jester@theyoctojester.info>
>> ---
>>   documentation/dev-manual/disk-space.rst | 24 +++++++++++++++---------
>>   1 file changed, 15 insertions(+), 9 deletions(-)
>>
>> diff --git a/documentation/dev-manual/disk-space.rst b/documentation/dev-manual/disk-space.rst
>> index c63591cc7a..670f3d2792 100644
>> --- a/documentation/dev-manual/disk-space.rst
>> +++ b/documentation/dev-manual/disk-space.rst
>> @@ -27,19 +27,25 @@ Purging Duplicate Shared State Cache Files
>>   ==========================================
>>   
>>   After multiple build iterations, the Shared State (sstate) cache can contain
>> -duplicate cache files for a given package, while only the most recent one
>> -is likely to be reusable. The following command purges all but the
>> -newest sstate cache file for each package::
>> +duplicate cache files for a given package, consuming a substantial amount of
>> +disk space. However, only the most recent cache files are likeky to be reusable.
>>   
>> -   sstate-cache-management.sh --remove-duplicated --cache-dir=build/sstate-cache
>> +The following command is a quick way to purge all the cache files which
>> +are older than a specified number of days::
>>   
>> -This command will ask you to confirm the deletions it identifies.
>> +   find build/sstate-cache -type f -atime +$DAYS -delete
>>   
>> -.. note::
>> +OpenEmbedded-Core also offers a command which can be used to look for
>> +cache files only for enabled architectures, and purge all but the newest
>> +ones on each architecture::
>>   
>> -   The duplicated sstate cache files of one package must have the same
>> -   architecture, which means that sstate cache files with multiple
>> -   architectures are not considered as duplicate.
>> +   sstate-cache-management.sh --remove-duplicated --cache-dir=build/sstate-cache
>>   
>> +This command will ask you to confirm the deletions it identifies.
>>   Run ``sstate-cache-management.sh`` for more details about this script.
> As long as bitbake builds have writable access to the sstate cache,
> files are touched as they are accessed so it is easy to know which ones
> are being used and which ones are not. As such you can use mtime in the
> above example even for a partition mounted as "noatime" for performance
> reasons.


Good idea, this way the solution is a little broader as "noatime" is 
frequently used.

>
>>   
>> +.. note::
>> +
>> +   As this command is much more cautious and selective, removing only cache files,
>> +   it will execute much slower than the simple ``find`` command described above.
>> +   Therefore, it may not be your best option to trim huge cache directories.
> It doesn't remove only cache files, it removes files that it considers
> to be unreachable by exploring a set of build configurations. It
> requires full build environment to be available and doesn't work well
> covering multiple releases. It also doesn't work in a limited
> environment like a BSD based NAS where the above find command would
> still likely work easily.
>
> Can we get rid of sstate-cache-management.sh? :)

Thanks for these useful details about this script!

Are you suggesting we could at least remove sstate-cache-management.sh 
from the docs?
Thanks again,
Michael.
diff mbox series

Patch

diff --git a/documentation/dev-manual/disk-space.rst b/documentation/dev-manual/disk-space.rst
index c63591cc7a..670f3d2792 100644
--- a/documentation/dev-manual/disk-space.rst
+++ b/documentation/dev-manual/disk-space.rst
@@ -27,19 +27,25 @@  Purging Duplicate Shared State Cache Files
 ==========================================
 
 After multiple build iterations, the Shared State (sstate) cache can contain
-duplicate cache files for a given package, while only the most recent one
-is likely to be reusable. The following command purges all but the
-newest sstate cache file for each package::
+duplicate cache files for a given package, consuming a substantial amount of
+disk space. However, only the most recent cache files are likeky to be reusable.
 
-   sstate-cache-management.sh --remove-duplicated --cache-dir=build/sstate-cache
+The following command is a quick way to purge all the cache files which
+are older than a specified number of days::
 
-This command will ask you to confirm the deletions it identifies.
+   find build/sstate-cache -type f -atime +$DAYS -delete
 
-.. note::
+OpenEmbedded-Core also offers a command which can be used to look for
+cache files only for enabled architectures, and purge all but the newest
+ones on each architecture::
 
-   The duplicated sstate cache files of one package must have the same
-   architecture, which means that sstate cache files with multiple
-   architectures are not considered as duplicate.
+   sstate-cache-management.sh --remove-duplicated --cache-dir=build/sstate-cache
 
+This command will ask you to confirm the deletions it identifies.
 Run ``sstate-cache-management.sh`` for more details about this script.
 
+.. note::
+
+   As this command is much more cautious and selective, removing only cache files,
+   it will execute much slower than the simple ``find`` command described above.
+   Therefore, it may not be your best option to trim huge cache directories.