DukeBox schreef op zondag 20 januari 2008 @ 19:42:
Met de nodige caching geloof ik best dat dat mogelijk is.. maar hoe zit het dan met een systeem crash ? Dan ben je wel je data kwijt (mogelijk zelfs array corrupt) omdat de cache in je ram zit en deze foetsie is. Overigens vraag ik me ook af of software raid5 nog wel performt bij bijv. 8 hdd's.
Ik had het over 1000MB/s sustained he, geen cache transfers die gaan zo hoog als je geheugenbandbreedte in b.v. de ICHxR driver met write-back enabled. Het gaat hier om echte sequentiële write, iets waarbij de implementatie van RAID5 de snelheid maakt of breekt. Schrijven is bij RAID5 namelijk een ingewikkeld proces dat een intelligent ontwerp vereist om te voorkomen dat de fysieke schijven continu moeten swappen, met alle performanceproblemen van dien.
Bij een system crash is je filesystem sowieso niet meer sync, ook niet met een hardware kaart met BBU. Het maakt natuurlijk wel uit of een paar writes of een paar honderd writes verloren zijn gegaan. De oplossing voor dit probleem is journaling (in de breedste interpretatie, dus ook ZIL van ZFS valt hieronder). Een journal kan verloren buffers opvangen omdat het kan achterhalen op welk moment het mis ging en waar het systeem mee bezig was op dat moment. De journal kan dan de writes terugdraaien of alsnog uitvoeren, en bereikt daarmee weer een consistente status.
Voor FreeBSD heb je twee goede opties als je journaling wilt:
ZFS gebruikt een licht journal maar wel met minder performance impact dan geom_journal. Laatstgenoemde moet alle data twee keer schrijven, wat vooral bij sequentiële I/O de snelheid minimaal halveert. Gelukkig is geom_raid5 wel snel, maar je zult iets van 8 schijven moeten hebben om dan nog aan 100MB/s write te zitten. Reads zijn dan natuurlijk wel stukken sneller. geom_journal is een ijzersterk journal dat zowel metadata als file data in zijn journaling opneemt. NTFS en Ext3 doen alleen journaling voor de metadata, en biedt dus minder veiligheid.
Zelf gebruik ik geen journaling, maar gebruik ik een backup server waar ik snel mee kan syncen als dat moet. Tot dusver werkt alles heerlijk: de keer dat een server niet bereikbaar was geworden kon ik zo omwisselen naar mn backup server. Natuurlijk is zo'n setup niet voor iedereen weggelegd.
Over de performance met 8 schijven:
Software RAID0 (geom_stripe) - 8-disks 128KiB stripe
UFS 32K read: 386MB/s (64 blocks Read Ahead (vfs.read_max))
8 block RA = 227MB/s
64 block RA = 386MB/s
128 block RA = 401MB/s
UFS 32K write: 485MB/s
gjournal performance (16GB file) on 32k UFS
read: 374MB/s
write: 108MB/s
Software RAID5 (geom_raid5 PP with 250 cache buckets) - 8-disks 128KiB stripe
raw write: 470MB/s
UFS 32k
read: 341MB/s (64 block RA, 361MB/s with 256 block read-ahead)
write: 323MB/s
gjournal performance (16GB file) on 32k UFS
read: 364MB/s
write: 99MB/s
Software RAID5 (geom_raid5 EFF/TNG with maxwql=200) - 8-disks 128KiB stripe
raw write: 478MB/s
UFS 32k
read: 359MB/s (64 block RA, 357MB/s with 256block UFS read-ahead)
write: 358MB/s
gjournal performance (16GB file) on 32k UFS
read: 344MB/s
write: 135MB/s
Zoals je ziet werkt schrijven naar software RAID5 + journaling nog beter dan naar RAID0 + journaling.