I ran some numbers and I think it would make sense to be smarter about component build scheduling, building the largest components first and filling the available queues (koji biulders / local threads) with the small ones.
I recorded the local build times for all the Base Runtime components and compared the best v. the worst case scheduling scenarios for various number of build queues. The average time saved was around 20% (nearly 40% in the very best case). Of course the results depend on the packages you're building, the number of components, the number of queues and your hardware specs but it's always going to be non-zero.
A few more notes:
The sample Base Runtime component local build times and the script to calculate the best vs. the worst case differences:
Note this is a build time optimization thing and generally a low priority.
Koji has a getAverageBuildDuration(package_name) method in the API. It's used to estimate the completion time of the current build, and to dynamically assign a "weight" to tasks. Might be useful here.
I checked the numbers from our yesterday's local bootstrap build:
That's for the bootstrap package set, built in 72 threads (our typical configuration). Now that's more interesting :)
Metadata Update from @mprahl: - Issue assigned to mprahl
PR #750 addresses this
Metadata Update from @mprahl: - Issue status updated to: Closed (was: Open)
This issue has been migrated to Fedora Forge: https://forge.fedoraproject.org/koji/mbs/issues/436
Please continue any further discussion there.