diff --git a/docs/docs/frigate/installation.md b/docs/docs/frigate/installation.md index 98f55f229..e2f229a6a 100644 --- a/docs/docs/frigate/installation.md +++ b/docs/docs/frigate/installation.md @@ -75,21 +75,21 @@ Frigate utilizes shared memory to store frames during processing. The default `s The default shm size of **64MB** is fine for setups with **2 cameras** detecting at **720p**. If Frigate is exiting with "Bus error" messages, it is likely because you have too many high resolution cameras and you need to specify a higher shm size, using [`--shm-size`](https://docs.docker.com/engine/reference/run/#runtime-constraints-on-resources) (or [`service.shm_size`](https://docs.docker.com/compose/compose-file/compose-file-v2/#shm_size) in docker-compose). -The Frigate container also stores logs in shm, which can take up to **30MB**, so make sure to take this into account in your math as well. +The Frigate container also stores logs in shm, which can take up to **40MB**, so make sure to take this into account in your math as well. You can calculate the necessary shm size for each camera with the following formula using the resolution specified for detect: ```console # Replace and -$ python -c 'print("{:.2f}MB".format(( * * 1.5 * 9 + 270480) / 1048576))' +$ python -c 'print("{:.2f}MB".format(( * * 1.5 * 10 + 270480) / 1048576))' # Example for 1280x720 -$ python -c 'print("{:.2f}MB".format((1280 * 720 * 1.5 * 9 + 270480) / 1048576))' +$ python -c 'print("{:.2f}MB".format((1280 * 720 * 1.5 * 10 + 270480) / 1048576))' 12.12MB # Example for eight cameras detecting at 1280x720, including logs -$ python -c 'print("{:.2f}MB".format(((1280 * 720 * 1.5 * 9 + 270480) / 1048576) * 8 + 30))' -126.99MB +$ python -c 'print("{:.2f}MB".format(((1280 * 720 * 1.5 * 10 + 270480) / 1048576) * 8 + 40))' +136.99MB ``` The shm size cannot be set per container for Home Assistant add-ons. However, this is probably not required since by default Home Assistant Supervisor allocates `/dev/shm` with half the size of your total memory. If your machine has 8GB of memory, chances are that Frigate will have access to up to 4GB without any additional configuration. diff --git a/frigate/app.py b/frigate/app.py index 9149f9854..e185f0e44 100644 --- a/frigate/app.py +++ b/frigate/app.py @@ -602,18 +602,26 @@ class FrigateApp: def check_shm(self) -> None: available_shm = round(shutil.disk_usage("/dev/shm").total / pow(2, 20), 1) - min_req_shm = 30 - for _, camera in self.config.cameras.items(): + # required for log files + min_req_shm = 40 + + for camera in self.config.cameras.values(): min_req_shm += round( - (camera.detect.width * camera.detect.height * 1.5 * 9 + 270480) + ( + camera.detect.width + * camera.detect.height + * 1.5 + * max(10, camera.detect.fps) + + 270480 + ) / 1048576, 1, ) - if available_shm < min_req_shm: + if True: logger.warning( - f"The current SHM size of {available_shm}MB is too small, recommend increasing it to at least {min_req_shm}MB." + f"The current SHM size of {available_shm}MB is too small, recommend increasing it to at least {round(min_req_shm)}MB." ) def init_auth(self) -> None: