A system comprising: a memory comprising a circular buffer (150, 240); a network interface controller; and first and second processors (320, 325); the first processor configured to: periodically check a status of the circular buffer (150, 240); and responsive to detecting an occupancy level of the circular buffer being below a threshold, the occupancy level comprising the number of valid network packets stored in the circular buffer and ready to be populated by the second processor: create a network packet according to a template and populate a first subset of fields (510, 515) of the network packet; and store the network packet in the circular buffer (150, 240); the second processor configured to: initiate execution of a kernel on the second processor; responsive to detecting a network communication request during execution of the kernel and prior to the kernel completing execution: identify a network packet in the circular buffer as being ready to be updated by the second processor; populate a second subset of fields (520A - 520N) of the network packet; and generate a notification that the network packet is ready to be processed; wherein the network interface controller is configured to: process, prior to the kernel completing execution, the network packet responsive to detecting the notification, wherein the second processor is further configured to adjust the occupancy level threshold based on the status of the kernel currently being executed by the second processor. a memory comprising a circular buffer (150, 240); a network interface controller; and first and second processors (320, 325); the first processor configured to: periodically check a status of the circular buffer (150, 240); and responsive to detecting an occupancy level of the circular buffer being below a threshold, the occupancy level comprising the number of valid network packets stored in the circular buffer and ready to be populated by the second processor: create a network packet according to a template and populate a first subset of fields (510, 515) of the network packet; and store the network packet in the circular buffer (150, 240); periodically check a status of the circular buffer (150, 240); and responsive to detecting an occupancy level of the circular buffer being below a threshold, the occupancy level comprising the number of valid network packets stored in the circular buffer and ready to be populated by the second processor: create a network packet according to a template and populate a first subset of fields (510, 515) of the network packet; and store the network packet in the circular buffer (150, 240); create a network packet according to a template and populate a first subset of fields (510, 515) of the network packet; and store the network packet in the circular buffer (150, 240); the second processor configured to: initiate execution of a kernel on the second processor; responsive to detecting a network communication request during execution of the kernel and prior to the kernel completing execution: identify a network packet in the circular buffer as being ready to be updated by the second processor; populate a second subset of fields (520A - 520N) of the network packet; and generate a notification that the network packet is ready to be processed; initiate execution of a kernel on the second processor; responsive to detecting a network communication request during execution of the kernel and prior to the kernel completing execution: identify a network packet in the circular buffer as being ready to be updated by the second processor; populate a second subset of fields (520A - 520N) of the network packet; and generate a notification that the network packet is ready to be processed; identify a network packet in the circular buffer as being ready to be updated by the second processor; populate a second subset of fields (520A - 520N) of the network packet; and generate a notification that the network packet is ready to be processed; wherein the network interface controller is configured to: process, prior to the kernel completing execution, the network packet responsive to detecting the notification, wherein the second processor is further configured to adjust the occupancy level threshold based on the status of the kernel currently being executed by the second processor.