GNU/Linux >> Belajar Linux >  >> Linux

Mengapa fungsi kucing saya dengan panggilan sistem lebih lambat dibandingkan dengan kucing Linux?

Ah, berdasarkan hasil edit Anda, Anda digigit oleh buffer readahead. Anda tidak dapat menguji dua program yang membaca file berdampingan dengan menjalankannya sekali. Yang pertama selalu lebih lambat karena file ada di disk, setelah file ada di memori yang kedua akan berjalan lebih cepat, Anda harus membuat data baru untuk masing-masing atau menjalankannya lalu menjalankan keduanya sehingga keduanya mendapatkan manfaat dari buffer readahead.


Mungkin Anda mengompilasi tanpa pengoptimalan (atau tanpa pengaturan pengoptimalan setinggi)?

Selain itu, kode Anda akan memanggil sysWriteBuffer sekali dengan readBytes sama dengan nol -- mungkin itu (sebagian) menjelaskannya?

Anda juga dapat menyejajarkan sysWriteBuffer (baik melalui sakelar kompiler atau secara manual).

"inlining" berarti menyalin badan fungsi ke situs pemanggilannya untuk menghilangkan biaya pemanggilan fungsi. Terkadang kompiler melakukan ini secara otomatis (menurut saya -O3 mengaktifkan pengoptimalan ini di gcc). Anda juga dapat menggunakan inline kata kunci di gcc untuk memberi tahu kompiler untuk menyejajarkan fungsi. Jika Anda melakukannya, deklarasi Anda akan terlihat seperti ini:

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

Teliti mmap(2).

Anda akan membuang kesenangan dari ftell/fread, tetapi itu akan melewatkan lapisan tipuan jika throughput baca benar-benar penting.


Linux
  1. Mengapa saya tetap menggunakan xterm

  2. Tingkatkan kinerja sistem Linux dengan noatime

  3. Mengapa saya jatuh cinta dengan Antergos Linux

  1. Pantau sistem Linux Anda di terminal Anda dengan procps-ng

  2. Perintah Shutdown Linux (dengan Contoh)

  3. Linux - Pemantauan Seluruh Sistem Panggilan Ke Fungsi Perpustakaan?

  1. Memahami panggilan sistem di Linux dengan strace

  2. Menjadwalkan tugas sistem dengan Cron di Linux

  3. Menyeimbangkan keamanan Linux dengan kegunaan