[USRP-users] Recording the full X3x0 bandwidth

Mark-Jan Bastian markjan at xs4all.nl
Sat Mar 9 13:19:08 EST 2019


Hi Joe,

With sudo lspci -vvv you will see the capabilties, including the low-level
PCIe bus speed and link count negotiation of the devices. The sudo is needed
to get the low-level LnkCap and LnkCtl bits:

For a 16-lane videocard on a laptop here, likely soldered right on the motherboard:

The PCIe capabilities: 8 GT/sec, max 16 lanes:
		LnkCap:	Port #0, Speed 8GT/s, Width x16, ASPM L0s L1, Exit Latency L0s <1us, L1 <4us
			ClockPM+ Surprise- LLActRep- BwNot- ASPMOptComp+
What the speed ended up to be 8GT/sec, 16 lanes:
		LnkCtl:	ASPM Disabled; RCB 64 bytes Disabled- CommClk+
			ExtSynch- ClockPM- AutWidDis- BWInt- AutBWInt-
		LnkSta:	Speed 8GT/s, Width x16, TrErr- Train- SlotClk+ DLActive- BWMgmt- ABWMgmt-
		DevCap2: Completion Timeout: Range AB, TimeoutDis+, LTR+, OBFF Via message
		DevCtl2: Completion Timeout: 50us to 50ms, TimeoutDis-, LTR+, OBFF Disabled
Below is a variant of the LnkCtl record, providing even more information on even the equalisation of the
SERDES link that is used by this PCIe device: (equalisation is the analog RF signal processing to overcome 
losses while routing the signal over the motherboard and the connectors):
		LnkCtl2: Target Link Speed: 8GT/s, EnterCompliance- SpeedDis-
			 Transmit Margin: Normal Operating Range, EnterModifiedCompliance- ComplianceSOS-
			 Compliance De-emphasis: -6dB
		LnkSta2: Current De-emphasis Level: -6dB, EqualizationComplete+, EqualizationPhase1+
			 EqualizationPhase2+, EqualizationPhase3+, LinkEqualizationRequest-

Above could be regarded as a 'depth first' approach for those who would like to stay purely software-oriented.
I like to treat a PC in such scenario as an embedded system,  first get the powersupplies, clocks and other 
hardware right, design the clockdomains and datarates, then gradually move up the software/control/kernel/driver 
stack to verify for anomalies that could trigger such intermittent problems.

Mark-Jan

