-
Notifications
You must be signed in to change notification settings - Fork 841
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Volume-locality strategy should ignore inputs of cached resource #8070
Comments
Could you elaborate more on |
@xtremerui Let me explain using a sample pipeline:
Assuming container placement is Case 1: When
|
I just want to make clear that For a concourse/atc/exec/get_step.go Line 354 in 32941cc
so your scenarios could be reduced to case 2 and case 3 that Though, you might want to use |
@xtremerui I don't think so. Case 1 and case 2/3 has big difference. When
I'm not sure about non-Linux. But IMO, on 7.x, Before 7.x, say a task is placed on worker-1, then image fetch will happen on worker-1. If next build also place the But with 7.x, say a task is placed on worker-1, nested image get is placed on worker-2. The image will be fetched on worker-2, and streamed to worker-1. If next build, the task is still on worker-1, and image-get is still on worker-2. As worker-2 has the image already, no need to fetch image, but it still needs to stream the image to worker-1, which is a duplicate. On a large deployment, this is a big performance concern. |
What is the impact of this PR when |
This PR has NO impact when |
Summary
With
EnableCachedtreamedVolumes
turning on, ifget
step finds a resource cache it's gonna fetch, then it will not do anything, just returned the found volume.Say, a following task needs the
get
step as an input. If container placement strategy isvolume-locality
, then the task will be placed on the worker where the resource cache volume locates, which is bad, if the resource cache is widely used by many pipelines, because it will end up:Let's think about if
EnableCachedtreamedVolumes
off. Then theget
should go to afewest-build-container
worker (#8061), then thetask
should go to the same worker pervolume-locality
.Thus, when
EnableCachedtreamedVolumes
is on, asget
does nothing, thetask
should go to afewest-build-container
worker, then stream the input volume from source worker. This is still more performant, because streaming a volume between workers should anyway cheaper than running a realget
step. But for those common resource caches, which are shared by a lot of pipelines, once they are warmed up on most of workers, then build should run much faster.Steps to reproduce
Expected results
Actual results
Additional context
Triaging info
The text was updated successfully, but these errors were encountered: