Troubleshooting¶
General¶
A good starting point is to enable logging. GStreamer logging and tiscamera logging will most likely be helpful. See Logging.
If in doubt, please contact our support. We will gladly answer any questions and help with troubleshooting.
USB¶
Cstate Handling¶
cstates are a method of CPU power saving. When dealing with real time processes like video streaming, aggressive power management can cause latency spikes.
For a good overview/introduction read: https://access.redhat.com/articles/65410
The solution boils down to: Setting kernel arguments in GRUB. This should be used to verify that the problem really has to do with cstates. To do this, add
processor.max_cstate=1 idle=poll
to the kernel arguments.
To achieve the same during run time, let this program run. It has to be manually stopped by pressing Ctrl-C. This will re-enable cstates.
#include <cstdio>
#include <errno.h>
#include <unistd.h>
#include <cstdlib>
#include <fcntl.h>
#include <cstring>
#include <cstdint>
// cstate
// introduction: https://access.redhat.com/articles/65410
static int pm_qos_fd = -1;
void start_low_latency(void)
{
int32_t target = 0;
if (pm_qos_fd >= 0)
return;
pm_qos_fd = open("/dev/cpu_dma_latency", O_RDWR);
if (pm_qos_fd < 0) {
fprintf(stderr, "Failed to open PM QOS file: %s",
strerror(errno));
exit(errno);
}
write(pm_qos_fd, &target, sizeof(target));
}
void stop_low_latency(void)
{
if (pm_qos_fd >= 0)
close(pm_qos_fd);
}
int main (int argc, char *argv[])
{
start_low_latency();
while(true)
{}
stop_low_latency();
return 0;
}
GigE¶
The Camera Is Not Found¶
One or more cameras are delivering no/incomplete images¶
Assuming the computer is not simply having processing problems due to low performance two problems may be the cause:
- The network card in the computer, or a switch between the computer and the camera, is not gigabit capable.
- The packet size of the network card, or a switch between the computer and the camera, is too small.
Verifying Gigabit Capabilities¶
Identify the Network Interface¶
Execute the following in the terminal
ip a
Sample ouput:
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: enp31s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 9000 qdisc mq state UP group default qlen 1000
link/ether 70:85:c2:84:10:4f brd ff:ff:ff:ff:ff:ff
inet 192.168.0.111/24 brd 192.168.0.255 scope global dynamic noprefixroute enp31s0
valid_lft 26756sec preferred_lft 26756sec
inet6 fe80::7285:c2ff:fe84:104f/64 scope link
valid_lft forever preferred_lft forever
3: enp37s0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 9000 qdisc pfifo_fast state DOWN group default qlen 1000
link/ether 68:05:ca:84:32:19 brd ff:ff:ff:ff:ff:ff
inet 169.254.100.1/16 brd 169.254.255.255 scope global enp37s0
valid_lft forever preferred_lft forever
Here the interfaces are named enp31s0 and enp37s0. Interfaces may also have names like enp31s0 or eth0.
Verify the Speed of the Network Interface¶
cat /sys/class/net/<INTERFACE_NAME>/speed
Sample output:
1000
If the output is 1000, the network interface has gigabit.
Checking the Network Interface’s MTU Size¶
Identifying the Network Interface¶
Execute the following in the terminal
ip a
Sample ouput:
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: enp31s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 9000 qdisc mq state UP group default qlen 1000
link/ether 70:85:c2:84:10:4f brd ff:ff:ff:ff:ff:ff
inet 192.168.0.111/24 brd 192.168.0.255 scope global dynamic noprefixroute enp31s0
valid_lft 26756sec preferred_lft 26756sec
inet6 fe80::7285:c2ff:fe84:104f/64 scope link
valid_lft forever preferred_lft forever
3: enp37s0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 9000 qdisc pfifo_fast state DOWN group default qlen 1000
link/ether 68:05:ca:84:32:19 brd ff:ff:ff:ff:ff:ff
inet 169.254.100.1/16 brd 169.254.255.255 scope global enp37s0
valid_lft forever preferred_lft forever
Here the interfaces are named enp31s0 and enp37s0. Interfaces may also have names like enp31s0 or eth0.
Verifying the MTU size¶
Execute the following in the terminal
cat /sys/class/net/<INTERFACE_NAME>/mtu
Sample ouput:
9000
The optimal setting for large data transmissions has the MTU at 9000. The default setting is typically at 1500.
Temporarily adjusting the MTU¶
To temporarily adjust the MTU for a network interface, execute the following in the terminal:
sudo ip link set <INTERFACE_NAME> mtu 9000
This will set the MTU to the recommended setting. To verify this, execute the steps described under Verifying the MTU size.
Permanently adjusting the MTU¶
This step depends on the setup of the computer in question.