Order downloads by descending max_size
When downloading in parallel, sort by package size so that the larger packages are queued first to fully leverage parallelism. Addresses FS#70172 Signed-off-by: Charlie Sale <softwaresale01@gmail.com> Signed-off-by: Allan McRae <allan@archlinux.org>
This commit is contained in:
parent
f951282bec
commit
efb714b31c
1 changed files with 17 additions and 0 deletions
|
@ -847,6 +847,19 @@ cleanup:
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Use to sort payloads by max size in decending order (largest -> smallest)
|
||||||
|
*/
|
||||||
|
static int compare_dload_payload_sizes(const void *left_ptr, const void *right_ptr)
|
||||||
|
{
|
||||||
|
struct dload_payload *left, *right;
|
||||||
|
|
||||||
|
left = (struct dload_payload *) left_ptr;
|
||||||
|
right = (struct dload_payload *) right_ptr;
|
||||||
|
|
||||||
|
return right->max_size - left->max_size;
|
||||||
|
}
|
||||||
|
|
||||||
/* Returns -1 if an error happened for a required file
|
/* Returns -1 if an error happened for a required file
|
||||||
* Returns 0 if a payload was actually downloaded
|
* Returns 0 if a payload was actually downloaded
|
||||||
* Returns 1 if no files were downloaded and all errors were non-fatal
|
* Returns 1 if no files were downloaded and all errors were non-fatal
|
||||||
|
@ -860,6 +873,10 @@ static int curl_download_internal(alpm_handle_t *handle,
|
||||||
int max_streams = handle->parallel_downloads;
|
int max_streams = handle->parallel_downloads;
|
||||||
int updated = 0; /* was a file actually updated */
|
int updated = 0; /* was a file actually updated */
|
||||||
CURLM *curlm = handle->curlm;
|
CURLM *curlm = handle->curlm;
|
||||||
|
size_t payloads_size = alpm_list_count(payloads);
|
||||||
|
|
||||||
|
/* Sort payloads by package size */
|
||||||
|
payloads = alpm_list_msort(payloads, payloads_size, &compare_dload_payload_sizes);
|
||||||
|
|
||||||
while(active_downloads_num > 0 || payloads) {
|
while(active_downloads_num > 0 || payloads) {
|
||||||
CURLMcode mc;
|
CURLMcode mc;
|
||||||
|
|
Loading…
Add table
Reference in a new issue