VirtualBox

Ignore:
Timestamp:
Jan 26, 2019 2:09:25 PM (6 years ago)
Author:
vboxsync
Message:

FsPerf: Continue mmap on failure. Fixed div by zero in I/O perf if oe iteration takes longer than specified test interval. Allow selecting read/write perf and tests separately as the test are expensive. bugref:9172

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/ValidationKit/utils/fs/FsPerf.cpp

    r76999 r77002  
    257257    kCmdOpt_ChSize,
    258258    kCmdOpt_NoChSize,
    259     kCmdOpt_Read,
    260     kCmdOpt_NoRead,
    261     kCmdOpt_Write,
    262     kCmdOpt_NoWrite,
     259    kCmdOpt_ReadPerf,
     260    kCmdOpt_NoReadPerf,
     261    kCmdOpt_ReadTests,
     262    kCmdOpt_NoReadTests,
     263    kCmdOpt_WritePerf,
     264    kCmdOpt_NoWritePerf,
     265    kCmdOpt_WriteTests,
     266    kCmdOpt_NoWriteTests,
    263267    kCmdOpt_Seek,
    264268    kCmdOpt_NoSeek,
     
    331335    { "--chsize",           kCmdOpt_ChSize,         RTGETOPT_REQ_NOTHING },
    332336    { "--no-chsize",        kCmdOpt_NoChSize,       RTGETOPT_REQ_NOTHING },
    333     { "--read",             kCmdOpt_Read,           RTGETOPT_REQ_NOTHING },
    334     { "--no-read",          kCmdOpt_NoRead,         RTGETOPT_REQ_NOTHING },
    335     { "--write",            kCmdOpt_Write,          RTGETOPT_REQ_NOTHING },
    336     { "--no-write",         kCmdOpt_NoWrite,        RTGETOPT_REQ_NOTHING },
     337    { "--read-tests",       kCmdOpt_ReadTests,      RTGETOPT_REQ_NOTHING },
     338    { "--no-read-tests",    kCmdOpt_NoReadTests,    RTGETOPT_REQ_NOTHING },
     339    { "--read-perf",        kCmdOpt_ReadPerf,       RTGETOPT_REQ_NOTHING },
     340    { "--no-read-perf",     kCmdOpt_NoReadPerf,     RTGETOPT_REQ_NOTHING },
     341    { "--write-tests",      kCmdOpt_WriteTests,     RTGETOPT_REQ_NOTHING },
     342    { "--no-write-tests",   kCmdOpt_NoWriteTests,   RTGETOPT_REQ_NOTHING },
     343    { "--write-perf",       kCmdOpt_WritePerf,      RTGETOPT_REQ_NOTHING },
     344    { "--no-write-perf",    kCmdOpt_NoWritePerf,    RTGETOPT_REQ_NOTHING },
    337345    { "--seek",             kCmdOpt_Seek,           RTGETOPT_REQ_NOTHING },
    338346    { "--no-seek",          kCmdOpt_NoSeek,         RTGETOPT_REQ_NOTHING },
     
    388396static bool         g_fRm        = true;
    389397static bool         g_fChSize    = true;
    390 static bool         g_fRead      = true;
    391 static bool         g_fWrite     = true;
     398static bool         g_fReadTests = true;
     399static bool         g_fReadPerf  = true;
     400static bool         g_fWriteTests= true;
     401static bool         g_fWritePerf = true;
    392402static bool         g_fSeek      = true;
    393403static bool         g_fFSync     = true;
     
    16921702            ns -= g_nsPerNanoTSCall; \
    16931703        uint64_t cIterations = g_nsTestRun / ns; \
     1704        if (cIterations < 2) \
     1705            cIterations = 2; \
     1706        else if (cIterations & 1) \
     1707            cIterations++; \
    16941708        \
    16951709        /* Do the actual profiling: */ \
     
    22442258            if (cbMapping <= _2M)
    22452259            {
    2246                 RTTestIFailed("%u: CreateFileMapping or MapViewOfFile failed: %u, %u", enmState, dwErr1, dwErr2);
    2247                 return;
     2260                RTTestIFailed("%u/%s: CreateFileMapping or MapViewOfFile failed: %u, %u",
     2261                              enmState, s_apszStates[enmState], dwErr1, dwErr2);
     2262                break;
    22482263            }
    22492264        }
     
    22572272            if ((void *)pbMapping != MAP_FAILED)
    22582273                break;
    2259             RTTESTI_CHECK_MSG_RETV(cbMapping > _2M, ("errno=%d", errno));
     2274            if (cbMapping <= _2M)
     2275            {
     2276                RTTestIFailed("%u/%s: mmap failed: %s (%u)", enmState, s_apszStates[enmState], strerror(errno), errno);
     2277                break;
     2278            }
    22602279        }
    22612280# endif
     2281        if (cbMapping <= _2M)
     2282            continue;
    22622283
    22632284        /*
     
    24392460        if (g_fSeek)
    24402461            fsPerfIoSeek(hFile1, cbFile);
    2441         if (g_fRead)
    2442         {
     2462
     2463        if (g_fReadTests)
    24432464            fsPerfRead(hFile1, hFileNoCache, cbFile);
     2465        if (g_fReadPerf)
    24442466            for (unsigned i = 0; i < g_cIoBlocks; i++)
    24452467                fsPerfIoReadBlockSize(hFile1, cbFile, g_acbIoBlocks[i]);
    2446         }
     2468
    24472469        if (g_fMMap)
    24482470            fsPerfMMap(hFile1, hFileNoCache, cbFile);
    2449         if (g_fWrite)
    2450         {
    2451             /* This is destructive to the file content. */
     2471
     2472        /* This is destructive to the file content. */
     2473        if (g_fWriteTests)
    24522474            fsPerfWrite(hFile1, hFileNoCache, hFileWriteThru, cbFile);
     2475        if (g_fWritePerf)
    24532476            for (unsigned i = 0; i < g_cIoBlocks; i++)
    24542477                fsPerfIoWriteBlockSize(hFile1, cbFile, g_acbIoBlocks[i]);
    2455         }
     2478
    24562479        if (g_fFSync)
    24572480            fsPerfFSync(hFile1, cbFile);
     
    26182641                g_fRm        = true;
    26192642                g_fChSize    = true;
    2620                 g_fRead      = true;
    2621                 g_fWrite     = true;
     2643                g_fReadTests = true;
     2644                g_fReadPerf  = true;
     2645                g_fWriteTests= true;
     2646                g_fWritePerf = true;
    26222647                g_fSeek      = true;
    26232648                g_fFSync     = true;
     
    26402665                g_fRm        = false;
    26412666                g_fChSize    = false;
    2642                 g_fRead      = false;
    2643                 g_fWrite     = false;
     2667                g_fReadTests = false;
     2668                g_fReadPerf  = false;
     2669                g_fWriteTests= false;
     2670                g_fWritePerf = false;
    26442671                g_fSeek      = false;
    26452672                g_fFSync     = false;
     
    26632690            CASE_OPT(Rm);
    26642691            CASE_OPT(ChSize);
    2665             CASE_OPT(Read);
    2666             CASE_OPT(Write);
     2692            CASE_OPT(ReadTests);
     2693            CASE_OPT(ReadPerf);
     2694            CASE_OPT(WriteTests);
     2695            CASE_OPT(WritePerf);
    26672696            CASE_OPT(Seek);
    26682697            CASE_OPT(FSync);
     
    28182847                if (g_fChSize)
    28192848                    fsPerfChSize();
    2820                 if (g_fRead || g_fWrite || g_fSeek || g_fFSync || g_fMMap)
     2849                if (g_fReadPerf || g_fReadTests || g_fWritePerf || g_fWriteTests || g_fSeek || g_fFSync || g_fMMap)
    28212850                    fsPerfIo();
    28222851            }
Note: See TracChangeset for help on using the changeset viewer.

© 2024 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette