/**
 *******************************************************************************
 * \brief
 ******************************************************************************/
TEST(FVT_KV_GOOD_PATH, SYNC_ASYNC_MAGNUS_DIFFICULTUS)
{
    uint32_t num_ctxt = 20;
    uint32_t ops      = 50;
    uint32_t vlen     = KV_64K;
    uint32_t LEN      = 5;
    uint32_t secs     = 10;

    TESTCASE_SKIP_IF_FILE;

#ifdef _AIX
    if (dev == NULL)
    {
        printf("NOT_EXECUTED for memory on AIX\n");
        return;
    }
#endif

    printf("init async %dctxt/%djobs\n", num_ctxt, ops);
    kv_async_init_ctxt_io(num_ctxt, ops, 16, vlen, LEN, secs);

    printf("start async jobs\n");
    kv_async_start_jobs();

    printf("start %dctxt/%dpth sync jobs\n", num_ctxt, ops);
    Sync_ark_io ark_io_job;
    ark_io_job.run_multi_arks(num_ctxt, ops, vlen, secs);

    printf("wait for async jobs\n");
    kv_async_wait_jobs();
}
示例#2
0
int main(int argc, char **argv)
{
    async_CB_t *pCB  = NULL;
    uint32_t    i    = 1;
    uint32_t    ctxt = 0;

    if (1 == argc)
    {
        printf("usage: run_kv_async_multi [-p] <dev1> <dev2> ...\n");
        printf("   ex: run_kv_async_multi /dev/cxl/afu0.0s /dev/cxl/afu1.0s\n");
        printf("   ex: run_kv_async_multi /dev/sdb /dev/sdh /dev/sdq\n");
        printf("   ex: run_kv_async_multi -p /dev/sg4 /dev/sg8\n");
        exit(0);
    }
    bzero(pCTs, sizeof(pCTs));

    if (0 == strncmp(argv[1], "-p", 7))
    {
        printf("Attempting to run with physical lun\n");
        ark_create_flag       = ARK_KV_PERSIST_STORE;
        KV_ASYNC_CTXT_PER_DEV = 1;
        i                     = 2;
    }
    else
    {
        //KV_ASYNC_CTXT_PER_DEV  = 1;
        KV_ASYNC_CTXT_PER_DEV  = 4;
        KV_ASYNC_JOBS_PER_CTXT = 60;
    }

    while (argv[i] != NULL && KV_ASYNC_CONTEXTS <= KV_ASYNC_MAX_CONTEXTS)
    {
        kv_async_init_io(argv[i++],
                        KV_ASYNC_JOBS_PER_CTXT,
                        KV_ASYNC_KLEN,
                        KV_ASYNC_VLEN,
                        KV_ASYNC_NUM_KV);
        KV_ASYNC_CONTEXTS += KV_ASYNC_CTXT_PER_DEV;
    }
    start = time(0);

    /* start all jobs for all contexts */
    for (ctxt=0; ctxt<KV_ASYNC_CONTEXTS; ctxt++)
    {
        for (pCB=pCTs[ctxt].pCBs;
             pCB<pCTs[ctxt].pCBs+KV_ASYNC_JOBS_PER_CTXT;
             pCB++)
        {
            pCB->flags |=  KV_ASYNC_RUNNING;
            kv_async_SET_KEY(pCB);
        }
    }
    kv_async_wait_jobs();

    return 0;
}
/**
 *******************************************************************************
 * \brief
 ******************************************************************************/
TEST(FVT_KV_GOOD_PATH, SYNC_ASYNC_EASY)
{
    uint32_t klen   = 256;
    uint32_t vlen   = KV_64K;
    uint32_t LEN    = 20;
    uint32_t secs   = 5;

    kv_async_init_ctxt(ASYNC_SINGLE_CONTEXT, secs);
    kv_async_init_job_easy(ASYNC_SINGLE_CONTEXT);

    printf("start async jobs\n");
    kv_async_start_jobs();

    printf("start sync job\n");
    fvt_kv_utils_SGD_LOOP(kv_async_get_ark(ASYNC_SINGLE_CONTEXT),
                          kv_db_create_fixed, klen, vlen, LEN, secs);

    printf("wait for async jobs\n");
    kv_async_wait_jobs();
}
/**
 *******************************************************************************
 * \brief
 ******************************************************************************/
TEST(FVT_KV_GOOD_PATH, SYNC_ASYNC_NPOOL_4)
{
    uint32_t num_ctxt = 1;
    uint32_t ops      = 20;
    uint32_t npool    = 4;
    uint32_t klen     = 16;
    uint32_t vlen     = 128;
    uint32_t LEN      = 500;
    uint32_t secs     = 15;

    kv_async_init_perf_io(num_ctxt, ops, npool, klen, vlen, LEN, secs);
    kv_async_start_jobs();

    printf("\n"); fflush(stdout);

    Sync_ark_io ark_io_job;
    ark_io_job.run_multi_arks(num_ctxt, ops, vlen, secs);

    printf("ASYNC: ");

    kv_async_wait_jobs();
}