Skip to content
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

feat: sched: Improve worker assigning logic #8447

Merged
merged 2 commits into from Apr 9, 2022
Merged

Conversation

magik6k
Copy link
Contributor

@magik6k magik6k commented Apr 6, 2022

Related Issues

Should fix things like #7607

Proposed Changes

Currently when the scheduler is assigning tasks to workers, it creates a list of task->[]worker. This list is sorted by worker utilization at the start of scheduling cycle, but it isn't re-sorted when assigning many tasks to many workers in one cycle.

We could simply run the scheduling algorithm for each task in the queue separately, but this is unfortunately way too slow, so we have to do scheduling in batches, at least if we want to avoid rewriting it in a bigger way.

This PR aims to fix this issue by tracking change in worker utilization while processing the acceptableWindows array, which should result in much better scheduling decisions with only small increase of compute cost in scheduling.

Checklist

Before you mark the PR ready for review, please make sure that:

  • All commits have a clear commit message.
  • The PR title is in the form of of <PR type>: <area>: <change being made>
    • example: fix: mempool: Introduce a cache for valid signatures
    • PR type: fix, feat, INTERFACE BREAKING CHANGE, CONSENSUS BREAKING, build, chore, ci, docs,perf, refactor, revert, style, test
    • area: api, chain, state, vm, data transfer, market, mempool, message, block production, multisig, networking, paychan, proving, sealing, wallet, deps
  • This PR has tests for new functionality or change in behaviour
  • If new user-facing features are introduced, clear usage guidelines and / or documentation updates should be included in https://lotus.filecoin.io or Discussion Tutorials.
  • CI is green

@magik6k magik6k requested a review from a team as a code owner April 6, 2022 21:11
@rjan90
Copy link
Contributor

rjan90 commented Apr 6, 2022

Related issues that this also might help fix: #3709, #7868, #2675

@codecov
Copy link

codecov bot commented Apr 6, 2022

Codecov Report

Merging #8447 (80133aa) into master (f652dd3) will increase coverage by 0.06%.
The diff coverage is 83.67%.

Impacted file tree graph

@@            Coverage Diff             @@
##           master    #8447      +/-   ##
==========================================
+ Coverage   40.56%   40.63%   +0.06%     
==========================================
  Files         686      686              
  Lines       75426    75461      +35     
==========================================
+ Hits        30597    30664      +67     
+ Misses      39544    39484      -60     
- Partials     5285     5313      +28     
Impacted Files Coverage Δ
extern/sector-storage/selector_task.go 33.33% <33.33%> (ø)
extern/sector-storage/sched_resources.go 86.45% <62.50%> (+0.03%) ⬆️
extern/sector-storage/sched.go 86.69% <100.00%> (+1.91%) ⬆️
extern/sector-storage/selector_alloc.go 68.96% <100.00%> (ø)
extern/sector-storage/selector_existing.go 66.66% <100.00%> (ø)
markets/loggers/loggers.go 89.28% <0.00%> (-10.72%) ⬇️
extern/storage-sealing/currentdealinfo.go 71.17% <0.00%> (-5.41%) ⬇️
chain/stmgr/tracers.go 84.21% <0.00%> (-5.27%) ⬇️
chain/stmgr/call.go 65.94% <0.00%> (-3.25%) ⬇️
chain/sub/incoming.go 45.25% <0.00%> (-2.45%) ⬇️
... and 28 more

Copy link
Contributor

@arajasek arajasek left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This makes sense and is correct assuming that the initial sort produces the same order for every task (type?). That is, it never ranks 2 > 3 > 1 for sqi[0], but 3 > 2 > 1 for sqi[1].

I assume that's the case (and it's not super important that it's perfectly true, just generally true).

@RobQuistNL
Copy link
Contributor

I was about to try this on a big production setup, but I'm seeing a lot of merge conflicts when trying to merge this feature branch into v1.15.1 - can you maybe pull 1.15.1 in here or is it because its on the master branch here?

@magik6k
Copy link
Contributor Author

magik6k commented Apr 9, 2022