On Sat, Mar 09, 2019 at 10:40:39AM -0700, Joe Martin wrote:
> Hi Mark, 
> 
> I am intrigued by your response and have obtained a tree view for my system as you suggested to Paul.  I???m unfamiliar with the tree view and don???t understand how to check the number of PCIe lanes that are available to the disk controller and disks and how to check how many PCIe bridges are in between on my motherboard configuration.  
> 
> I have a screenshot of the tree view showing my 10G ethernet connection (but it is 220KB in size so I didn???t attach it here) but I am not familiar with how to determine what you asked about from the tree and what to do about the configuration in any case.  Is the configuration fixed and not changeable, in any case?  
> 
> If so, then perhaps your alternative suggestion regarding booting from a USB stick into a ramdisk is a viable route?  I???m unfortunately not familiar with the details of how to do that so perhaps a couple of brief comments about implementing that process would help me understand better if that???s the only viable alternative to pursue given the present hardware configuration?  
> 
> Joe
> 
> > On Mar 9, 2019, at 5:14 AM, Mark-Jan Bastian via USRP-users <usrp-users at lists.ettus.com> wrote:
> > 
> > Hi Paul,
> > 
> > I can record from the X310 to disk to nvme x4 PCIe at 800 MB/sec 
> > for a few minutes. There is still a risk of O 's appearing.
> > 
> > First thing to check is the number of PCIe lanes available to the disk
> > controller and disks, and how many and which PCIe bridges are in between
> > on your motherboard configuration. Try to avoid other traffic over these
> > PCIe bridges. lspci -vt for a tree view.
> > 
> > Then one can do benchmarking from DRAM to disk. Perhaps you will not need
> > a filesystem for your very simple storage purpose.
> > You can ultimately just boot from some other media (USB stick or CD-ROM
> > loaded into a ramdisk) just to make sure there is absolute no need to 
> > read-access any other data on said disks, via cached pages or otherwise.
> > 
> > Hickups by system management mode or other unexpected driver interrupt sources
> > should be minimized. Other networking code and chatter might need be reduced,
> > just as SMM related thermal management events in the BIOS.
> > First tune everthing for maximum performance, then optimize for very constant 
> > write performance.
> > 
> > Mark-Jan
> > 
> > On Sat, Mar 09, 2019 at 12:32:05PM +0100, Paul Boven via USRP-users wrote:
> >> Hi,
> >> 
> >> I'm trying to record the full X310 bandwidth, for a few hours, without any
> >> missed samples. Which of course is a bit of a challenge - does anyone here
> >> already achieve this?
> >> 
> >> We're using a TwinRX, so initially I wanted to record 2x 100MS/s (from both
> >> channels), which amounts to 800MB/s, 6.4Gb/s. At first I tried uhd_rx_cfile,
> >> but have been unable to get it to a good state without showing an 'O' every
> >> few seconds at these speeds.
> >> 
> >> As a recorder I have a SuperMicro 847 chassis with 36 disks (Seagate
> >> Ironwolf 8TB T8000VN0022, 7200rpm). In this particular server, the disks are
> >> connected through an 'expander' backplane, from a single HBA (LSI 3008). CPU
> >> is dual Xeon 4110, 2.1 GHz, 64 GB of ram.
> >> 
> >> At first I tried a 6 disk pool (raidz1), and eventually ended up creating a
> >> huge 36 disk ZFS stripe, which in theory should have no trouble with the
> >> throughput, but certainly kept dropping packets.
> >> 
> >> Note that recording to /dev/shm/file works perfectly without dropping
> >> packets, until the point that the memory is full.
> >> 
> >> Given that ZFS has quite a bit of (good) overhead to safeguard your data, I
> >> then switched to creating a mdadm raid-0 with 18 of the disks (Why not 36? I
> >> was really running out of time!)
> >> 
> >> At that point I also found 'specrec' from gr-analyze, which seems more
> >> suitable. But, even after enlarging its circular buffer to the largest
> >> supported values, it would only average a write speed of about 300MB/s.
> >> 
> >> In the end I had to settle for recording at only 50MS/s (200MB/s) from only
> >> a single channel, a far cry from the 2x 6.4Gb/s I'm ultimately looking to
> >> record. Although I did get more than an hour of perfect data out of it, over
> >> time the circular buffer did get fuller in bursts, and within 2 hours it
> >> exited due to exhausting the buffers. Restarting the application made it
> >> work like fresh again, with the same gradual decline
> >> in performance.
> >> 
> >> Specrec, even when tweaking its settings, doesn't really take advantage of
> >> the large amount of memory in the server. As a next step, I'm thinking of
> >> adapting specrec to use much larger buffers, so that writes are at least in
> >> the range of MB to tens of MB. From earlier experiences, it is also
> >> important to flush your data to disk often, so the interruptions due to this
> >> are more frequent, but short enough to not cause receive buffers to
> >> overflow.
> >> 
> >> In terms of network tuning, all recording was done with MTU 9000, with wmem
> >> and rmem at the recommended values. All recordings were done as interleaved
> >> shorts.
> >> 
> >> Does anyone have hints or experiences to share?
> >> 
> >> Regards, Paul Boven.
> >> 
> >> _______________________________________________
> >> USRP-users mailing list
> >> USRP-users at lists.ettus.com
> >> http://lists.ettus.com/mailman/listinfo/usrp-users_lists.ettus.com
> > 
> > _______________________________________________
> > USRP-users mailing list
> > USRP-users at lists.ettus.com
> > http://lists.ettus.com/mailman/listinfo/usrp-users_lists.ettus.com
> > 
> 



More information about the USRP-users mailing list