2011-02-08 3 views
6

Su una macchina CentOS 5.5 su cui gira il kernel Linux versione 2.6.18-194.26.1.el5, ho notato che posix_fadvise (WILLNEED) rende la lettura di file 60K molto più lenta di un IO regolare di quasi il 200%.posix_fadvise (WILLNEED) rende l'IO più lento?

Sembra che la chiamata fadvise effettiva sia sincrona e ritarda anche la pianificazione di altri thread nell'applicazione che utilizzano i dati letti dai file.

È possibile che il kernel sia impegnato con il recupero dei dati dai dischi a causa della chiamata fadvise e finisca per ritardare altre attività pianificate? Sembra contrario al previsto comportamento di precaricamento asincrono che ci aspettiamo da una chiamata fadvise.

La mia domanda è: ci sono parametri del kernel regolabili che potrebbero essere utilizzati per applicare il comportamento asincrono per posix_fadvise (WILLNEED)? Come aumentare i thread IO del kernel, la cache della pagina?

risposta

7

Questo è stato recentemente asked on LKML. È così che è stato progettato. Se è necessario un fadvise non bloccante, farlo in un altro thread.

+0

Grazie per la risposta. La risposta fornita nel collegamento allude al numero di richieste di I/O che vengono servite nel kernel. È un numero configurabile? Se il sistema ha molte risorse, l'aumento di questa coda potrebbe aiutare a ridurre l'effetto del comportamento sincrono ... – Specksynder

+0

['nr_requests' per coda, quindi è possibile sintonizzarlo] (https://www.kernel.org/doc/Documentation /block/queue-sysfs.txt). Non sono sicuro di cosa sia inizializzato da. – sourcejedi