GNU/Linux >> Linux Esercitazione >  >> Linux

Perché il mio gatto funziona con le chiamate di sistema più lentamente rispetto al gatto di Linux?

Ah, in base alla tua modifica sei stato morso dal buffer readahead. Non è possibile testare due programmi che leggono i file fianco a fianco eseguendoli una volta. Il primo sarà sempre più lento poiché il file è su disco, una volta che il file è in memoria il secondo verrà eseguito più velocemente, è necessario creare nuovi dati per ciascuno o eseguirne uno e quindi eseguirli entrambi in modo che entrambi ottengano il vantaggio del readahead buffer.


Forse hai compilato senza ottimizzazione (o senza un'impostazione di ottimizzazione così alta)?

Inoltre, il tuo codice chiamerà sysWriteBuffer una volta con readBytes uguale a zero -- forse questo lo spiega (parzialmente)?

Potresti anche incorporare sysWriteBuffer (tramite uno switch del compilatore o manualmente).

"inlining" significa copiare il corpo di una funzione nel suo sito di chiamata per rimuovere l'overhead della chiamata di una funzione. A volte i compilatori lo fanno automaticamente (penso che -O3 abiliti questa ottimizzazione in gcc). Puoi anche usare il inline parola chiave in gcc per dire al compilatore di incorporare una funzione. Se lo fai, la tua dichiarazione sarà simile a questa:

static inline int sysWriteBuffer(int fdout, char *buffer, ssize_t readBytes) {
....

Ricerca mmap(2).

Butterai via le sottigliezze di ftell/fread, ma salterà uno strato di indiretto se il throughput di lettura è davvero importante.


Linux
  1. Monitora il tuo sistema Linux nel tuo terminale con procps-ng

  2. Perché mi attengo a xterm

  3. Comprensione delle chiamate di sistema su Linux con strace

  4. Bilanciare la sicurezza di Linux con l'usabilità

  5. 13 Chiamate di sistema Linux di base spiegate utilizzando un divertente programma antivirus per Linux

Comando Linux Uptime con esempi

Utilizzo di Cat Command in Linux con esempi

Introduzione al sistema operativo Linux

Trova le informazioni sull'hardware del sistema Linux con Hwinfo

Come visualizzare le statistiche del sistema Linux con Saidar

Che cosa sono le chiamate di sistema Linux e le funzioni di libreria?