picam icon indicating copy to clipboard operation
picam copied to clipboard

Picam GPU memory crash

Open frankgould opened this issue 6 years ago • 0 comments

This issue appears to be caused by pi3d memory management that periodically consumes GPU memory until it crashes node-rtsp-rtmp-server. I posted this previously as an issue for node-rtsp-rtmp-server but I received no response and thought it might be a picam problem instead, so I've reposted it here. The symptoms exhibited are listed from logs below:

  1. Several trace steps reported:
2018-05-20 09:41:43.062 [stream:live/picam] video data error: failed to read SPS
2018-05-20 09:41:43.150 Error: video error: reserved_zero_2bits must be 00: 3
    at Object.api.readSPS (/home/pi/node-rtsp-rtmp-server/h264.coffee:422:13)
    at AVStream.updateSPS (/home/pi/node-rtsp-rtmp-server/avstreams.coffee:154:20)
    at StreamServer.onReceiveVideoNALUnits (/home/pi/node-rtsp-rtmp-server/stream_server.coffee:311:16)
    at StreamServer.onReceiveVideoPacket (/home/pi/node-rtsp-rtmp-server/stream_server.coffee:338:6)
    at StreamServer.onReceiveVideoDataBuffer (/home/pi/node-rtsp-rtmp-server/stream_server.coffee:278:6)
    at StreamServer.customReceiver.CustomReceiver.videoData (/home/pi/node-rtsp-rtmp-server/stream_server.coffee:69:11)
    at Socket.<anonymous> (/home/pi/node-rtsp-rtmp-server/custom_receiver.coffee:179:15)
    at emitOne (events.js:77:13)
    at Socket.emit (events.js:169:7)
    at readableAddChunk (_stream_readable.js:153:18)
    at Socket.Readable.push (_stream_readable.js:111:10)
    at Pipe.onread (net.js:540:20)
  1. Malformed SPS data:
2018-04-20 19:04:12.800 warn: malformed SPS data: rbsp_stop_one_bit must be 1
2018-04-20 19:04:12.802 warn: malformed SPS data: rbsp_alignment_zero_bit must be all zeroes
2018-04-20 19:04:12.803 warn: malformed SPS length
  1. Starving record buffer:
warning: Record buffer is starving. Recorded file may not start from keyframe. Try reducing the value of --gopsize.

To help identify GPU memory consumption while executing my app, I inserted a query that for every 15 seconds the app logs free memory and if less than a megabyte free, prevents my app from any graphic execution until free memory is over a meg (as shown below where the entry says Aborting NEXT). These log entries are copied from the attached log where it shows memory consumed multiple times in a row.

Aborting NEXT: LOW GPU memory=9.0K Date/Time= {2018-05-20 09:40:51}
NEXT: GPU memory=354M free memory in 72 free block(s) Date/Time= {2018-05-20 09:41:06}
NEXT: GPU memory=354M free memory in 71 free block(s) Date/Time= {2018-05-20 09:41:21}
NEXT: GPU memory=354M free memory in 72 free block(s) Date/Time= {2018-05-20 09:41:36}
NEXT: GPU memory=354M free memory in 68 free block(s) Date/Time= {2018-05-20 09:41:51}
NEXT: GPU memory=354M free memory in 70 free block(s) Date/Time= {2018-05-20 09:42:06}
NEXT: GPU memory=354M free memory in 71 free block(s) Date/Time= {2018-05-20 09:42:21}
NEXT: GPU memory=354M free memory in 73 free block(s) Date/Time= {2018-05-20 09:42:36}
NEXT: GPU memory=354M free memory in 70 free block(s) Date/Time= {2018-05-20 09:42:51}
Aborting NEXT: LOW GPU memory=800 Date/Time= {2018-05-20 09:43:06}
Aborting NEXT: LOW GPU memory=4.4K Date/Time= {2018-05-20 09:43:21}

GPU-memory-log-only20May18.txt

I have also posted on the RPi forum asking for assistance with this issue from pi3d code and in github. https://www.raspberrypi.org/forums/viewtopic.php?f=28&t=214284

frankgould avatar Jun 14 '18 12:06 frankgould