Missing Vulkan command buffer calls with Nsight Systems on Linux

Hi, I am learning to use Nsight Systems (current version: 2025.1.1.103-251135427971v0 Linux). My laptop has a Quadro P2000 GPU (driver version: 545.23.06), and I run on Debian Unstable.

My problem is that when capturing Vulkan applications it seems that many command buffer calls are missing from the capture. For instance, when trying to capture from vkgears I see that before each frame is rendered this command buffer is recorded:

When zooming in it seems that only two commands were recorded in the command buffer, vkCmdBindPipeline() and vkCmdBindDescriptorSets(). This is wrong, of course, the program records many other calls into each command buffer. For example, if I use ltrace to dump the calls made by the program we can see something more sensible:

$ ltrace vkgears |& grep vkCmd
[...]
vkCmdBeginRenderPass(0x562ca498dec0, 0x7ffd1c7167a0, 0, 0x7ffd1c7169bc) = 0
vkCmdBindVertexBuffers(0x562ca498dec0, 0, 2, 0x7ffd1c7168a0) = 2
vkCmdBindPipeline(0x562ca498dec0, 0, 0x562ca499bfd0, 1) = 0
vkCmdBindDescriptorSets(0x562ca498dec0, 0, 0x562ca477ed80, 0) = 0
vkCmdSetViewport(0x562ca498dec0, 0, 1, 0x7ffd1c716820) = 0x562ca498df7c
vkCmdSetScissor(0x562ca498dec0, 0, 1, 0x7ffd1c7167e0) = 0x562ca498e0fc
vkCmdPushConstants(0x562ca498dec0, 0x562ca477ed80, 1, 0) = 0
vkCmdDraw(0x562ca498dec0, 930, 1, 0)             = 0
vkCmdPushConstants(0x562ca498dec0, 0x562ca477ed80, 1, 0) = 0
vkCmdDraw(0x562ca498dec0, 470, 1, 930)           = 0
vkCmdPushConstants(0x562ca498dec0, 0x562ca477ed80, 1, 0) = 0
vkCmdDraw(0x562ca498dec0, 470, 1, 1400)          = 0
vkCmdEndRenderPass(0x562ca498dec0, 0, 0, 0xeffefff7ff80) = 0
vkCmdUpdateBuffer(0x562ca49c04a0, 0x562ca5113010, 0, 64) = 0
[...]

You can also see from the program source code that no command buffer is recorded with just those two commands.

So I wonder why Nsight Systems is not showing the other commands and what I could do to have them shown. Unfortunately it’s quite hard to profile command buffer recording if most of the commands are not captured.

Thanks!

@dofek can you help with this?

Nsight Systems is a system-level trace tool. Its purpose is to investigate scheduling algorithms, stutter frames, memory consumption issues, and synchronization scenarios. Nsight Systems is designed to incur minimal overhead. As such, Nsight Systems traces only a select set of Vulkan API functions that have the potential to affect CPU/GPU scheduling patterns or VRAM consumption. Nsight Systems does not capture the majority of vkCmd* API calls. This is why the number of Vulkan API functions that are displayed on the timeline is much smaller than the actual number of functions that the app called.