In my view
it occurs
* every 3 second
* during log switch
depending on parameter value
like 1. Fast_start _mttr_target.
2. Fast_start_io_target etc.
* database writer write all dirty buffer generated after the last checkpoint.
* checkpoint write to only control file except log switch.
* during log switch checkpoint write to both control file and data file header.