async def METHOD_NAME(self, ds):
    executor = self.state.executor_state.get_executor()
    log.info("starting warmup")
    t0 = time.time()
    # first: make sure the jited functions used for I/O are compiled
    # by running a single-core workload on each host:
    await executor.run_each_host(functools.partial(prime_numba_cache, ds=ds))
    t1 = time.time()
    # second: make sure each worker *process* has the jited functions
    # loaded from the cache
    # XXX doesn't seem to be needed actually!
    # await executor.run_each_worker(functools.partial(prime_numba_cache, ds=ds))
    # t2 = time.time()
    log.info("warmup done, took %.3fs", (t1 - t0))