По-рано разгледах основите на показателите и тестването на подсистемата за съхранение в статията си Анализиране на производителността на I/O подсистемата за SQL Server, включително въвеждането на CrystalDiskMark 4.0. CrystalDiskMark наскоро беше пренаписан, за да използва Microsoft DiskSpd за своето тестване, което го прави още по-ценен инструмент за вашите първоначални усилия за тестване на подсистемата за съхранение. DiskSpd предоставя функционалността, необходима за генериране на голямо разнообразие от модели на заявки за диск, които могат да бъдат много полезни при диагностика и анализ на проблеми с производителността на входно/изходни данни с много по-голяма гъвкавост от по-старите инструменти за сравнителен анализ като SQLIO. Той е изключително полезен за тестване на синтетична подсистема за съхранение, когато искате по-високо ниво на контрол от това, налично в CrystalDiskMark.
Сега ще се потопим малко по-дълбоко в това как всъщност да използвате Microsoft DiskSpd, за да тествате подсистемата си за съхранение, без да използвате CrystalDiskMark 4.0. За да направите това, ще трябва да изтеглите и разархивирате DiskSpd. За да улесня нещата, винаги копирам желания изпълним файл diskspd.exe от съответната изпълнима папка (amd64fre, armfre или x86fre) на кратък, прост път като C:\DiskSpd
. В повечето случаи ще искате 64-битовата версия на DiskSpd от папката amd64fre.
След като имате наличен изпълним файл diskspd.exe, ще трябва да отворите команден ред с права на администратор (като изберете „Изпълни като администратор“) и след това да отидете до директорията, където сте копирали файла diskspd.exe.
Ето някои от параметрите на командния ред, с които ще искате да започнете:
Параметър | Описание |
-b | Размер на блока на I/O, посочен като (K/M/G). Например –b8K означава размер на блок от 8KB, който е от значение за SQL Server |
-d | Продължителност на теста в секунди. Тестовете от 30-60 секунди обикновено са достатъчно дълги, за да се получат валидни резултати |
-o | Изключителни I/Os (което означава дълбочина на опашката) на цел, на работна нишка |
-t | Работни нишки за цел на тестов файл |
-h | Деактивирайте софтуерното кеширане на ниво операционна система и хардуерното кеширане на запис, което е добра идея за тестване на SQL Server |
-r | Случаен или последователен флаг. Ако се използва –r, се правят произволни тестове, в противен случай се правят последователни тестове |
-w | Процент на запис. Например –w25 означава 25% запис, 75% четене |
-Z | Размер на буфера на източника за запис на тест за работно натоварване, посочен като (K/M/G). Използва се за предоставяне на произволни данни за запис, което е добра идея за тестване на SQL Server |
-L | Улавяйте информация за забавяне по време на теста, което е много добра идея за тестване на SQL Server |
-c | Създава файл(ове) за натоварване с посочения размер, посочен като (K/M/G) |
Таблица 1:Основни параметри на командния ред за DiskSpd
Вие също ще искате да посочите местоположението на тестовия файл и името на файла за резултатите в края на реда. Ето примерен команден ред:
diskspd –b8K –d30 –o4 –t8 –h –r –w25 –L –Z1G –c20G T:\iotest.dat> DiskSpeedResults.txtТози примерен команден ред ще изпълни 30-секунден произволен I/O тест, използвайки 20GB тестов файл, разположен на T:устройството, с 25% съотношение на запис и 75% за четене, с размер на блока 8K. Той ще използва осем работни нишки, всяка с четири изключителни I/O и начална стойност на ентропията на запис от 1 GB. Той ще запази резултатите от теста в текстов файл, наречен DiskSpeedResults.txt. Това е доста добър набор от параметри за работно натоварване на SQL Server OLTP.
Фигура 1:Примерен команден ред за DiskSpd
Изпълнението на теста започва с време за загряване по подразбиране от пет секунди (преди действително да започнат каквито и да е измервания), а след това действителният тест ще се проведе за определената продължителност в секунди с време за охлаждане по подразбиране от нула секунди. Когато тестът приключи, DiskSpd ще предостави описание на теста и подробните резултати. По подразбиране това ще бъде просто текстово резюме в текстов файл, използващ името на файла, което сте посочили, който ще бъде в същата директория като изпълнимия файл diskspd.
Ето как изглеждат резултатите за този конкретен тест на моята работна станция.
Фигура 2:Примерни резултати от теста DiskSpd
Първият раздел от резултатите ви дава точния команден ред, който е бил използван за теста, след което посочва всички входни параметри, които са били използвани за тестовото изпълнение (които включват стойностите по подразбиране, които може да не са били посочени в действителния команден ред ). След това резултатите от теста се показват, започвайки с действителното време на тестване, броя на нишките и броя на логическия процесор. Разделът CPU показва използването на CPU за всеки логически процесор, включително времето на потребителя и ядрото, за интервала на тестване.
Следва по-интересната част от резултатите от теста. Получавате общия брой байтове, общия I/Os, MB/секунда, I/O в секунда (IOPS) и средната си латентност в милисекунди. Тези резултати са разбити за всяка нишка (четири в нашия случай), с отделни секции в резултатите за Total IO, Read IO и Write IO. Резултатите за всяка нишка трябва да са много сходни в повечето случаи. Вместо първоначално да се фокусирам върху абсолютните стойности за всяко измерване, обичам да сравнявам стойностите, когато стартирам един и същ тест на различни логически устройства (след промяна на местоположението на тестовия файл в командния ред), което ви позволява да сравнявате производителността за всяко логическо устройство.
Последната част от резултатите от теста е още по-интересна. Той показва анализ на проценти на разпределението на резултатите от теста за латентност, започвайки от минималната стойност в милисекунди до максималната стойност в милисекунди, разбит за четене, запис и обща латентност. „Деветките“ в колоната %-ile се отнасят за броя на деветките, където 3-деветки означава 99,9, 4-деветки означава 99,99 и т.н. Причината, поради която стойностите за по-високите персентилни редове са едни и същи е, защото този тест е относително малък брой общи операции. Ако искате да характеризирате точно по-високите процентили, ще трябва да изпълните по-дълъг тест, който генерира по-голям брой отделни I/O операции.
Това, което искате да търсите в тези резултати, е точката, в която стойностите правят голям скок. Например, в този тест можем да видим, че 99% от четенията са имали латентност от 1,832 милисекунди или по-малко.
Фигура 3:Разпределение на резултатите от забавянето
Както можете да видите, стартирането на DiskSpd всъщност е доста просто, след като разберете какво означават основните параметри и как се използват. Можете не само да стартирате DiskSpd от старомоден команден ред, но и да го стартирате с PowerShell. DiskSpd също ви дава много по-подробна информация, отколкото получавате от SQLIO. По-сложната част от използването на DiskSpd е анализирането и тълкуването на резултатите, което ще разгледам в следваща статия.