]>
git.saurik.com Git - apple/xnu.git/blob - tools/tests/perf_index/stress_file_read.c
2 #include "perf_index.h"
5 #define MAXFILESIZE 8589934592L
6 #define MIN(a,b) ((a)<(b) ? (a) : (b))
8 static char readbuff
[4096];
10 void stress_file_read_init(const char *fs_path
, int num_threads
, long long length
, long long max_file_size
) {
12 char filepath
[MAXPATHLEN
];
16 if(max_file_size
== 0)
17 max_file_size
= MAXFILESIZE
;
19 left
= MIN(length
, max_file_size
/num_threads
);
21 snprintf(filepath
, sizeof(filepath
), "%s/file_read", fs_path
);
22 fd
= open(filepath
, O_CREAT
| O_EXCL
| O_WRONLY
, 0644);
24 bzero(readbuff
, sizeof(readbuff
));
27 writelen
= sizeof(readbuff
) < left
? sizeof(readbuff
) : left
;
28 assert(write(fd
, readbuff
, writelen
) == writelen
);
33 void stress_file_read(const char *fs_path
, int thread_id
, int num_threads
, long long length
, long long max_file_size
) {
35 size_t file_offset
= 0;
38 char filepath
[MAXPATHLEN
];
42 if(max_file_size
== 0)
43 max_file_size
= MAXFILESIZE
;
44 filesize
= MIN(length
, max_file_size
/num_threads
);
46 snprintf(filepath
, sizeof(filepath
), "%s/file_read", fs_path
);
47 fd
= open(filepath
, O_RDONLY
);
49 for(left
=length
; left
>0;) {
50 readlen
= sizeof(readbuff
) < left
? sizeof(readbuff
) : left
;
51 if(file_offset
+readlen
> filesize
) {
52 lseek(fd
, 0, SEEK_SET
);
56 assert(read(fd
, readbuff
, readlen
) == readlen
);
58 file_offset
+= readlen
;
62 void stress_file_read_cleanup(const char *fs_path
, int num_threads
, long long length
) {
63 char filepath
[MAXPATHLEN
];
64 snprintf(filepath
, sizeof(filepath
), "%s/file_read", fs_path
);
65 assert(unlink(filepath
)>=0);