GNU/Linux >> Belajar Linux >  >> Linux

Apakah clock_gettime() cukup untuk pengaturan waktu submikrodetik?

Tidak. Anda harus menggunakan kode khusus platform untuk melakukannya. Pada x86 dan x86-64, Anda dapat menggunakan 'rdtsc' untuk membaca Penghitung Stempel Waktu.

Cukup port rakitan rdtsc yang Anda gunakan.

__inline__ uint64_t rdtsc(void) {
  uint32_t lo, hi;
  __asm__ __volatile__ (      // serialize
  "xorl %%eax,%%eax \n        cpuid"
  ::: "%rax", "%rbx", "%rcx", "%rdx");
  /* We cannot use "=A", since this would use %rax on x86_64 and return only the lower 32bits of the TSC */
  __asm__ __volatile__ ("rdtsc" : "=a" (lo), "=d" (hi));
  return (uint64_t)hi << 32 | lo;
}

Saya memerlukan pengatur waktu resolusi tinggi untuk profiler tersemat di Linux build aplikasi kami. Profiler kami mengukur cakupan sekecil fungsi individual, sehingga memerlukan presisi pengatur waktu yang lebih baik dari 25 nanodetik.

Sudahkah Anda mempertimbangkan oprofile atau perf ? Anda dapat menggunakan perangkat keras penghitung kinerja di CPU untuk mendapatkan data pembuatan profil tanpa menambahkan instrumentasi ke kode itu sendiri. Anda dapat melihat data per fungsi, atau bahkan per baris kode. Kelemahan "satu-satunya" adalah tidak akan mengukur waktu yang digunakan jam dinding, tetapi akan mengukur waktu CPU yang digunakan, sehingga tidak sesuai untuk semua penyelidikan.


Linux
  1. Tutorial Perintah waktu Linux untuk Pemula (dengan Contoh)

  2. 5 tips untuk membantu Anda mempersiapkan diri untuk ujian sertifikasi teknis

  3. Format tanggal dan waktu untuk skrip atau variabel shell Linux

  1. Perlu mengetahui teknologi untuk sysadmin junior

  2. Mengukur waktu yang telah berlalu di linux untuk program c

  3. Apakah iowait termasuk waktu menunggu panggilan jaringan?

  1. Perintah Tidur Linux – tunda selama waktu tertentu

  2. Perkirakan Waktu Atau Pekerjaan Yang Tersisa Untuk Selesai Untuk Rsync?

  3. Kalendar – Aplikasi Kalender Minimal untuk Manajemen Waktu yang Efisien