Giter Site home page Giter Site logo

Share work across configurations by setting working directory for actions then canonicalizing that working directory in RE about buck2 HOT 5 OPEN

thetimmorland avatar thetimmorland commented on May 1, 2024
Share work across configurations by setting working directory for actions then canonicalizing that working directory in RE

from buck2.

Comments (5)

cjhopman avatar cjhopman commented on May 1, 2024

I think a challenge here is that basically every action has inputs that are produced by other actions. You would need to find a way to canonicalize those as well, and that's really difficult. Bazel had an interesting approach they were experimenting with described here: https://docs.google.com/document/d/17snvmic26-QdGuwVw55Gl0oOufw9sCVuOAvHqGZJFr4/edit#heading=h.5mcn15i0e1ch. I'm not sure what the status of that is today.

We're planning on experimenting with another approach for this sometime this year. There's a lot of complications (that bazel doc talks about a few and has comments on some others).

from buck2.

thetimmorland avatar thetimmorland commented on May 1, 2024

think a challenge here is that basically every action has inputs that are produced by other actions. You would need to find a way to canonicalize those as well, and that's really difficult.

Assuming the build does not use transitions wouldn't generated inputs already be canonicalized?

PWD=buck-out/v2/gen/root/00000000000000 ./../../../../gen_src.py -o __gen_src__/generated.c
PWD=buck-out/v2/gen/root/00000000000000 cc __gen_src__/generated.c -o __main__/main

from buck2.

cjhopman avatar cjhopman commented on May 1, 2024

I had assumed you meant a model where the action sees its output with path 00000000000 but then it gets rewritten to the real path, because it keeping the 00000000 path just completely doesn't work. Different actions need to produce different output paths, and that needs to be some deterministic mapping in the context of any possible build.

from buck2.

zjturner avatar zjturner commented on May 1, 2024

this sounds very similar to the problem I’ve discussed a bunch of times in the past, where it’s very difficult to apply different configurations per target, so you’re forced into global configuration that affects every targets hash even when it’s unnecessary.

ive had some success with transition rules to strip out unnecessary constraints, and they’ve discussed implementing a feature called “configuration trimming” to automatically strip unnecessary constraints, but no guidance yet on if or when that will actually happen

from buck2.

thetimmorland avatar thetimmorland commented on May 1, 2024

I had assumed you meant a model where the action sees its output with path 00000000000 but then it gets rewritten to the real path, because it keeping the 00000000 path just completely doesn't work. Different actions need to produce different output paths, and that needs to be some deterministic mapping in the context of any possible build.

From buck2's perspective, each action still has a unique output path. However, by applying the transformation described above before sending an action to RE and reversing it when you receive your response (there is some bookkeeping required for this), you are able to share cache hits between configurations by hiding the configuration hash from RE.

ive had some success with transition rules to strip out unnecessary constraints, and they’ve discussed implementing a feature called “configuration trimming” to automatically strip unnecessary constraints, but no guidance yet on if or when that will actually happen

Yes, this definitely achieves a similar purpose to configuration trimming, either manual or automatic. I've read your previous threads and they've been very helpful :)

from buck2.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.