如何实现:最少的内核进程和最少的用户态进程?

如何实现:最少的内核进程和最少的用户态进程?

基本上,我想要一个嵌入式 Linux 来运行单个应用程序,但具有最少的内核进程和最少的用户态进程:

  • 我并不真正关心内核或根文件系统的大小。 (当然薄的仍然是首选。)
  • 因此,内核中额外的内置模块是可以的,只要它们在不必要的时候不运行即可。也许我可以稍后使用/激活它们
  • 而且我仍然需要一些内核进程来进行监视,以便我可以运行命令“ps”、“top”等。
  • 我知道我可以通过更改“Init”程序来启用/禁用用户态进程,对吗?
  • 但是如何启用/禁用内核进程呢?
  • ---- 我如何知道我的应用程序需要哪些内核进程?

谢谢!

答案1

没有单独禁用内核线程的通用方法,因为它们的存在是为了支持特定的内核 API(例如[kworker/*]用于工作队列)或子系统(例如块子系统上涉及刷新和其他后台任务的线程)或模块(例如用于管理文件系统、设备映射器等的线程)

在某些情况下,您无法真正禁用它们,因为使用它们的内核 API 并不是真正可选的,并且没有提供在不使用内核线程的情况下提供相同功能的替代方法,就像工作队列的情况一样。 (不过,内核开发人员已努力减少该 API 使用的线程总数。)

在某些情况下,您可以禁用某些线程,但通常只能通过禁用整个内核子系统或模块来禁用它们。例如,如果您不再使用 ext4,您将不会有 ext4 内核线程......

我认为你在这里问了错误的问题......内核线程不是开销的原因。通常,情况恰恰相反。某些过程和回调已被移动进入内核线程,以便它们可以更有效地运行,重用内核调度程序让它们在后台定期运行,而不是提出单独的机制来执行相同的操作......

内核线程并不真正占用额外的内存,它们只是共享内核地址空间。 (好吧,从技术上讲,每个线程都需要一个额外的线程task_struct,但这基本上是无关紧要的,即使在嵌入式系统上也是如此。)

禁用嵌入式系统的内核功能确实有意义,但您应该关注不需要的特定内核配置或可以调整的配置,而不是正在运行的内核线程。这些可能非常明显(当您运行ps等时),但如上所述,这并不意味着它们真正使用您系统的资源。因此,如果您正在寻求提高效率,您更有可能在其他地方找到有用的方法,而不是专注于内核线程。

相关内容