[Skiboot] [RFC v2 PATCH 2/6] fast-reboot: parallel memory clearing
Stewart Smith
stewart at linux.ibm.com
Tue Jul 17 14:08:24 AEST 2018
Nicholas Piggin <npiggin at gmail.com> writes:
> On Thu, 28 Jun 2018 12:54:57 +1000
> Stewart Smith <stewart at linux.ibm.com> wrote:
>
>> Arbitrarily pick 16GB as the unit of parallelism, and
>> split up clearing memory into jobs and schedule them
>> node-local to the memory (or on node 0 if we can't
>> work that out because it's the memory up to SKIBOOT_BASE)
>>
>> This seems to cut at least ~40% time from memory zeroing on
>> fast-reboot on a 256GB Boston system.
>>
>> Signed-off-by: Stewart Smith <stewart at linux.ibm.com>
>
> [...]
>
>> + while(l > MEM_REGION_CLEAR_JOB_SIZE) {
>> + job_args[i].s = s+l - MEM_REGION_CLEAR_JOB_SIZE;
>> + job_args[i].e = s+l;
>> + l-=MEM_REGION_CLEAR_JOB_SIZE;
>> + job_args[i].job_name = malloc(sizeof(char)*100);
>> + total+=MEM_REGION_CLEAR_JOB_SIZE;
>> + chip_id = __dt_get_chip_id(r->node);
>> + if (chip_id == -1)
>> + chip_id = 0;
>> + path = dt_get_path(r->node);
>> + snprintf(job_args[i].job_name, 100,
>> + "clear %s, %s 0x%"PRIx64" len: %"PRIx64" on %d",
>> + r->name, path,
>> + job_args[i].s,
>> + (job_args[i].e - job_args[i].s),
>> + chip_id);
>> + free(path);
>> + printf("job: %s\n", job_args[i].job_name);
>> + jobs[i] = cpu_queue_job_on_node(chip_id,
>> + job_args[i].job_name,
>> + mem_region_clear_job,
>> + &job_args[i]);
>
> Ahh, the API will return NULL if it can't be scheduled on the requested
> node it will return. So you'll want to re-run cpu_queue_job() in that
> case to ensure it runs.
Ahh yep, good point. Fixed in next revision.
--
Stewart Smith
OPAL Architect, IBM.
More information about the Skiboot
mailing list