什么是 __kernel_vsyscall?

2022-01-20 00:00:00 gdb c++

我得到了一个看起来与我通常得到的非常不同的内核 - 大多数线程都在 __kernel_vsyscall() 中:

I got a core that looks very different from the ones I usually get - most of the threads are in __kernel_vsyscall() :

  9 process 11334  0xffffe410 in __kernel_vsyscall ()
  8 process 11453  0xffffe410 in __kernel_vsyscall ()
  7 process 11454  0xffffe410 in __kernel_vsyscall ()
  6 process 11455  0xffffe410 in __kernel_vsyscall ()
  5 process 11474  0xffffe410 in __kernel_vsyscall ()
  4 process 11475  0xffffe410 in __kernel_vsyscall ()
  3 process 11476  0xffffe410 in __kernel_vsyscall ()
  2 process 11477  0xffffe410 in __kernel_vsyscall ()
  1 process 11323  0x08220782 in MyClass::myfunc ()

这是什么意思?

特别是,我通常会在pthread_cond_wait"和___newselect_nocancel"中看到很多线程,而现在它们位于每个线程的第二帧 - 为什么这个核心不同?

In particular, I usually see a lot of threads in "pthread_cond_wait" and "___newselect_nocancel" and now those are on the second frame in each thread - why is this core different?

推荐答案

__kernel_vsyscal 是 linux-gate.so(Linux 内核的一部分)使用最快的可用方法,最好是 sysenter 指令.Johan Petersson 正确解释了这件事.

__kernel_vsyscal is the method used by linux-gate.so (a part of the Linux kernel) to make a system call using the fastest available method, preferably the sysenter instruction. The thing is properly explained by Johan Petersson.

相关文章