]>
Commit | Line | Data |
---|---|---|
39236c6e A |
1 | #include <fcntl.h> |
2 | #include "perf_index.h" | |
3 | #include <errno.h> | |
4 | ||
5 | #define MAXFILESIZE 8589934592L | |
6 | ||
7 | static int *fds = NULL; | |
8 | static char writebuff[4096]; | |
9 | ||
10 | void stress_file_write_init(const char *fs_path, int num_threads, long long length) { | |
11 | int i; | |
12 | char filepath[MAXPATHLEN]; | |
13 | ||
14 | if(fds == NULL) | |
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); | |
19 | assert(fds[i] > 0); | |
20 | } | |
21 | bzero(writebuff, sizeof(writebuff)); | |
22 | } | |
23 | ||
24 | void stress_file_write(const char *fs_path, int thread_id, int num_threads, long long length, long long max_file_size) { | |
25 | long long left; | |
26 | size_t file_offset = 0; | |
27 | int writelen; | |
28 | char filepath[MAXPATHLEN]; | |
29 | int fd = fds[thread_id]; | |
30 | ||
31 | if(max_file_size == 0) | |
32 | max_file_size = MAXFILESIZE; | |
33 | ||
34 | for(left=length; left>0;) { | |
35 | writelen = sizeof(writebuff) < left ? sizeof(writebuff) : left; | |
36 | assert(write(fd, writebuff, writelen) == writelen); | |
37 | left -= writelen; | |
38 | file_offset += writelen; | |
39 | if(file_offset>max_file_size/num_threads) { | |
40 | lseek(fd, 0, SEEK_SET); | |
41 | file_offset = 0; | |
42 | } | |
43 | } | |
44 | snprintf(filepath, sizeof(filepath), "%s/file_write-%d", fs_path, thread_id); | |
45 | assert(unlink(filepath)>=0); | |
46 | } |