GPSPROF(1)
β¨ GPSPROF(1) β¨
okay so bestie, welcome to the gpsprof page from the GPSD docs π This is the little tool that profiles your GPS + gpsd and spits out latency info, and honestly it's giving main character energy.
πΈ NAME πΈ
gpsprof β profile a GPS and gpsd, plotting latency information
π SYNOPSIS π
gpsprof [OPTIONS] [server[:port[:device]]]
gpsprof -h
gpsprof -V
π¦ DESCRIPTION π¦
So like, what does it actually do? gpsprof performs accuracy, latency, skyview, and time drift profiling on a GPS. It emits to standard output a GNUPLOT program that draws one of several illustrative graphs. And if you don't want the pretty graph, it can also be told to emit the raw profile data. π
The info from the default spatial plot it gives you can be genuinely useful for characterizing position accuracy of a GPS. No cap.
gpsprof uses instrumentation built into gpsd. It can read data from a local or remote running gpsd. Or it can read data from a saved logfile. Whatever vibe you're on. π«Ά
gpsprof is designed to be lightweight and use minimal host resources. Like, no graphics subsystem needs to be installed on the host running gpsprof. Simply copy the resultant plot file to another host to be rendered with gnuplot(1). Iconic, honestly.
gpsprof does not require root privileges, but it will run fine as root. So do whatever, bestie.
β¨ OPTIONS β¨
The -f, --formatter option sets the plot type. Currently the following plot types are defined:
spaceβ Generate a scatterplot of fixes and plot probable error circles. This data is only meaningful if the GPS is held stationary whilegpsprofis running. Various statistics about the fixes are listed at the bottom. This is the default plot type.polarβ Generate a heat map of reported satellite Signal to Noise Ratio (SNR) using polar coordinates. A colored dot is plotted for each satellite seen by the GPS. The color of dot corresponds to the SNR of the satellite. The dots are plotted by azimuth and elevation. North, azimuth 0 degrees, is at the top of the plot. Directly overhead, elevation of 90 degrees, is plotted at the center. Useful for analyzing the quality of the skyview as seen by the GPS. πpolarunusedβ Similar to thepolarplot, but only unused satellites are plotted. Useful for seeing which parts of the antenna skyview are obstructed, degraded, below the GPS elevation mask, or otherwise rejected. πpolarusedβ Similar to thepolarplot, but only satellites used to compute fixes are plotted. Useful for seeing which parts of the antenna skyview are being used in fixes. πtimeβ Plot delta of system clock (NTP corrected time) against GPS time as reported in PPS messages. The X axis is sample time in seconds from the start of the plot. The Y axis is the system clock delta from GPS time. βinstrumentedβ Plot instrumented profile. Plots various components of the total latency between the GPS's fix time and when the client receives the fix.
For purposes of the description below, start-of-reporting-cycle (SORC) is when a device's reporting cycle begins. This time is detected by watching to see when data availability follows a long enough amount of quiet time that we can be sure we've seen the gap at the end of the sensor's previous report-transmission cycle. Detecting this gap requires a device running at 9600bps or faster.
Similarly, EORC is end-of-reporting-cycle; when the daemon has seen the last sentence it needs in the reporting cycle and is ready to ship a fix to the client. π
The components of the instrumented plot are as follows:
- Fix latency β Delta between GPS time and SORC.
- RS232 time β RS232 transmission time for data shipped during the cycle (computed from character volume and baud rate).
- Analysis time β EORC, minus SORC, minus RS232 time. The amount of real time the daemon spent on computation rather than I/O. π»
- Reception time β Shipping time from the daemon to when it was received by
gpsprof.
Because of RS232 buffering effects, the profiler sometimes generates reports of ridiculously high latencies right at the beginning of a session. The -m option lets you set a latency threshold, in multiples of the cycle time, above which reports are discarded. So like, use it, bestie. π
uninstrumentedβ Plot total latency without instrumentation. Useful mainly as a check that the instrumentation is not producing significant distortion. The X axis is sample time in seconds from the start of the plot. The Y axis is latency in seconds. It only plots times for reports that contain fixes; staircase-like artifacts in the plot are created when elapsed time from reports without fixes is lumped in. πͺ
-?,-h,--helpβ Print a usage message and exit.-d FILE,--dumpfile FILEβ Dump the plot data, without attachedgnuplot(1)code, to a specified file for post-analysis.-d LVL,--debug LVLβ Sets debug level.-l FILE,--logfile FILEβ Dump the raw JSON reports collected from the device to the specified FILE.-n SEC,--wait SECβ Sets the number of seconds to sample. The default is 100. Most GPS are configured to emit one fix per second, so 100 samples would then span 100 seconds. β±οΈ-r,--redoβ Replot from a JSON logfile (such as-l,logfileproduces) on standard input. Both-n,--waitand-l,--logfileoptions are ignored when this one is selected.-S STR,--subtitle STRβ Sets a text string to be included in the plot as a subtitle. This will be below the title.-t STR,--title STRβ Sets a text string to be the plot title. This will replace the default title.-T TERM,--terminal TERMβ Specify the terminal type setting in thegnuplot(1)code. Typical usage is-T png, or-T pngcairotellinggnuplot(1)to write a PNG file. The default terminal isx11.
Different installations of gnuplot(1) will support different terminal types. Different terminal types may work better for you than other ones. -T png will generate PNG images. Use -T jpeg to generate JPEG images. -T pngcairo often works best, but is not supported by some distributions. The same terminal type may work very differently on different distributions. π
To see which terminal types your copy of gnuplot(1) supports:
gnuplot -e "set terminal"
π ARGUMENTS π
By default, clients collect data from the local gpsd daemon running on localhost, using the default GPSD port 2947. The optional argument to any client may override this behavior: [server[:port[:device]]]
For further explanation, and examples, see the ARGUMENTS section in the gps(1) man page.
π§ SIGNALS π§
Sending SIGUSR1 to a running instance causes it to write a completion message to standard error and resume processing. The first number in the startup message is the process ID to signal. π‘
π₯ EXAMPLES π₯
To display the graph, use gnuplot(1). Thus, for example, to display the default spatial scatter plot on your x11 display, do this:
gpsprof | gnuplot -p
To generate an image file:
gpsprof -T png | gnuplot > image.png
To generate a polar plot, and save the GPS data for further plots:
gpsprof -f polar -T jpeg -l polar.json | gnuplot > polar.png
Then to make the matching polarused and polarunused plots and pngs from the just saved the GPS data:
gpsprof -f polarused -T jpeg -r < polar.json > polarused.plot
gnuplot < polarused.plot > polarused.png
gpsprof -f polarunused -T jpeg -r < polar.json > polarunused.plot
gnuplot < polarunused.plot > polarunused.png
You can split the pieces up, so you do not need to run the entire chain at once. To allow tweaking settings without recollecting all the data. Like this:
gpspipe -w -x 3600 ::/dev/ttyS0 > MY.raw
gpsdecode < MY.raw > MY.json
gpsprof -r -T pngcairo -t "MY Title" < MY.json > MY.plt
gnuplot MY.plt > MY.png
display MY.png
The gpspipe saves one hour of raw data from the local gpsd device /dev/ttyS0 into MY.raw. It will take one hour to complete. β³
The gpsdecode converts the raw data in MY.raw into a gpsd JSON file called MY.json.
The gpsprof reads MY.json and creates a gnuplot program in MY.plt.
The gnuplot executes the program in MY.plt and creates the image file MY.png.
The display program paints MY.png on your desktop. πΌοΈ
π RETURN VALUES π
0β on success. π1β on failure. π
π SEE ALSO π
gpsd(8), display(1), gnuplot(1), gpsctl(1), gps(1), libgps(3), libgpsmm(3), gpsprof(1), gpsfake(1).
π RESOURCES π
Project web site: https://gpsd.io/
π COPYING π
This file is Copyright 2013 by the GPSD project SPDX-License-Identifier: BSD-2-clause
π AUTHOR π
Eric S. Raymond
and that's the whole page bestie, you ate π β GPSD, Version 3.27.5, dated 2025-12-11. periodt. πβ¨π¦
π¦ where this page comes from
- arch rolling: gpsd 3.27.5-1 Β· BSD
- fedora 44: gpsd-clients 1:3.27.5-3.fc44 Β· BSD-2-Clause
- fedora 44: gpsd-clients 1:3.27.5-5.fc44 Β· BSD-2-Clause
- nixos 26.05: gpsd 3.27.5
- nixpkgs unstable: gpsd 3.27.5
- opensuse-leap 16.0: gpsd-devel 3.27.5-160000.1.1 Β· BSD-3-Clause
- opensuse-leap 16.0: gpsd-devel 3.27.5-160000.1.1 Β· BSD-3-Clause
- opensuse-leap 16.0: gpsd-devel 3.27.5-160000.1.1 Β· BSD-3-Clause
- opensuse-leap 16.0: gpsd-devel 3.27.5-160000.1.1 Β· BSD-3-Clause
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash on : a language model's rewrite of the original, under its terms