在活动监视器中,`kernel_task`的RAM下是否包括集成的VRAM?


作为一点说明,我截取的屏幕截图显示内核使用了750 MB的RAM,这是一台MacBook Pro,Retina,13英寸,2013年初款,唯一的GPU是"Intel HD Graphics 4000 1024 MB",CPU是2.6 GHz的Intel Core i5。我将尝试运行sysdiagnose并看看能否解答你的核心问题。 - bmike
@bmike:所以,既然你有1GB的VRAM,而kernel_task只使用了“仅有”的750MB,我们刚刚确认了这全部750MB都来自常规的RAM,而不是VRAM。对吗? - sds
我的内核占用了1.8GB的空间,这是不是有问题? - Render
2个回答

你正在运行哪个版本的Mac OS X?
在我的2012款MacBook Pro(非Retina)上,搭载Intel HD4000集成显卡和16GB系统内存,Mac OS X 10.9 Mavericks中的kernel_task占用了1.07GB的RAM。是的,这是完全必要的。如果你有更多的物理内存,Mac OS X会为了使系统运行得更加优化而使用大量的kernel_task。
随着Mac OS X的每个新版本推出,kernel_task所需的内存越来越多。
根据我的经验,如果你正在运行Mac OS X 10.8 Mountain Lion,你的Mac需要拥有超过4GB的系统内存才能正常运行(避免操作系统频繁使用硬盘上的交换文件,从而降低性能)。现在看来,你的Mac需要超过6GB的内存才能有效地运行Mac OS X 10.9 Mavericks。
微软Windows 8.0和8.1所需的内存量相当。这只是2013年最新个人电脑操作系统所需的标准。
请注意,许多系统功能在kernel_task下运行,并且您的Mac上正在运行的内容根据您使用Mac的方式而变化。
我为您找到了一个很好的解释,来自2011年CNet的“Kernel_task taking up RAM in OS X”。其中有一段引用:
...你会看到另一个名为"kernel_task"的进程,它也会定期使用几百兆字节的实际内存,并且似乎随着系统的使用而增加其内存占用。
在OS X中,内核是负责处理进程和程序所需资源的软件架构。这些资源包括多任务调度、虚拟内存、系统输入输出以及进程之间的各种通信例程的管理。此外,内核可以通过加载内核扩展(kexts)来修改并提供增强功能,例如蓝牙和Wi-Fi的系统级管理、图形处理器、第三方硬件、对外设的访问以及特殊文件系统支持。本质上,内核负责运行您的硬件并使硬件资源可供应用程序和系统服务使用。
...进程"kernel_task"可能会占用大量系统内存。当系统启动时,即使您已经加载了内核扩展,也不是所有服务都处于活动状态。系统可能已准备好使用它们,但在需要之前不会完全加载它们。因此,如果您最初启动系统并检查活动监视器,您可能会看到kernel_task进程占用相对较小的内存量。当您开始使用系统并激活诸如iSight摄像头、Wi-Fi服务、切换GPU和使用外部设备等功能时,kernel_task将利用这些设备的资源并增长其大小。

2这个回答怎么解决我关于VRAM的实际问题呢? - sds
我相信你问题的原始措辞,就我所读到的,是“kernel_task包括什么?”这也是我试图回答的内容。然而,自那时以来,你已经重新修改了问题的标题。 - user9290
2对不起,我的问题让你困惑了。我知道内核是什么以及其功能,我的问题是关于内存使用报告的。 - sds

我猜应该是包括在内的。我有一台2015年的MBP 13英寸带有Iris显卡,kernel_task也占用了很多内存,我正在调查这个情况,然后我发现了一个神奇的zprint命令。它可以打印内核内存区域的使用情况,对于我来说,我看到有两个条目占用了大部分内存:
- com.apple.iokit.IOAcceleratorFamily2 - 758044K - vm.pages.array - 221204K
可惜的是,我没有找到关于IOAcceleratorFamily2的可靠信息(也没有找到关于vm.pages.array的任何信息),但是名称表明它与I/O和加速有关。根据这些信息,我猜它是内存的一部分,负责视频加速,并专门用于Iris的图像处理需求。
我进行了一个小测试,同时开始录屏和播放两个4K的YouTube视频:com.apple.iokit.IOAcceleratorFamily2的内存占用在几秒钟内就增长到了1.1G,然后在我停止录制和关闭视频后,它降到了630M。因此,我认为它很可能是负责VRAM的。

那么没有办法减少那近一千兆字节的内存吗?视频芯片不应该有专用内存吗?从内存中占用至少800兆字节简直是一种罪过 :( - Kamafeather
请注意,即使内核报告VRAM包含在kernel_task中,这并不意味着实际上所有这些都会被包含在所需的物理RAM中。要获取精确的物理RAM使用情况,您需要跟踪物理RAM页面(也就是查看整个虚拟内存地址空间,并验证哪部分实际上由真实的物理RAM支持)。真正的问题应该是“用户模式进程可用多少真实的RAM?”而不是“内核报告用于内部目的的RAM有多少?” - undefined