You should be able to just cherry-pick the two commits instead of merging:

git cherry-pick 6de4e3d4cda1ab6cf7c08296367dd0b695fb8321 80133aaa79c464f584ec62001545ff6cc4c815d6

@magik6k magik6k merged commit 7900479 into master Apr 9, 2022
@magik6k magik6k deleted the feat/sched-better branch April 9, 2022 18:50
@RobQuistNL
Copy link
Contributor

I've yet to run this unit at full speed, but so far, the results look very promising! No more 70 GET's on a single C2 / PC2 machine, but neatly distributed over all machines. Awesome work @magik6k , thanks a ton.

@RobQuistNL
Copy link
Contributor

It seems to be better, but its not perfect yet. Here I have 20 storage machines, each with a worker to fetch data, but 1 machine gets assigned all the GET's.

b8c0cbf0  1557    2a85812f  stor-03-main  GET   running   12m18.9s
da44b133  1568    2a85812f  stor-03-main  GET   running   12m18.9s
9e041ae4  1556    2a85812f  stor-03-main  GET   running   12m18.9s
92a2f4b4  1534    2a85812f  stor-03-main  GET   running   12m18.9s
6f58cf29  2318    2a85812f  stor-03-main  GET   running   12m18.9s
45c1b5d5  2353    2a85812f  stor-03-main  GET   running   12m18.9s
e55732cb  988     2a85812f  stor-03-main  GET   running   12m18.9s
73f01663  2184    2a85812f  stor-03-main  GET   running   12m18.9s
7413a34c  1017    2a85812f  stor-03-main  GET   running   12m18.9s
7ae48252  2252    2a85812f  stor-03-main  GET   running   12m18.9s
923516db  2295    2a85812f  stor-03-main  GET   running   12m18.9s
4d05db76  1513    2a85812f  stor-03-main  GET   running   12m18.9s
f7eb0cf8  2334    2a85812f  stor-03-main  GET   running   12m18.9s
ea0c2700  1565    2a85812f  stor-03-main  GET   running   12m18.9s
3338f307  2284    2a85812f  stor-03-main  GET   running   12m18.9s
0f7e6bbd  2387    2a85812f  stor-03-main  GET   running   12m18.9s
4413b055  2272    2a85812f  stor-03-main  GET   running   12m18.9s
3b9ad209  1350    2a85812f  stor-03-main  GET   running   12m18.9s
b3cf5d87  2412    2a85812f  stor-03-main  GET   running   12m18.9s
c20b809a  2296    2a85812f  stor-03-main  GET   running   12m18.9s
37db6e37  2332    2a85812f  stor-03-main  GET   running   12m18.9s
578992a0  2420    2a85812f  stor-03-main  GET   running   12m18.9s
030ef3ca  2291    2a85812f  stor-03-main  GET   running   12m18.9s
6e16ff37  2385    2a85812f  stor-03-main  GET   running   12m18.9s
97a59f69  2343    2a85812f  stor-03-main  GET   running   12m18.9s
81ea92d8  2327    2a85812f  stor-03-main  GET   running   12m18.9s
3c7583fa  1647    2a85812f  stor-03-main  GET   running   12m18.9s
98cb617f  2368    2a85812f  stor-03-main  GET   running   12m18.9s
89cf5b84  2365    2a85812f  stor-03-main  GET   running   12m18.9s
6ecc85ee  2369    2a85812f  stor-03-main  GET   running   12m18.9s
7c6d9692  2371    2a85812f  stor-03-main  GET   running   12m18.9s
9e72dbcf  2235    2a85812f  stor-03-main  GET   running   12m18.9s
a0d61fdb  2419    2a85812f  stor-03-main  GET   running   12m18.9s
03e4d31d  1536    2a85812f  stor-03-main  GET   running   12m18.9s
bb72965e  1529    2a85812f  stor-03-main  GET   running   12m18.9s
75e57f55  2316    2a85812f  stor-03-main  GET   running   12m18.9s
f0ee773b  2311    2a85812f  stor-03-main  GET   running   12m18.9s
4d6eb3a0  2362    2a85812f  stor-03-main  GET   running   12m18.9s
1361e638  1198    2a85812f  stor-03-main  GET   running   12m18.9s
607f0a17  2297    2a85812f  stor-03-main  GET   running   12m18.9s
cbb6875a  2308    2a85812f  stor-03-main  GET   running   12m18.9s
2b864624  2402    2a85812f  stor-03-main  GET   running   12m18.9s
3ec032cb  2401    2a85812f  stor-03-main  GET   running   12m18.9s
ba555adb  2423    2a85812f  stor-03-main  GET   running   12m18.9s
33c4b5bd  2301    2a85812f  stor-03-main  GET   running   12m18.9s
938b55d4  2417    2a85812f  stor-03-main  GET   running   12m18.9s
b0033a03  2299    2a85812f  stor-03-main  GET   running   12m18.9s
609f0b3d  2525    2a85812f  stor-03-main  GET   running   12m18.9s
04a16efd  2293    2a85812f  stor-03-main  GET   running   12m18.9s
4ca01b14  2303    2a85812f  stor-03-main  GET   running   12m18.9s
315f4d45  2335    2a85812f  stor-03-main  GET   running   12m18.9s
1bf91b8f  2390    2a85812f  stor-03-main  GET   running   12m18.9s
864ecd24  2314    2a85812f  stor-03-main  GET   running   12m18.9s
72e4fd81  2438    2a85812f  stor-03-main  GET   running   12m18.9s
7a8898a1  1596    2a85812f  stor-03-main  GET   running   12m18.9s
26e3ba5e  2312    2a85812f  stor-03-main  GET   running   12m18.9s
10795314  2487    2a85812f  stor-03-main  GET   running   12m18.9s
105e2a9d  2573    2a85812f  stor-03-main  GET   running   12m18.9s
505eadd7  2449    2a85812f  stor-03-main  GET   running   12m18.9s
05b8188f  2228    2a85812f  stor-03-main  GET   running   12m18.9s
30e7bc97  2442    2a85812f  stor-03-main  GET   running   12m18.9s
e483408c  2523    2a85812f  stor-03-main  GET   running   12m18.9s
86e403cd  944     2a85812f  stor-03-main  GET   running   12m18.9s
a281c949  2407    2a85812f  stor-03-main  GET   running   12m18.9s
41702c84  2333    2a85812f  stor-03-main  GET   running   12m18.9s
bcc683a9  2432    2a85812f  stor-03-main  GET   running   12m18.9s
ee235fcd  2392    2a85812f  stor-03-main  GET   running   12m18.9s
a7c17847  2256    2a85812f  stor-03-main  GET   running   12m18.9s
52b003dd  2445    2a85812f  stor-03-main  GET   running   12m18.9s
d77e4d1b  2319    2a85812f  stor-03-main  GET   running   12m18.9s
2a3ea197  2516    2a85812f  stor-03-main  GET   running   12m18.9s
a43848aa  2409    2a85812f  stor-03-main  GET   running   12m18.9s
4160d1bf  2337    2a85812f  stor-03-main  GET   running   12m18.9s
54c213d2  2456    2a85812f  stor-03-main  GET   running   12m18.9s
01eef33f  2483    2a85812f  stor-03-main  GET   running   12m18.9s
32675825  2338    2a85812f  stor-03-main  GET   running   12m18.9s
1c8309b8  2430    2a85812f  stor-03-main  GET   running   12m18.9s
f40c8b30  2281    2a85812f  stor-03-main  GET   running   12m18.9s
4459fba5  1326    2a85812f  stor-03-main  GET   running   12m18.9s
e6f92fb3  2364    2a85812f  stor-03-main  GET   running   12m18.9s
9dd22207  2463    2a85812f  stor-03-main  GET   running   12m18.9s
44774cb0  2253    2a85812f  stor-03-main  GET   running   12m18.9s
14631931  2339    2a85812f  stor-03-main  GET   running   12m18.9s
a32f2b0f  2361    2a85812f  stor-03-main  GET   running   12m18.8s
9b573e19  2324    2a85812f  stor-03-main  GET   running   12m18.8s
776ea53a  2460    2a85812f  stor-03-main  GET   running   12m18.8s
4787daa9  2507    2a85812f  stor-03-main  GET   running   12m18.8s
30436332  2404    2a85812f  stor-03-main  GET   running   12m18.8s
5b590e21  2340    2a85812f  stor-03-main  GET   running   12m18.8s
11acdfc3  2477    2a85812f  stor-03-main  GET   running   12m18.8s
81b8cc0d  2389    2a85812f  stor-03-main  GET   running   12m18.8s
39d96079  2355    2a85812f  stor-03-main  GET   running   12m18.8s
281064cf  2485    2a85812f  stor-03-main  GET   running   12m18.8s
a50e5992  2457    2a85812f  stor-03-main  GET   running   12m18.8s
835cda91  2488    2a85812f  stor-03-main  GET   running   12m18.8s
3b1ac759  1572    2a85812f  stor-03-main  GET   running   12m18.8s
a998b58a  2341    2a85812f  stor-03-main  GET   running   12m18.8s
5743553b  2227    2a85812f  stor-03-main  GET   running   12m18.8s
ba369b9b  2579    2a85812f  stor-03-main  GET   running   12m18.8s
89b4676a  2307    2a85812f  stor-03-main  GET   running   12m18.8s
c0d42142  2480    2a85812f  stor-03-main  GET   running   12m18.8s
415f63cb  2273    2a85812f  stor-03-main  GET   running   12m18.8s
f7f89830  2180    2a85812f  stor-03-main  GET   running   12m18.8s
e583c65b  2484    2a85812f  stor-03-main  GET   running   12m18.8s
2bdd49a3  2342    2a85812f  stor-03-main  GET   running   12m18.8s
de3d52b5  2363    2a85812f  stor-03-main  GET   running   12m18.8s
90c1335c  2436    2a85812f  stor-03-main  GET   running   12m18.8s
7f202005  1549    2a85812f  stor-03-main  GET   running   12m18.8s
ace31b51  2537    2a85812f  stor-03-main  GET   running   12m18.8s
6fd30c6b  2317    2a85812f  stor-03-main  GET   running   12m18.8s
ad1f4f85  2511    2a85812f  stor-03-main  GET   running   12m18.8s
716c3f2e  2508    2a85812f  stor-03-main  GET   running   12m18.8s
2136a021  2395    2a85812f  stor-03-main  GET   running   12m18.8s
471ac211  2263    2a85812f  stor-03-main  GET   running   12m18.8s
a4c5ff3e  2372    2a85812f  stor-03-main  GET   running   12m18.8s
904ccb8b  2313    2a85812f  stor-03-main  GET   running   12m18.8s
ed4b7c29  2433    2a85812f  stor-03-main  GET   running   12m18.8s
de12cfb5  2400    2a85812f  stor-03-main  GET   running   12m18.8s
8557c833  2315    2a85812f  stor-03-main  GET   running   12m18.8s
74dee93e  1501    2a85812f  stor-03-main  GET   running   12m18.8s
1bf54e4e  2446    2a85812f  stor-03-main  GET   running   12m18.8s
982ff74f  2448    2a85812f  stor-03-main  GET   running   12m18.8s
4a5539d9  2260    2a85812f  stor-03-main  GET   running   12m18.8s
ac20f9cd  2559    2a85812f  stor-03-main  GET   running   12m18.8s
c2a2c554  2439    2a85812f  stor-03-main  GET   running   12m18.8s
91c10ee7  2271    2a85812f  stor-03-main  GET   running   12m18.8s
c185006e  2491    2a85812f  stor-03-main  GET   running   12m18.8s
caa22c78  2346    2a85812f  stor-03-main  GET   running   12m18.8s
3ac92404  2467    2a85812f  stor-03-main  GET   running   12m18.8s
251c416d  2306    2a85812f  stor-03-main  GET   running   12m18.8s
94c9f009  2529    2a85812f  stor-03-main  GET   running   12m18.8s
37509a6d  1854    2a85812f  stor-03-main  GET   running   12m18.8s
f3a1b014  2367    2a85812f  stor-03-main  GET   running   12m18.8s
1e876dc4  2345    2a85812f  stor-03-main  GET   running   12m18.8s
e6511525  2384    2a85812f  stor-03-main  GET   running   12m18.8s
d8e625f3  2541    2a85812f  stor-03-main  GET   running   12m18.8s
90c8d5da  2221    2a85812f  stor-03-main  GET   running   12m18.8s
5d302540  2500    2a85812f  stor-03-main  GET   running   12m18.8s
3d246d81  2501    2a85812f  stor-03-main  GET   running   12m18.8s
3d316a48  2220    2a85812f  stor-03-main  GET   running   12m18.8s
cbd28d51  2425    2a85812f  stor-03-main  GET   running   12m18.8s
4daeead4  2506    2a85812f  stor-03-main  GET   running   12m18.8s
efff7669  2569    2a85812f  stor-03-main  GET   running   12m18.8s
e70284aa  2396    2a85812f  stor-03-main  GET   running   12m18.8s
2b3c2940  2461    2a85812f  stor-03-main  GET   running   12m18.8s
2ce25dc6  2377    2a85812f  stor-03-main  GET   running   12m18.8s
8b29a1b0  2285    2a85812f  stor-03-main  GET   running   12m18.8s
cf6b879b  2250    2a85812f  stor-03-main  GET   running   12m18.8s
1e5cacd0  2499    2a85812f  stor-03-main  GET   running   12m18.8s
46f37e31  2356    2a85812f  stor-03-main  GET   running   12m18.8s
08c8f126  2443    2a85812f  stor-03-main  GET   running   12m18.8s
c3573b12  2357    2a85812f  stor-03-main  GET   running   12m18.8s
551b3732  2323    2a85812f  stor-03-main  GET   running   12m18.8s
5d4ea150  2468    2a85812f  stor-03-main  GET   running   12m18.8s
79299c9b  2380    2a85812f  stor-03-main  GET   running   12m18.8s
6d6d7343  1865    2a85812f  stor-03-main  GET   running   12m18.8s
20285ab3  2242    2a85812f  stor-03-main  GET   running   12m18.8s
b994b46f  2216    2a85812f  stor-03-main  GET   running   12m18.8s
37d101ac  1629    2a85812f  stor-03-main  GET   running   12m18.8s
3895deb2  2563    2a85812f  stor-03-main  GET   running   12m18.8s
d6c47193  2616    2a85812f  stor-03-main  GET   running   12m18.8s
84f81904  2386    2a85812f  stor-03-main  GET   running   12m18.8s
71bfb916  2473    2a85812f  stor-03-main  GET   running   12m18.8s
913cc900  2382    2a85812f  stor-03-main  GET   running   12m18.8s
ca1164eb  2347    2a85812f  stor-03-main  GET   running   12m18.8s
d87d0fc3  2486    2a85812f  stor-03-main  GET   running   12m18.8s
72bc6334  2519    2a85812f  stor-03-main  GET   running   12m18.8s
7fb80b83  2428    2a85812f  stor-03-main  GET   running   12m18.8s
88764150  2472    2a85812f  stor-03-main  GET   running   12m18.8s
b5b1d277  2464    2a85812f  stor-03-main  GET   running   12m18.8s
59be7000  2255    2a85812f  stor-03-main  GET   running   12m18.8s
3bc753a1  2575    2a85812f  stor-03-main  GET   running   12m18.8s
a53b6053  2532    2a85812f  stor-03-main  GET   running   12m18.8s
71c629aa  2471    2a85812f  stor-03-main  GET   running   12m18.8s
60ce48a9  2470    2a85812f  stor-03-main  GET   running   12m18.8s
03ce7c56  2376    2a85812f  stor-03-main  GET   running   12m18.8s
b40c8baa  2373    2a85812f  stor-03-main  GET   running   12m18.8s
4d8c8e06  2414    2a85812f  stor-03-main  GET   running   12m18.8s
31e60cb0  2585    2a85812f  stor-03-main  GET   running   12m18.8s
263e7ff2  2462    2a85812f  stor-03-main  GET   running   12m18.8s
1d8ce985  2469    2a85812f  stor-03-main  GET   running   12m18.8s
0d397d8b  2381    2a85812f  stor-03-main  GET   running   12m18.8s
639db586  2406    2a85812f  stor-03-main  GET   running   12m18.8s
e12ae482  2493    2a85812f  stor-03-main  GET   running   12m18.8s
a5c4f02b  2290    2a85812f  stor-03-main  GET   running   12m18.8s
5d1b947d  2481    2a85812f  stor-03-main  GET   running   12m18.8s
6ca28fe8  2547    2a85812f  stor-03-main  GET   running   12m18.8s
328cd475  2514    2a85812f  stor-03-main  GET   running   12m18.8s
c1ba5744  2478    2a85812f  stor-03-main  GET   running   12m18.8s
5a4a991e  2510    2a85812f  stor-03-main  GET   running   12m18.8s
8e4cd073  2591    2a85812f  stor-03-main  GET   running   12m18.8s
6bccb697  2233    2a85812f  stor-03-main  GET   running   12m18.8s
06ceea65  2237    2a85812f  stor-03-main  GET   running   12m18.8s
670de3a5  2244    2a85812f  stor-03-main  GET   running   12m18.8s
3d0beaa5  2518    2a85812f  stor-03-main  GET   running   12m18.8s
f228f997  2375    2a85812f  stor-03-main  GET   running   12m18.8s
dc524835  2513    2a85812f  stor-03-main  GET   running   12m18.8s
6dc11eed  2474    2a85812f  stor-03-main  GET   running   12m18.8s
7ddab47d  2440    2a85812f  stor-03-main  GET   running   12m18.8s
85014b08  2410    2a85812f  stor-03-main  GET   running   12m18.8s
98388cec  2331    2a85812f  stor-03-main  GET   running   12m18.8s
3d30aa35  2498    2a85812f  stor-03-main  GET   running   12m18.8s
a5ee78a8  2450    2a85812f  stor-03-main  GET   running   12m18.8s
91cfb015  2379    2a85812f  stor-03-main  GET   running   12m18.8s
72370b1f  2451    2a85812f  stor-03-main  GET   running   12m18.8s

