tst: fsbench: OptEmptyCacheDrive, OptOpenCount

This commit is contained in:
Bill Zissimopoulos 2022-06-02 13:10:31 +01:00
parent 69257949ac
commit b0cfdc0396

View File

@ -24,7 +24,9 @@
#include <tlib/testsuite.h>
static BOOLEAN OptEmptyCache = FALSE;
static CHAR OptEmptyCacheDrive = 0;
static ULONG OptFileCount = 1000;
static ULONG OptOpenCount = 10;
static ULONG OptListCount = 100;
static ULONG OptRdwrFileSize = 4096 * 1024;
static ULONG OptRdwrCcCount = 100;
@ -32,43 +34,44 @@ static ULONG OptRdwrNcCount = 100;
static ULONG OptMmapFileSize = 4096 * 1024;
static ULONG OptMmapCount = 100;
static void file_create_dotest(ULONG CreateDisposition)
static void file_create_dotest(ULONG CreateDisposition, ULONG OpenCount)
{
HANDLE Handle;
BOOL Success;
WCHAR FileName[MAX_PATH];
for (ULONG Index = 0; OptFileCount > Index; Index++)
{
StringCbPrintfW(FileName, sizeof FileName, L"fsbench-file%lu", Index);
Handle = CreateFileW(FileName,
GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ | FILE_SHARE_WRITE,
0,
CreateDisposition, FILE_ATTRIBUTE_NORMAL,
0);
ASSERT(INVALID_HANDLE_VALUE != Handle);
Success = CloseHandle(Handle);
ASSERT(Success);
}
for (ULONG OpenIndex = 0; OpenCount > OpenIndex; OpenIndex++)
for (ULONG Index = 0; OptFileCount > Index; Index++)
{
StringCbPrintfW(FileName, sizeof FileName, L"fsbench-file%lu", Index);
Handle = CreateFileW(FileName,
GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ | FILE_SHARE_WRITE,
0,
CreateDisposition, FILE_ATTRIBUTE_NORMAL,
0);
ASSERT(INVALID_HANDLE_VALUE != Handle);
Success = CloseHandle(Handle);
ASSERT(Success);
}
}
static void file_create_test(void)
{
file_create_dotest(CREATE_NEW);
file_create_dotest(CREATE_NEW, 1);
}
static void file_open_test(void)
{
file_create_dotest(OPEN_EXISTING);
file_create_dotest(OPEN_EXISTING, OptOpenCount);
}
static void file_overwrite_test(void)
{
file_create_dotest(CREATE_ALWAYS);
file_create_dotest(CREATE_ALWAYS, 1);
}
static void file_attr_test(void)
{
WCHAR FileName[MAX_PATH];
DWORD FileAttributes;
for (ULONG ListIndex = 0; OptListCount > ListIndex; ListIndex++)
for (ULONG OpenIndex = 0; OptOpenCount > OpenIndex; OpenIndex++)
for (ULONG Index = 0; OptFileCount > Index; Index++)
{
StringCbPrintfW(FileName, sizeof FileName, L"fsbench-file%lu", Index);
@ -418,6 +421,17 @@ static void EmptyCache(const char *name, void (*fn)(void), int v)
ASSERT(0 == NtSetSystemInformation(80 /*SystemMemoryListInformation*/, &Command, sizeof Command));
Command = 4 /*MemoryPurgeStandbyList*/;
ASSERT(0 == NtSetSystemInformation(80 /*SystemMemoryListInformation*/, &Command, sizeof Command));
/* optionally invalidate the volume cache; see https://stackoverflow.com/a/7701908/568557 */
if (OptEmptyCacheDrive)
{
WCHAR VolumeNameBuf[] = L"\\\\.\\X:";
HANDLE VolumeHandle;
VolumeNameBuf[4] = OptEmptyCacheDrive;
VolumeHandle = CreateFileW(VolumeNameBuf, FILE_READ_DATA, FILE_SHARE_READ, 0, OPEN_EXISTING, 0, 0);
if (INVALID_HANDLE_VALUE != VolumeHandle)
CloseHandle(VolumeHandle);
}
}
else
if (-1 == v) /* teardown */
@ -478,11 +492,22 @@ int main(int argc, char *argv[])
OptEmptyCache = TRUE;
rmarg(argv, argc, argi);
}
else if (0 == strncmp("--empty-cache=", a, sizeof "--empty-cache=" - 1))
{
OptEmptyCache = TRUE;
OptEmptyCacheDrive = *(a + sizeof "--empty-cache=" - 1);
rmarg(argv, argc, argi);
}
else if (0 == strncmp("--files=", a, sizeof "--files=" - 1))
{
OptFileCount = strtoul(a + sizeof "--files=" - 1, 0, 10);
rmarg(argv, argc, argi);
}
else if (0 == strncmp("--open=", a, sizeof "--open=" - 1))
{
OptOpenCount = strtoul(a + sizeof "--open=" - 1, 0, 10);
rmarg(argv, argc, argi);
}
else if (0 == strncmp("--list=", a, sizeof "--list=" - 1))
{
OptListCount = strtoul(a + sizeof "--list=" - 1, 0, 10);