glacote a écrit :
Pas compris ta remarque.
En lecture, la donnée étant présente sur les n >= 2 disques, tu choisis le disque que tu veux utiliser. L'ordonnanceur choisit donc celui des deux disques dont le bras est actuellement le plus proche du secteur recherché (il suffit de se souvenir du numéro du dernier secteur accédé par chaque disque, et de prendre le plus proche). Donc latence = min(latences)
cf par exemple drivers/md/raid1.c, lignes 508 à 524:
Code :
- /*
- * read balancing logic:
- */
- mirror = conf->mirrors + read_balance(conf, bio, r1_bio);
- read_bio = bio_clone(bio, GFP_NOIO);
- r1_bio->bios[r1_bio->read_disk] = read_bio;
- read_bio->bi_sector = r1_bio->sector + mirror->rdev->data_offset;
- read_bio->bi_bdev = mirror->rdev->bdev;
- read_bio->bi_end_io = raid1_end_read_request;
- read_bio->bi_rw = READ;
- read_bio->bi_private = r1_bio;
- generic_make_request(read_bio);
- return 0;
|
En écriture en revanche, la donnée doit être écrite sur les n disques, donc latence = max(latences)
Bref, on a coutume de résumer de façon publicitaire qu'en RAID1:
débit: lecture x n, écriture x 1
latence: lecture / n, écriture / 1
EDIT: ainsi, un RAID1 avec n disques améliore les performances en lecture "d'un facteur n", sans modifier les performances en écriture. Tout ça étant un peu à la louche, et sans tenir compte de la saturation du PCI. Et bien entendu, un seul disque par nappe quand on fait du RAID.
|