1048576 = 1024 * 1024 = 32 * 32768. :) so it should be 32 stripe writes. ming On Fri, 2005-07-22 at 23:14 -0700, Tyler wrote: > By my calculations, 1048756 is *not* a multiple of 32768 (32 > Kilobytes). Did I miscalculate? > > Regards, > Tyler. > > Ming Zhang wrote: > > >i created a 32KB chunk size 3 disk raid5. then write this disk with a > >small code i wrote. i found that even i write it with 1048756 in unit, > >which is multiple of stripe size, it still has a lot of read when seen > >from iostat. > > > >any idea? thanks! > > > >i attached the code for reference. > > > >[root@bakstor2u root]# cat /proc/mdstat > >Personalities : [linear] [raid0] [raid1] [raid5] [multipath] [raid6] > >[raid10] [faulty] > >md0 : active raid5 sdc[2] sdb[1] sda[0] > > 781422592 blocks level 5, 32k chunk, algorithm 2 [3/3] [UUU] > > > >unused devices: <none> > >[root@bakstor2u root]# ./write /dev/md0 1048576 1000 > > 1048576Bytes * 1000 : 34.745MB/s > > > > > >avg-cpu: %user %nice %sys %iowait %idle > > 0.00 0.00 17.17 82.83 0.00 > > > >Device: tps Blk_read/s Blk_wrtn/s Blk_read Blk_wrtn > >hda 0.00 0.00 0.00 0 0 > >hdc 0.00 0.00 0.00 0 0 > >md0 8791.92 0.00 70335.35 0 69632 > >sda 605.05 387.88 35143.43 384 34792 > >sdb 611.11 323.23 35143.43 320 34792 > >sdc 602.02 387.88 35143.43 384 34792 > >sdd 0.00 0.00 0.00 0 0 > >sde 0.00 0.00 0.00 0 0 > >sdf 0.00 0.00 0.00 0 0 > >sdg 0.00 0.00 0.00 0 0 > >sdh 0.00 0.00 0.00 0 0 > > > > > > > > > >------------------------------------------------------------------------ > > > >/* > > * I need a small program to write in various mode. > > */ > >#include <stdio.h> > >#include <stdlib.h> > >#include <sys/types.h> > >#include <sys/stat.h> > >#include <sys/time.h> > >#include <fcntl.h> > > > >int main(int argc, char *argv[]) > >{ > > int size, cnt; > > char *buf; > > char *fn; > > int fid, i; > > struct timeval tv1, tv2, ttv1, ttv2; > > double x; > > int sync = 1; > > int timing = 0; > > unsigned long *t; > > > > if (argc < 4) { > > printf("%s <fn> <strip size> <strip count> [s/a [t]]\n", argv[0]); > > exit(1); > > } > > fn = argv[1]; > > size = atoi(argv[2]); > > cnt = atoi(argv[3]); > > if ((argc >=5) && (argv[4][0] == 'a')) > > sync = 0; > > if ((argc >=6) && (argv[5][0] == 't')) > > timing = 1; > > if (timing) { > > t = (unsigned long *)malloc(sizeof(double) * cnt); > > if (!t) { > > printf("fail to get mem for t\n"); > > exit(1); > > } > > } > > buf = malloc(size * sizeof(char)); > > if (!buf) { > > printf("fail to get memory\n"); > > exit(1); > > } > > fid = open(fn, O_CREAT|O_WRONLY|(sync ? O_SYNC : 0), S_IRWXU); > > if (fid == -1) { > > printf("open file fail\n"); > > exit(1); > > } > > gettimeofday(&tv1, NULL); > > for (i = 0; i < cnt; i++) { > > if (timing) { > > gettimeofday(&ttv1, NULL); > > write(fid, buf, size); > > gettimeofday(&ttv2, NULL); > > t[i] = (ttv2.tv_sec - ttv1.tv_sec) * 1000000 + ttv2.tv_usec - ttv1.tv_usec; > > } else > > write(fid, buf, size); > > } > > close(fid); > > gettimeofday(&tv2, NULL); > > x = (tv2.tv_sec - tv1.tv_sec) + ((double)(tv2.tv_usec - tv1.tv_usec)) > > * 0.000001; > > x = ((double)(size * cnt) / 1048576.0) / x; > > printf("%8dBytes * %8d :%10.3fMB/s\n", size, cnt, x); > > if (timing) { > > for (i = 0; i < cnt; i++) { > > printf("%8ld", t[i]); > > if (!(i % 10)) > > printf("\n"); > > } > > printf("\n"); > > } > >} > > > > > > > >------------------------------------------------------------------------ > > > >No virus found in this incoming message. > >Checked by AVG Anti-Virus. > >Version: 7.0.323 / Virus Database: 267.9.2/55 - Release Date: 7/21/2005 > > > > - To unsubscribe from this list: send the line "unsubscribe linux-raid" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html