For the some system calls we need to get data located in a server (or in the kernel) that is larger than any message structure.
It is easy to transfer small amounts of information between the process manager and a user process through a system call without directly copying the data by including the data in the message that is sent/received.
The implementation of message passing has to do the copying between the process manager's memory and the user's memory.
But that copying was not explicit in the code we write for adding a mygetpid or getnc system call.
But the amount of data we need for the profiling cannot be handled the same way. The message structs are too small to hold the profile data.