- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
目前,我正在讨论使用 LTTng 和 Perf 进行内核跟踪的主题。我对跟踪进程所处的不同状态特别感兴趣。
我偶然发现了事件 sched_process_free
和 sched_process_exit
。我想知道我目前的理解是否正确:
如果进程退出,sched_process_exit
将写入跟踪。但是,进程描述符可能仍在内存中,这会导致僵尸进程。当连接到进程的整个内存被释放时,调用 sched_process_free
。这意味着,如果我真的想确保进程完全“终止”并从内存中删除,我必须在跟踪中收听 sched_process_free
而不是 sched_process_exit
.这是正确的吗?
最佳答案
我找时间编辑我的答案以使其更清楚。如果还有问题,请告诉我,我们可以讨论清楚。让我们深入了解任务的结尾:
有两个系统调用:exit_group()
和exit()
,它们都会转到do_exit()
,这将做以下事情。
PF_EXTING
表示任务正在删除del_timer_sync()
从定时器中删除任务描述符exit_mm()、exit_sem()、__exit_fs()
和其他方法来释放该任务的结构exit_code
为_exit()/exit_group()
或errorexit_notify()
exit_signal
,发送SIGCHLD
EXIT_DEAD
,调用 release_task()
以回收其他内存并减少引用计数。<EXIT_ZOMBIE
PF_DEAD
schedule()
我们需要僵尸状态因为父级可能需要使用那些文件描述符所以我们不能在第一时间删除所有的东西。父任务将需要使用类似 wait()
的东西来检查 child 是否已经死亡。在 wait()
之后,是时候通过 release_task()
ptrace_children
列表中删除__exit_signal()
删除所有挂起的信号并释放 signal_struct 描述符和 exit_itimers()
删除所有定时器__exit_sighand()
删除信号处理程序__unhash_process()
nr_threads
--detach_pid()
从PIDTYPE_PID
和PIDTYPE_TGID
中删除任务描述符REMOVE_LINKS
从列表中删除任务sched_exit()
来安排 parent 的时间put_task-struct()
减少计数器,释放内存和任务描述符因此,我们知道 sched_process_exit
状态将在 do_exit() 中生成,但我们无法确定进程是否被释放(可能调用 release_task() 或不调用,这将触发 sched_process_free
)。这就是为什么我们需要两个性能事件点。
关于linux-kernel - LTTng/性能 : Difference between events used for exiting (sched_process_exit) and freeing (sched_process_free) a process,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65616326/
我正在尝试使用 lttng 来分析远程系统上的调度。但是,使用 babeltrace 将跟踪显示为文本格式表明所有记录的事件都具有相同的时间戳。因此,TraceCompass 中的可视化失败。 tho
我正在致力于为我们的嵌入式产品(ARM Cortex-A8)开发一套工具。我研究过的一些工具包括 LTTng、OProfile 和 Valgrind。有人可以简单描述一下 LTTng 和 OProfi
一段时间以来,我一直在使用 linux 跟踪工具(Lttng,http://lttng.org/)。目前,我正在使用带有 Lttng 插件的 Eclipse 解释跟踪。虽然使用这个工具我可以检索与系统
我正在尝试构建 LTTng 文档中提供的示例。我正面临这个 fatal error 。我用不同版本的 gcc 尝试过。另外,我尝试使用 lttng 2.6 和 lttng 2.8.6 构建它。 hel
我们需要将大量现有的痕迹(类似 printf)适应 LTTNG。我们预见到的问题之一是,我们将需要一个格式为 args 加一个 char* 字符串的包罗万象的跟踪点。我们正试图找到一种方法来避免在调用
我一直在尝试使用 arm64 工具链来执行此操作,但出现错误 error: unrecognized command line option '-mgeral-regs-only'。在谷歌搜索时,我建
我有一个 .NET Core 应用程序,我想设置它来收听 LTTng事件,但我在 C#/.NET Core 中几乎没有发现任何有关如何在代码中实际执行此操作的文档。我已经阅读了很多关于如何甚至 the
源 tarball 中的 README 文件可在 http://lttng.org/download 上获得似乎假设一个人正在同一个 Linux 系统上构建,该系统将成为跟踪的目标。我找到了其他资源来
我正在使用 LTTng 2.0 来跟踪单击 USB 鼠标时发生的事件。我得到的痕迹是这样的(不需要的行已被删除): irq_handler_entry name=i8042, irq-12 irq
我想为运行 Ubuntu 14.04 的机器使用 lttng Linux 跟踪工具包,但在发出 lttng 命令时遇到“lttng:未找到命令”终端响应。 这是我在我的机器上运行的用于获取 lttng
是否可以在不使用 LD_PRELOADing liblttng-ust-cyg-profile 并使用 -finstrument-functions 进行编译的情况下从 lttng 获取回溯? 我无法
我刚开始接触 lttng,我不知道为什么在尝试执行以下命令时会出现此错误:sudo lttng list -k。我正在使用 Eclipse 并在 Arm 处理器上交叉编译我的 C++ 代码。我引用了几
目前,我正在讨论使用 LTTng 和 Perf 进行内核跟踪的主题。我对跟踪进程所处的不同状态特别感兴趣。 我偶然发现了事件 sched_process_free 和 sched_process_ex
我正在尝试使用 LTTng 跟踪部署示例 Orocos 组件,如下所述:http://paul.chavent.free.fr/orocos-traces.html 它似乎找到了 liborocos-
我是一名优秀的程序员,十分优秀!