Re: SSD + RAID
От | Richard Neill |
---|---|
Тема | Re: SSD + RAID |
Дата | |
Msg-id | 4B06E72D.20504@cam.ac.uk обсуждение исходный текст |
Ответ на | Re: SSD + RAID (Axel Rau <Axel.Rau@chaos1.de>) |
Ответы |
Re: SSD + RAID
|
Список | pgsql-performance |
Axel Rau wrote: > > Am 13.11.2009 um 14:57 schrieb Laszlo Nagy: > >> I was thinking about ARECA 1320 with 2GB memory + BBU. Unfortunately, >> I cannot find information about using ARECA cards with SSD drives. > They told me: currently not supported, but they have positive customer > reports. No date yet for implementation of the TRIM command in firmware. > ... >> My other option is to buy two SLC SSD drives and use RAID1. It would >> cost about the same, but has less redundancy and less capacity. Which >> is the faster? 8-10 MLC disks in RAID 6 with a good caching >> controller, or two SLC disks in RAID1? Despite my other problems, I've found that the Intel X25-Es work remarkably well. The key issue for short,fast transactions seems to be how fast an fdatasync() call can run, forcing the commit to disk, and allowing the transaction to return to userspace. With all the caches off, the intel X25-E beat a standard disk by a factor of about 10. Attached is a short C program which may be of use. For what it's worth, we have actually got a pretty decent (and redundant) setup using a RAIS array of RAID1. [primary server] SSD } } RAID1 -------------------} DRBD --- /var/lib/postgresql SSD } } } } } } [secondary server] } } SSD } } } RAID1 --------gigE--------} SSD } The servers connect back-to-back with a dedicated Gigabit ethernet cable, and DRBD is running in protocol B. We can pull the power out of 1 server, and be using the next within 30 seconds, and with no dataloss. Richard #include <string.h> #include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <errno.h> #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> #define NUM_ITER 1024 int main ( int argc, char **argv ) { const char data[] = "Liberate"; size_t data_len = strlen ( data ); const char *filename; int fd; unsigned int i; if ( argc != 2 ) { fprintf ( stderr, "Syntax: %s output_file\n", argv[0] ); exit ( 1 ); } filename = argv[1]; fd = open ( filename, ( O_WRONLY | O_CREAT | O_EXCL ), 0666 ); if ( fd < 0 ) { fprintf ( stderr, "Could not create \"%s\": %s\n", filename, strerror ( errno ) ); exit ( 1 ); } for ( i = 0 ; i < NUM_ITER ; i++ ) { if ( write ( fd, data, data_len ) != data_len ) { fprintf ( stderr, "Could not write: %s\n", strerror ( errno ) ); exit ( 1 ); } if ( fdatasync ( fd ) != 0 ) { fprintf ( stderr, "Could not fdatasync: %s\n", strerror ( errno ) ); exit ( 1 ); } } return 0; }
В списке pgsql-performance по дате отправления: