Compare les performances de read/write avec fgets/fputs.
Compare aussi l'impact de la kernel buffer cache
et du buffer au niveau de stdio
. C'est inspiré du chapitre 13 du livre "The Linux programming interface" par Michael Kerrisk.
int main |
( |
int |
argc, |
|
|
char * |
argv[] |
|
) |
| |
Si il y a des arguments, –sys_sync
, –sys_nosync
, –sys_direct
, –std_buf
et –std_nobuf
font uniquement le test correspondant avec une taille de PERF_LEN
.
On commence avec 512 pour sys_sync
parce qu'en dessous très lent et que de toute façon sys_direct
ne sais pas aller en dessous et le reste du graphe serait moins lisible même en log y
.
Pour sys_sync
, len
doit être un multiple de la taille d'un block du file system. 512 est ok selon le Kerrisk cité plus haut.
42 if (strncmp(argv[1],
"--sys_sync", 11) == 0) {
44 }
else if (strncmp(argv[1],
"--sys_nosync", 13) == 0) {
46 }
else if (strncmp(argv[1],
"--sys_direct", 13) == 0) {
48 }
else if (strncmp(argv[1],
"--std_buf", 10) == 0) {
50 }
else if (strncmp(argv[1],
"--std_nobuf", 12) == 0) {
67 for (len = 512; len <=
MAX_LEN; len *= 0x2) {
70 for (len = 2; len <=
MAX_LEN; len *= 0x2) {
77 for (len = 512; len <=
MAX_LEN; len *= 2) {
86 for (len = 2; len <=
MAX_LEN; len *= 0x2) {
89 for (len = 2; len <=
MAX_LEN; len *= 0x2) {
void gets_puts(timer *t, recorder *rec, char *in, char *out, size_t file_size, size_t len, int has_buf, size_t buf_size)
Copie le fichier in dans le fichier out avec stdio
Definition: copy.c:175
void timer_free(timer *t)
Retourne le temps en nanosecondes depuis le début de mesure dans t
Definition: benchmark.c:172
recorder écrit les temps dans un fichier .csv
Definition: benchmark.c:208
#define PERF_LEN
Definition: io.c:29
#define FILE_SIZE
Definition: io.c:25
void read_write(timer *t, recorder *rec, char *in, char *out, size_t file_size, size_t len, int flags)
Copie le fichier in dans le fichier out sans stdio
Definition: copy.c:90
timer permet de mesurer le temps écoulé entre deux moments
Definition: benchmark.c:43
timer * t
Definition: memfork.c:25
#define BUF_SIZE
Definition: io.c:27
#define IN
Definition: io.c:31
recorder * recorder_alloc(char *filename)
Alloue un recorder
Definition: benchmark.c:219
#define OUT
Definition: io.c:32
void recorder_free(recorder *rec)
Libère toutes les resources utilisées par rec
Definition: benchmark.c:263
timer * timer_alloc()
Alloue un timer
Definition: benchmark.c:63
#define O_DIRECT
Definition: io.c:19
#define MAX_LEN
Definition: io.c:28