I just upgraded my main workstation/gaming PC to AMD Ryzen 3950x (16 cores!), and decided to test Blue Iris on it.
Hardware Setup
(please note: This configuration was chosen for performance, not energy-efficiency or cost-effectiveness)
Performance Data
Baseline
For testing, I used 26 cameras ranging from 1 to 8 megapixels, all configured to encode H.264. One of the 2MP cameras has a weather overlay provided by Blue Iris Tools, so I turned off Direct-to-disc recording on that one. The other 25 cameras are using Direct-to-disc. The "Limit decoding" feature is not being used, and for GUI Open tests, the live preview frame rate is uncapped (although my highest camera frame rate is 15 FPS in these early tests).
I used BiUpdateHelper to measure performance data.
Intel i7-8700K Results
I will start by measuring CPU usage on my i7-8700K Blue Iris server, for comparison purposes.
I did not measure power consumption on the i7-8700K this time around, but based on previous measurements I can confidently say the consumption was likely in the 110-150 watt range, because I do have a low-end GPU in there, along with two spinning hard drives and an SSD.
AMD 3950x Results
Running exactly the same configuration as the Intel system above, the following are measurements from the AMD Ryzen 3950x system. I ran it with software decoding first, then with Nvidia hardware decoding for comparison purposes.
This load hardly strains the CPU. As expected, enabling Nvidia hardware acceleration reduced CPU usage but raised power consumption.
Max it Out
Next, I began trying to find the limit of this system.
Nvidia NVDEC Enabled
I kept Nvidia hardware acceleration enabled, and maxed-out my camera frame rates a few cameras at a time in order to gradually increase the total Megapixels Per Second load.
When I reached 95% Nvidia Decode usage at 1919 MP/s, I considered the Nvidia card maxed out, and measured again with the GUI open.
Full disclosure: 3 of the cameras in my configuration are 2MP PTZs which I had hardware acceleration disabled on for reasons of keeping video delay to a minimum. So when I stopped at 1919 MP/s, really only about 1836 MP/s of video were being fed through the Nvidia card for hardware-accelerated decoding.
Nvidia NVDEC Disabled
I clearly wasn't going to get much further with Nvidia NVDEC enabled, as I had basically maxed out its decoder. So I turned off Nvidia hardware acceleration and measured performance again with the GUI open and with the GUI closed. Then I proceeded to increase camera frame rates.
Interestingly, I wasn't able to push the system any further. As I increased frame rates, Blue Iris began choking on the load. The Megapixels Per Second counter started going down, not up. Blue Iris' status window showed some camera frame rates were reduced from where I had set them, and some streams in the GUI were becoming increasingly delayed.
Clearly, we are running in to some kind of bottleneck, long before the CPU measures 100% usage. I suspect Blue Iris may be using all available memory bandwidth, however I have no evidence to support this hypothesis. Whatever the cause, it seems that the AMD Ryzen 3950x is simply overkill for Blue Iris, and the same results would likely be achievable with an 8 or 12 core processor.
Memory Channels Matter
To test the hypothesis that memory bandwidth was the limiting factor, I removed two 8 GB sticks from channel A, leaving only two 8 GB sticks in channel B. HWINFO confirmed that the memory was now running in single channel mode.
I then measured performance while running the baseline workload from before (1189 MP/s).
Single Channel Memory Results
Performance was all over the place, and frames were being dropped. During the GUI Open (at 4K resolution) test, the GUI was extremely sluggish and it was evident that many cameras' live views were delayed.
Next, I re-inserted the two RAM sticks I had removed, and turned off the XMP Profile. In effect, this reduces the memory speed from 3600 MHz to 2133 MHz, and slightly improves memory latency.
I re-ran the performance measurements.
Based on this, I think it is fair to say that Blue Iris is highly dependent on memory speed. Faster memory is better, and it is simply foolish to not run as many memory channels as your platform supports.
(edit 2020-04-09: Fixed incorrect Megapixels Per Second column values in last table to match originally recorded data -- one of the readings actually was 100 MP/s lower than the others, with higher CPU usage)
Hardware Setup
Ryzen 3950x Build
pcpartpicker.com
(please note: This configuration was chosen for performance, not energy-efficiency or cost-effectiveness)
Performance Data
Baseline
For testing, I used 26 cameras ranging from 1 to 8 megapixels, all configured to encode H.264. One of the 2MP cameras has a weather overlay provided by Blue Iris Tools, so I turned off Direct-to-disc recording on that one. The other 25 cameras are using Direct-to-disc. The "Limit decoding" feature is not being used, and for GUI Open tests, the live preview frame rate is uncapped (although my highest camera frame rate is 15 FPS in these early tests).
I used BiUpdateHelper to measure performance data.
Intel i7-8700K Results
I will start by measuring CPU usage on my i7-8700K Blue Iris server, for comparison purposes.
Megapixels Per Second | Notes | Power Consumption (Watts) | Blue Iris CPU Usage % | Overall CPU Usage % | Nvidia RTX 2080 Ti Video Decode Usage % |
---|---|---|---|---|---|
1189 | Intel Decode, NO GUI | Not Measured | 28 | 32 | N/A |
1189 | Intel Decode, GUI @ 4K | Not Measured | 57 | 61 | N/A |
I did not measure power consumption on the i7-8700K this time around, but based on previous measurements I can confidently say the consumption was likely in the 110-150 watt range, because I do have a low-end GPU in there, along with two spinning hard drives and an SSD.
AMD 3950x Results
Running exactly the same configuration as the Intel system above, the following are measurements from the AMD Ryzen 3950x system. I ran it with software decoding first, then with Nvidia hardware decoding for comparison purposes.
Megapixels Per Second | Notes | Power Consumption (Watts) | Blue Iris CPU Usage % | Overall CPU Usage % | Nvidia RTX 2080 Ti Video Decode Usage % |
---|---|---|---|---|---|
0 | IDLE. Blue Iris Not Installed | 110-140 | 0 | 0 | N/A |
1189 | Software Decode, NO GUI | 171 | 13 | 14 | disabled |
1189 | Software Decode, GUI @ 4K | 198 | 18 | 19 | disabled |
1189 | NVDEC, NO GUI | 245 | 6 | 7 | 62 |
1189 | NVDEC, GUI @ 4K | 259 | 11 | 12 | 62 |
This load hardly strains the CPU. As expected, enabling Nvidia hardware acceleration reduced CPU usage but raised power consumption.
Max it Out
Next, I began trying to find the limit of this system.
Nvidia NVDEC Enabled
I kept Nvidia hardware acceleration enabled, and maxed-out my camera frame rates a few cameras at a time in order to gradually increase the total Megapixels Per Second load.
When I reached 95% Nvidia Decode usage at 1919 MP/s, I considered the Nvidia card maxed out, and measured again with the GUI open.
Megapixels Per Second | Notes | Power Consumption (Watts) | Blue Iris CPU Usage % | Overall CPU Usage % | Nvidia RTX 2080 Ti Video Decode Usage % |
---|---|---|---|---|---|
1189 | NVDEC, NO GUI | 245 | 6 | 7 | 62 |
1314 | NVDEC, NO GUI | 248 | 6 | 7 | 67 |
1464 | NVDEC, NO GUI | 252 | 7 | 8 | 74 |
1702 | NVDEC, NO GUI | 256 | 8 | 9 | 86 |
1919 | NVDEC, NO GUI | 260 | 9 | 10 | 95 |
1919 | NVDEC, GUI @ 4K | 279 | 15 | 17 | 95 |
Full disclosure: 3 of the cameras in my configuration are 2MP PTZs which I had hardware acceleration disabled on for reasons of keeping video delay to a minimum. So when I stopped at 1919 MP/s, really only about 1836 MP/s of video were being fed through the Nvidia card for hardware-accelerated decoding.
Nvidia NVDEC Disabled
I clearly wasn't going to get much further with Nvidia NVDEC enabled, as I had basically maxed out its decoder. So I turned off Nvidia hardware acceleration and measured performance again with the GUI open and with the GUI closed. Then I proceeded to increase camera frame rates.
Interestingly, I wasn't able to push the system any further. As I increased frame rates, Blue Iris began choking on the load. The Megapixels Per Second counter started going down, not up. Blue Iris' status window showed some camera frame rates were reduced from where I had set them, and some streams in the GUI were becoming increasingly delayed.
Megapixels Per Second | Notes | Power Consumption (Watts) | Blue Iris CPU Usage % | Overall CPU Usage % | Nvidia RTX 2080 Ti Video Decode Usage % |
---|---|---|---|---|---|
1919 | Software Decode, GUI @ 4K | 219 | 35 | 36 | disabled |
1919 | Software Decode, NO GUI | 187 | 19 | 20 | disabled |
1834 | Software Decode, NO GUI. Load increased beyond previous | 199 | 36 | 39 | disabled |
1514 | Software Decode, NO GUI. Load increased beyond previous | 199 | 55 | 58 | disabled |
1460 | Software Decode, NO GUI. Load increased beyond previous | 199 | 54 | 59 | disabled |
Clearly, we are running in to some kind of bottleneck, long before the CPU measures 100% usage. I suspect Blue Iris may be using all available memory bandwidth, however I have no evidence to support this hypothesis. Whatever the cause, it seems that the AMD Ryzen 3950x is simply overkill for Blue Iris, and the same results would likely be achievable with an 8 or 12 core processor.
Memory Channels Matter
To test the hypothesis that memory bandwidth was the limiting factor, I removed two 8 GB sticks from channel A, leaving only two 8 GB sticks in channel B. HWINFO confirmed that the memory was now running in single channel mode.
I then measured performance while running the baseline workload from before (1189 MP/s).
Single Channel Memory Results
Megapixels Per Second | Notes | Power Consumption (Watts) | Blue Iris CPU Usage % | Overall CPU Usage % | Nvidia RTX 2080 Ti Video Decode Usage % |
---|---|---|---|---|---|
813 | Software Decode, NO GUI | Not Measured | 48 | 53 | disabled |
835 | Software Decode, NO GUI | Not Measured | 36 | 38 | disabled |
1013 | Software Decode, NO GUI | Not Measured | 33 | 34 | disabled |
884 | Software Decode, NO GUI | Not Measured | 33 | 34 | disabled |
654 | Software Decode, GUI @ 4K | Not Measured | 80 | 83 | disabled |
Performance was all over the place, and frames were being dropped. During the GUI Open (at 4K resolution) test, the GUI was extremely sluggish and it was evident that many cameras' live views were delayed.
Next, I re-inserted the two RAM sticks I had removed, and turned off the XMP Profile. In effect, this reduces the memory speed from 3600 MHz to 2133 MHz, and slightly improves memory latency.
I re-ran the performance measurements.
Megapixels Per Second | Notes | Power Consumption (Watts) | Blue Iris CPU Usage % | Overall CPU Usage % | Nvidia RTX 2080 Ti Video Decode Usage % |
---|---|---|---|---|---|
1189 | Software Decode, NO GUI | Not Measured | 17 | 18 | disabled |
1189 | Software Decode, NO GUI | Not Measured | 17 | 18 | disabled |
1187 | Software Decode, NO GUI | Not Measured | 17 | 17 | disabled |
1086 | Software Decode, NO GUI | Not Measured | 21 | 22 | disabled |
1189 | Software Decode, GUI @ 4K | Not Measured | 33 | 34 | disabled |
Based on this, I think it is fair to say that Blue Iris is highly dependent on memory speed. Faster memory is better, and it is simply foolish to not run as many memory channels as your platform supports.
(edit 2020-04-09: Fixed incorrect Megapixels Per Second column values in last table to match originally recorded data -- one of the readings actually was 100 MP/s lower than the others, with higher CPU usage)
Last edited: