Ya, I need to look this over closely to try to understand your solution :) On Thu, Nov 21, 2024 at 10:17 AM Jia, Hongxu <hongxu....@windriver.com> wrote: > > Ping Joshua > > //Hongxu > > ________________________________ > From: openembedded-core@lists.openembedded.org > <openembedded-core@lists.openembedded.org> on behalf of hongxu via > lists.openembedded.org <hongxu.jia=eng.windriver....@lists.openembedded.org> > Sent: Wednesday, November 20, 2024 1:50 PM > To: openembedded-core@lists.openembedded.org > <openembedded-core@lists.openembedded.org>; jpewhac...@gmail.com > <jpewhac...@gmail.com>; Jia, Hongxu <hongxu....@windriver.com> > Subject: [OE-core] [RR V2][NULL][0/3] SPDX 3.0: Reduce redundant spdxid-hash > symlinks to save inode on host > > Summary: SPDX 3.0: Reduce redundant spdxid-hash symlinks to save inode on host > > * Git logs > [oe-core] > commit 5ebf6f058259bc073e83bd2fa2b3b116e6156d60 > Author: Hongxu Jia <hongxu....@windriver.com> > Date: Sat Nov 9 17:16:31 2024 +0800 > > oeqa/selftest: Add SPDX 3.0 include source cases for core_image_minimal > build > > $ oe-selftest -r spdx.SPDX30Check.test_core_image_minimal_include_source > 2024-11-20 03:29:24,850 - oe-selftest - INFO - Adding layer libraries: > 2024-11-20 03:29:24,850 - oe-selftest - INFO - path-to/poky/meta/lib > 2024-11-20 03:29:24,850 - oe-selftest - INFO - > path-to/poky/meta-yocto-bsp/lib > 2024-11-20 03:29:24,850 - oe-selftest - INFO - > path-to/poky/meta-selftest/lib > 2024-11-20 03:29:24,850 - oe-selftest - INFO - > path-to/meta-openembedded/meta-oe/lib > 2024-11-20 03:29:24,868 - oe-selftest - INFO - Checking base > configuration is valid/parsable > 2024-11-20 03:29:27,317 - oe-selftest - INFO - Adding: "include > selftest.inc" in path-to/build_spdx3-st/conf/local.conf > 2024-11-20 03:29:27,317 - oe-selftest - INFO - Adding: "include > bblayers.inc" in bblayers.conf > 2024-11-20 03:29:27,317 - oe-selftest - INFO - > test_core_image_minimal_include_source > (spdx.SPDX30Check.test_core_image_minimal_include_source) > 2024-11-20 04:52:47,318 - oe-selftest - INFO - Keepalive message > 2024-11-20 05:14:08,115 - oe-selftest - INFO - ... ok > 2024-11-20 05:21:12,798 - oe-selftest - INFO - > ---------------------------------------------------------------------- > 2024-11-20 05:21:12,798 - oe-selftest - INFO - Ran 1 test in 6706.271s > 2024-11-20 05:21:12,798 - oe-selftest - INFO - OK > 2024-11-20 05:21:32,026 - oe-selftest - INFO - RESULTS: > 2024-11-20 05:21:32,026 - oe-selftest - INFO - RESULTS - > spdx.SPDX30Check.test_core_image_minimal_include_source: PASSED (6280.82s) > 2024-11-20 05:21:32,027 - oe-selftest - INFO - SUMMARY: > 2024-11-20 05:21:32,027 - oe-selftest - INFO - oe-selftest () - Ran 1 > test in 6706.272s > 2024-11-20 05:21:32,027 - oe-selftest - INFO - oe-selftest - OK - All > required tests passed (successes=1, skipped=0, failures=0, errors=0) > > Signed-off-by: Hongxu Jia <hongxu....@windriver.com> > > commit 3753b084cffcbef374093a442d4e692821d1a29b > Author: Hongxu Jia <hongxu....@windriver.com> > Date: Sat Nov 9 14:18:26 2024 +0800 > > sbom30.py: reduce redundant spdxid symlinks to save inode on host > > In order to support all in-scope SPDX data within a single > JSON-LD file for SPDX 3.0.1, Yocto's SBOM: > - In native/target/nativesdk recipe, created spdxid-hash symlink > for each element to point to the JSON-LD file that contains > element details; > - In image recipe, use spdxid-hash symlink to collect element > details from varies of JSON-LD files > > While SPDX_INCLUDE_SOURCES = "1", it adds sources to JSON-LD file > and create 2N+ spdxid-hash symlinks for N source files. > (N for software_File, N for hasDeclaredLicense's Relationship) > > For large numbers of source files, adding an extra symlink -> real file > will occupy one more inode (per file), which will need a slot in > the OS's inode cache. In this situation, disk performance is slow > and inode is used up quickly > > After commit [sbom30/spdx30: add link prefix and name to namespace > of spdxId and alias] applied, the namespace of spdxId and alias in > recipe and package jsonld differs. Use it to create symlink to jsonld, > take recipe shadow, package shadow and package shadow-src for example: > > For recipe jsonld tmp/deploy/spdx/3.0.1/core2-64/recipes/shadow.spdx.json > > spdxId: http://spdx.org/spdxdocs/recipe-shadow-xxx/... > alias: recipe-shadow/UNIHASH/... > symlink: > tmp/deploy/spdx/3.0.1/core2-64/by-spdxid-link/recipe-shadow.spdx.json -> > ../recipes/shadow.spdx.json > > For package jsonld > tmp/deploy/spdx/3.0.1/core2-64/packages/shadow.spdx.json > > spdxId: http://spdx.org/spdxdocs/package-shadow-xxx/... > alias: package-shadow/UNIHASH/... > symlink: > tmp/deploy/spdx/3.0.1/core2-64/by-spdxid-link/package-shadow.spdx.json -> > ../packages/shadow.spdx.json > > In package jsonld > tmp/deploy/spdx/3.0.1/core2-64/packages/shadow-src.spdx.json > > spdxId: http://spdx.org/spdxdocs/package-shadow-src-xxx/... > alias: package-shadow-src/UNIHASH/... > symlink: > tmp/deploy/spdx/3.0.1/core2-64/by-spdxid-link/package-shadow-src.spdx.json -> > ../packages/shadow-src.spdx.json > > Build core-image-minimal with/without this commit, comparing the > spdxid-link > number, 7 281 824 -> 6 043 > > echo 'SPDX_INCLUDE_SOURCES = "1"' >> local.conf > > Without this commit: > $ time bitbake core-image-minimal > real 100m17.769s > user 0m24.516s > sys 0m4.334s > > $ find tmp/deploy/spdx/3.0.1/*/by-spdxid-hash -name "*.json" |wc -l > 7281824 > > With this commit: > $ time bitbake core-image-minimal > real 85m12.994s > user 0m20.423s > sys 0m4.228s > > $ find tmp/deploy/spdx/3.0.1/*/by-spdxid-link -name "*.json" |wc -l > 6043 > > Signed-off-by: Hongxu Jia <hongxu....@windriver.com> > > commit 0ea8bcaa9a8fe63f1935e02968fbaa541734024b > Author: Hongxu Jia <hongxu....@windriver.com> > Date: Tue Nov 19 20:12:37 2024 +0800 > > sbom30/spdx30: add link prefix and name to namespace of spdxId and alias > > In order to simple reference the SPDX ID to instead of making jsonld hash > path for each element, only creating one symlink for one file and > referencing > it multiple times, add link prefix and name to the namespace of spdxId > and alias > to replace ${PN} to avoid namespace conflict between recipe, packages and > images. > > Take recipe shadow, package shadow and package shadow-src for example: > Without this commit, spdxId and alias in recipe and package jsonld have > the same > namespace > > spdxId: http://spdx.org/spdxdocs/shadow-xxx/... > alias: shadow/UNIHASH/... > > After apply this commit, the namespace of spdxId in recipe and package > jsonld differs: > In recipe jsonld tmp/deploy/spdx/3.0.1/core2-64/recipes/shadow.spdx.json > > spdxId: http://spdx.org/spdxdocs/recipe-shadow-xxx/... > alias: recipe-shadow/UNIHASH/... > > In package jsonld tmp/deploy/spdx/3.0.1/core2-64/packages/shadow.spdx.json > > spdxId: http://spdx.org/spdxdocs/package-shadow-xxx/... > alias: package-shadow/UNIHASH/... > > In package jsonld > tmp/deploy/spdx/3.0.1/core2-64/packages/shadow-src.spdx.json > > spdxId: http://spdx.org/spdxdocs/package-shadow-src-xxx/... > alias: package-shadow-src/UNIHASH/... > > Then will use namespace of spdxId and alias to create link for jsonld > file, > one symlink for one jsonld file, referenced by elements multiple times > > Signed-off-by: Hongxu Jia <hongxu....@windriver.com> > > > > ====== Testing ====== > * Commands > > Build core-image-minimal with/without this commit, comparing the spdxid-link > number, 7 281 824 -> 6 043 > > echo 'SPDX_INCLUDE_SOURCES = "1"' >> local.conf > > Without this commit: > $ time bitbake core-image-minimal > real 100m17.769s > user 0m24.516s > sys 0m4.334s > > $ find tmp/deploy/spdx/3.0.1/*/by-spdxid-hash -name "*.json" |wc -l > 7281824 > > With this commit: > $ time bitbake core-image-minimal > real 85m12.994s > user 0m20.423s > sys 0m4.228s > > $ find tmp/deploy/spdx/3.0.1/*/by-spdxid-link -name "*.json" |wc -l > 6043 > > > $ oe-selftest -r spdx.SPDX30Check.test_core_image_minimal_include_source > 2024-11-20 03:29:24,850 - oe-selftest - INFO - Adding layer libraries: > 2024-11-20 03:29:24,850 - oe-selftest - INFO - path-to/poky/meta/lib > 2024-11-20 03:29:24,850 - oe-selftest - INFO - > path-to/poky/meta-yocto-bsp/lib > 2024-11-20 03:29:24,850 - oe-selftest - INFO - path-to/poky/meta-selftest/lib > 2024-11-20 03:29:24,850 - oe-selftest - INFO - > path-to/meta-openembedded/meta-oe/lib > 2024-11-20 03:29:24,868 - oe-selftest - INFO - Checking base configuration is > valid/parsable > 2024-11-20 03:29:27,317 - oe-selftest - INFO - Adding: "include selftest.inc" > in path-to/build_spdx3-st/conf/local.conf > 2024-11-20 03:29:27,317 - oe-selftest - INFO - Adding: "include bblayers.inc" > in bblayers.conf > 2024-11-20 03:29:27,317 - oe-selftest - INFO - > test_core_image_minimal_include_source > (spdx.SPDX30Check.test_core_image_minimal_include_source) > 2024-11-20 04:52:47,318 - oe-selftest - INFO - Keepalive message > 2024-11-20 05:14:08,115 - oe-selftest - INFO - ... ok > 2024-11-20 05:21:12,798 - oe-selftest - INFO - > ---------------------------------------------------------------------- > 2024-11-20 05:21:12,798 - oe-selftest - INFO - Ran 1 test in 6706.271s > 2024-11-20 05:21:12,798 - oe-selftest - INFO - OK > 2024-11-20 05:21:32,026 - oe-selftest - INFO - RESULTS: > 2024-11-20 05:21:32,026 - oe-selftest - INFO - RESULTS - > spdx.SPDX30Check.test_core_image_minimal_include_source: PASSED (6280.82s) > 2024-11-20 05:21:32,027 - oe-selftest - INFO - SUMMARY: > 2024-11-20 05:21:32,027 - oe-selftest - INFO - oe-selftest () - Ran 1 test in > 6706.272s > 2024-11-20 05:21:32,027 - oe-selftest - INFO - oe-selftest - OK - All > required tests passed (successes=1, skipped=0, failures=0, errors=0) > >
-=-=-=-=-=-=-=-=-=-=-=- Links: You receive all messages sent to this group. View/Reply Online (#207554): https://lists.openembedded.org/g/openembedded-core/message/207554 Mute This Topic: https://lists.openembedded.org/mt/109680228/21656 Group Owner: openembedded-core+ow...@lists.openembedded.org Unsubscribe: https://lists.openembedded.org/g/openembedded-core/unsub [arch...@mail-archive.com] -=-=-=-=-=-=-=-=-=-=-=-