标签: thread

了解 Linux Perf 调度切换和上下文切换

我一直在尝试在 perf 上启用上下文切换事件,并使用 perf 脚本的 perf.data 转储来调查线程阻塞时间。

到目前为止,唯一两个似乎有用的记录选项是上下文切换和所有计划事件。

这是我在 perf 上运行的命令:

perf record -g -a -F 999 -e cpu-clock,sched:sched_stat_sleep,sched:sched_switch,sched:sched_process_exit,context-switches
Run Code Online (Sandbox Code Playgroud)

然而,两者似乎都不完整,通常 sched_switch 事件看起来像这样:

comm1   0/0     [000] 0.0:          1 sched:sched_switch: prev_comm=comm1 prev_pid=0 prev_prio=0 prev_state=S ==> next_comm=comm2 next_pid=1 next_prio=1
    stacktrace...
Run Code Online (Sandbox Code Playgroud)

根据我的理解,prev_comm始终是要被阻塞的线程,而next_comm是要被解除阻塞的线程。这是一个正确的假设吗?如果是,我似乎无法获得有关事件的完整数据,因为有许多线程在 prev_comm 上被阻止,但似乎从未获得相应的 next_comm。

启用上下文切换似乎没有多大作用,因为没有有关线程被阻塞或解除阻塞的信息(除非我完全遗漏了一些东西,我希望能解释它们如何工作)。

典型的上下文切换事件如下所示:

comm1   0/0     [000] 0.0:          1 context-switch:
    stacktrace...
Run Code Online (Sandbox Code Playgroud)

tl;dr,如何通过 perf 脚本的输出在 Linux 上进行阻塞时间调查以及需要在 perf 记录上启用哪些选项?

谢谢。

scheduling thread perf

5
推荐指数
1
解决办法
8181
查看次数

tid 和 tgid 是否始终与 ps 输出中的 pid 相同?

在 ps 的联机帮助页中

tid         TID          the unique number representing a dispatchable
                         entity (alias lwp, spid).  This value may also
                         appear as: a process ID (pid); a process group
                         ID (pgrp); a session ID for the session leader
                         (sid); a thread group ID for the thread group
                         leader (tgid); and a tty process group ID for
                         the process group leader (tpgid).

   tgid        TGID      a number representing the thread group to which
                         a task belongs (alias pid).  It is the process
                         ID …
Run Code Online (Sandbox Code Playgroud)

linux ps system-v thread

5
推荐指数
1
解决办法
2640
查看次数

在 shell 中运行内置命令时究竟会发生什么?

我知道外部命令是通过创建一个单独的进程在 shell 中运行的,但是在 shell 中运行内置命令时究竟会发生什么?

它们是作为函数执行的,还是 shell 创建一个新线程来执行它们?

shell shell-builtin thread

4
推荐指数
2
解决办法
3023
查看次数

正在执行阻塞系统调用的线程是否被中断唤醒?

我一直在阅读有关线程和中断的一些内容。并且有一节说使用线程进行并行编程更简单,因为我们不必担心中断。

但是,如果不是中断,则发出阻塞系统调用释放信号的机制是什么?

例子

我在我的线程中读取 i 文件,该线程使用阻塞系统调用从磁盘读取文件。

在此期间,其他线程正在运行。

在某个时刻,文件已准备好从硬盘中读取。

它是否通过硬件中断通知处理器这一点,以便它可以对请求文件的线程进行上下文切换?

scheduling interrupt thread

3
推荐指数
1
解决办法
3547
查看次数

增加非 root 用户的 nproc 限制。仅重启有效

我正在增加nproc我的 rhel6 系统中一个开发用户帐户的限制。在搜索了一些强大的解决方案后,我/etc/security/limits.conf将这两行代码归零:

@dev_user        hard    nproc          4096
@dev_user        soft    nproc          4096
Run Code Online (Sandbox Code Playgroud)

在某些情况下,我必须处理如此多的线程,这就是我希望这些数字高的原因。此解决方案也很好地达到了目的。但我的问题是,如果我在任何时候编辑该文件并sudo获得许可,那么它只会在系统重新启动后才会出现。

此 dev_user 仅具有root访问sudo权限。这是我对您的谦虚请求,请向我建议一些无需重启即可完成任务的解决方案。增加的限制也应该持续很长时间,除非没有其他人再次编辑它。

linux etc limit thread

3
推荐指数
1
解决办法
8452
查看次数

线程之间或进程之间是否有锁、互斥锁和信号量?

我认为锁、互斥锁、信号量用于同步多个(线程或进程?)以同时访问某些内容。

这个“东西”必须是多个(线程或进程)之间的共享内存吗?

如果是,那是否意味着lock、mutex、semaphore只用于一个进程的多个线程,而不用于多个进程,因为多个进程不共享内存,而同一个进程的多个线程呢?

谢谢。

process lock thread

3
推荐指数
1
解决办法
2万
查看次数

对于进程或轻量级进程,tgid 和 pid 是否有所不同?

对于任何进程或任何轻量级进程,tgid 和 pid 都是相同的概念。

在 中/proc/${pid}/status,tgid 和 pid 是不同的字段。对于进程或轻量级进程,tgid 和 pid 是否有所不同?

谢谢。

linux process thread linux-kernel

3
推荐指数
1
解决办法
3794
查看次数

顶部显示同一进程的线程的不同 pid。如何修复它?

当我执行 a ps -efT(where -T= Show threads, possibly with SPID column.) 时,我看到所有线程都具有相同的 PID,这是预期的。

myroot   24958 24958  7942  0 20:20 pts/12   00:00:00 java -jar myapp.jar
myroot   24958 24959  7942  0 20:20 pts/12   00:00:11 java -jar myapp.jar
myroot   24958 24960  7942  0 20:20 pts/12   00:00:00 java -jar myapp.jar
myroot   24958 24961  7942  0 20:20 pts/12   00:00:00 java -jar myapp.jar
myroot   24958 24962  7942  0 20:20 pts/12   00:00:00 java -jar myapp.jar
myroot   24958 24963  7942  0 20:20 pts/12   00:00:00 java …
Run Code Online (Sandbox Code Playgroud)

top ps thread htop

1
推荐指数
1
解决办法
1395
查看次数

睡眠系统调用及其时间参数

假设我们正在编写一个调用 sleep() 函数的 C 程序。例如,通过调用 sleep(7),调用线程将休眠 7 秒。

我的问题是:考虑到每个进程在 CPU 上都有自己的量子时间,因为有许多进程连续运行,线程会在我们的时间/时钟 7 秒后唤醒,还是可能需要更长的时间?

process c sleep thread

0
推荐指数
1
解决办法
1205
查看次数

标签 统计

thread ×9

linux ×3

process ×3

ps ×2

scheduling ×2

c ×1

etc ×1

htop ×1

interrupt ×1

limit ×1

linux-kernel ×1

lock ×1

perf ×1

shell ×1

shell-builtin ×1

sleep ×1

system-v ×1

top ×1