#include #include #include #include #include #include #include #include #include #include uint64_t NowMicros() { struct timeval tv; gettimeofday(&tv, NULL); return static_cast(tv.tv_sec) * 1000000 + tv.tv_usec; } int main() { uint64_t st, ed; uint64_t file_size = 10LL * 1024LL * 1024LL * 1024LL; int fd = open("/disk11/tf", O_CREAT | O_RDWR, 0666); int ret; unsigned char *aligned_buf; int dsize = 512; ret = posix_memalign((void **)&aligned_buf, 4096, 4096 * 10); for (int i = 0; i < dsize; i++) { aligned_buf[i] = (int)random() % 128; } lseek(fd, 0, SEEK_SET); st = NowMicros(); int num; off_t off = 0; for (uint64_t i = 0; i < file_size / dsize; i++) { if (i % 8 == 0) { memset(aligned_buf + 512, 0, 4096); num = pwrite(fd, aligned_buf, 4096, off); } else { num = pwrite(fd, aligned_buf, dsize, off); } off += 512; // fsync(fd); if (num != dsize && num != 4096) { printf("write error num %d\n", num); return -1; } } ed = NowMicros(); printf("write time microsecond(us) %lld\n", ed - st); return 0; }