De verminderde seek distance heeft dus veel minder impact op de performance dan je zou verwachten en de rotational delay zou het probleem hier zijn.
Ik heb echter wel gebencht met 7200 RPM disks en daar 100+ IOPS uit weten te halen met kleine partities of test file sizes, ik moet dat nog eens opzoeken, maar hoe dat zich in een array verhoudt...
Wat uit jouw test blijkt is dat de striping goed werkt en in jouw geval maakt het niet uit, omdat:
1) je request size is altijd lager dan de stripesize. Dat heeft tot gevolg dat een I/O request door maximaal één hardeschijf wordt afgehandeld. Dit is belangrijk, want als je stripesize kleiner wordt dan de request size, gaan meerdere hardeschijven één I/O request afhandelen. Dit is voor hardeschijven minder gunstig omdat je vooral seeks wilt beperken. Als je een random read hebt, wil je dat één hardeschijf zich hiermee bemoeit. De overige x schijven blijven dan beschikbaar voor overige I/O requests. Elke schijf handelt dus individueel één request af; dat geeft de beste prestaties bij striping en random I/O.

2) jouw reads aligned zijn op 4K boundaries, als dat niet zo was, had je ook bij huidige stripesizes verschil kunnen zien, omdat bij kleinere stripesizes er boundary crossings voorkomen; een 4K request kan dan wel een boundary van een 128K stripesize overschrijden (126K-130K dus twee stripes). Als dat gebeurt, kost je dat prestaties omdat je nu 2 disks naar eenzelfde locatie laat seeken ipv 1 disk. Daardoor zijn er minder disks beschikbaar voor overige read requests.
Dat zal zeker verklaren waarom ik geen verschil zie.
Doe je test nog eens en gebruik kleinere stripesizes:
- 512-byte, 4K, 16K, 32K, 64K, 128K, 1M, 16M
Ik heb al eerder een 4K 64K en 128K chunk getest in een 6 disk RAID 10 (zelfde disks).
Ook hier geen verschil, maar ook hier is de request size 4K.
Pak dan ook een grotere request size, zoals 16K en kijk welk effect dit heeft. Beter is om een mix te gebruiken van request sizes tussen 4K en 128K. Dit is ook gebruikt in de test op submesa.com en zo zou je jouw benchmarkresultaten kunnen koppelen aan de resultaten van Jason.
Je zult dan zien dat de stripesize dan wel de resultaten gaat beïnvloeden. Dat komt omdat je dan niet langer alle disken kunt laten werken aan één I/O request, maar dat twee of zelfs meer schijven bezig zijn met één request en dat zal de resultaten beperken.
MySQL werkt met 16KB page size en dat lijk je ook terug te zien in deze bron:
http://www.dbasquare.com/...analyzing-io-performance/
Deze lijkt rond de 16 KB te fluctueren, maar ik weet niet of dit echt klopt.
Bron over page sizes:
http://docs.aws.amazon.co...view.ProvisionedIOPS.html
MSSQL heeft een 8K page size en dit artikel:
MSDN: SQL Server Best Practices Article
Geeft aan dat je voor random i/o je kunt focussen op 8K I/O sizes.
Hier lees ik ook over wat grotere request sizes voor MSSQL:
http://sqlserverio.com/20...ms-capturing-io-patterns/
Ik denk dat voor de topic starter 64K of 128 K of zelfs 256 K chunk size niet uit gaat maken. Zolang je chunk size maar groter is dan je request size. Maar de TS heeft het over een stripe size en dat is chunk size x aantal disks (parity niet mee gerekend). Bij 16K requests wil je dus conform wat CiPHER aangeeft 2 disks is dus een minimum 32K stripe size hebben. 16K valt dus af, 64K is de eerste optie die zinnig is, die zou dan in mijn verhaal resulteren in een 32K chunk size.
Weet niet of het al is opgemerkt maar een RAID 10 van 4x 1TB disks gaat niet zulke spannende IOPS opleveren. 4 disks x ~75 iops = 300 IOPS? Schrijven is de helft, 150 IOPS. Als dit drukke databases zijn dan gaat dat heel spannend worden denk ik. Wat precies 'drukke databases' zijn weet ik niet, maar dan ga ik zelf al snel aan 10K of 15K sas denken en meer spindels, of natuurlijk SSD.
Ik zal mijn benches ook nog eens draaien maar dat duurt even.
[
Voor 9% gewijzigd door
Q op 24-04-2013 22:31
]