The fetch throttling seems to keeps it down to just 5 transfers, but it would be much more efficient if the other machines would pull this data in, too...

The "assigned" bit in the scheduler is a bit hasty IMHO. Would it be possible to "recalculate" the "assigned" jobs every once in a while? That would probably fix the issue (as I think the selection here was made because of available diskspace).

This happened after restarting the miner by the way

@RobQuistNL
Copy link
Contributor

They also all end up in the same storage pool (there's 5 per storage machine) so there's probably some selection happening for the entire loop instead of per sector

@RobQuistNL
Copy link
Contributor

Also wondering;

We could simply run the scheduling algorithm for each task in the queue separately, but this is unfortunately way too slow, so we have to do scheduling in batches, at least if we want to avoid rewriting it in a bigger way.

How is this too slow? I'm fine with the scheduler taking 200ms more to schedule properly - or does it need to refresh all the workers' stats or something?

@rwxr-xr-x
Copy link

rwxr-xr-x commented May 9, 2022

Still not fixed properly in 1.15.2. Sheduling becomes much more accurate but not completely fixed. Still facing situations when some workers idle while another ones with queues with prepared/assigned (not as often as before but still).

@RobQuistNL
Copy link
Contributor

Will post here too because its still not working.

I have PC2 machines available, but the scheduler throws a PC2 job in "prepared" if they happen at the same time.

I run 2 pledges at once, PC1 finishes pretty much at the same time, and then;

88c9ce67  915     8d7a5f9b  pc2-04-pc2-2  PC2   running   13m51.1s
00000000  913     8d7a5f9b  pc2-04-pc2-2  PC2   prepared  13m51.1s

Makes no sense, because there's about 20 other PC2 workers available which are doing nothing.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

5 participants