]>
git.saurik.com Git - apple/xnu.git/blob - tools/tests/perf_index/stress_file_write.c
2 #include "perf_index.h"
5 #define MAXFILESIZE 8589934592L
7 static int *fds
= NULL
;
8 static char writebuff
[4096];
10 void stress_file_write_init(const char *fs_path
, int num_threads
, long long length
) {
12 char filepath
[MAXPATHLEN
];
15 fds
= (int*)malloc(sizeof(int)*num_threads
);
16 for(i
=0; i
<num_threads
; i
++) {
17 snprintf(filepath
, sizeof(filepath
), "%s/file_write-%d", fs_path
, i
);
18 fds
[i
] = open(filepath
, O_CREAT
| O_EXCL
| O_WRONLY
, 0644);
21 bzero(writebuff
, sizeof(writebuff
));
24 void stress_file_write(const char *fs_path
, int thread_id
, int num_threads
, long long length
, long long max_file_size
) {
26 size_t file_offset
= 0;
28 char filepath
[MAXPATHLEN
];
29 int fd
= fds
[thread_id
];
31 if(max_file_size
== 0)
32 max_file_size
= MAXFILESIZE
;
34 for(left
=length
; left
>0;) {
35 writelen
= sizeof(writebuff
) < left
? sizeof(writebuff
) : left
;
36 assert(write(fd
, writebuff
, writelen
) == writelen
);
38 file_offset
+= writelen
;
39 if(file_offset
>max_file_size
/num_threads
) {
40 lseek(fd
, 0, SEEK_SET
);
44 snprintf(filepath
, sizeof(filepath
), "%s/file_write-%d", fs_path
, thread_id
);
45 assert(unlink(filepath
)>=0);