Я пытаюсь вручную проверить скорость чтения и записи SSD через NVMe. Текущий метод, который я использую, это монтировать файловую систему на SSD и читать / записывать 20 ГБ в файл в этой файловой системе с размерами блоков 4 КБ, 32 КБ, 128 КБ, 215 КБ, 1 МБ, 64 МБ, 256 МБ и 1 ГБ во время записи. время начала чтения / записи и время завершения. Этот процесс вызывается из скрипта bash. Сценарий bash попытается запустить несколько "приложений", вызывая указанную ниже функцию n раз, каждый раз запуская процесс в фоновом режиме.
while [ $instCnt -le $appInstances ]
do
fsrw -w $blocksize /fsmnt/fs${instCnt}/usernumber1/j.j &
Вот функция чтения из исполняемого файла fsrw
bool perform_readop ()
{
// File descriptor.
int32_t fd = -1;
// Function status.
bool status = false;
//Zero read count
int zero_reads = 0;
// Open the file.
fd = open (fname.c_str (), O_RDONLY);
// Verify the file has been opened.
if (fd == -1)
{
cout << get_datetime_string() << "Read open of " << fname << " failed. Errno: "
<< errno << endl;
}
else
{
// Total bytes read.
uint64_t rd = 0;
// Elapsed time.
struct timeval tv = { 0 };
get_elapsed_time (&tv);
// Notify the user that the read test has started.
cout << get_datetime_string() << "Starting read" << endl;
while(rd < READ_LIMIT && zero_reads < 10) {
// Run until it is time for the test to stop.
ssize_t readsize = read (fd, &buf[0], blocksize);
if (readsize == -1)
{
cout << get_datetime_string << "Read failure. Errno: " << errno << endl;
zero_reads = 10;
}
else if (readsize == 0)
{
cout << get_datetime_string << "Reached EOF." << endl;
zero_reads++;
}
else
{
rd += readsize;
}
}
// Get the elapsed time.
get_elapsed_time (&tv);
// Report the number of bytes read.
cout << get_datetime_string() << "Read " << rd << " bytes in " << tv.tv_sec << "."
<< tv.tv_usec << " seconds, bytes per second " << bytes_per_second (&tv, rd) << endl;
// Close the file.
close (fd);
// Set the function return status when all read operations have
// been successful.
if (zero_reads < 10)
{
status = true;
}
}
return status;
}
Я перенес этот метод из работы, ранее проделанной другими, и я действительно не уверен, является ли это допустимым методом проверки пропускной способности к SSD. Результаты теста, особенно для операции чтения, не являются реалистичными; они намного выше, чем ожидалось. Fio предполагает, что пропускная способность для чтения и записи должна составлять около 500 МБ / с, но в этом тесте скорость записи составляет 1 ГБ +/ с, а скорость чтения - около 8 ГБ / с.