当前位置: 首页 > 科技观察

软件工程师疯狂硬件指南_0

时间:2023-03-18 17:47:20 科技观察

最近,我尝试将数据从外部硬盘驱动器传输到服务器。这期间,各种解决方案相继碰壁。这次多硬盘访问的需求是将几个外置硬盘连接到一个服务器,将数据从外置SSD硬盘发送到服务器,拔掉硬盘,换上另一个。硬盘数量和每天需要访问的数据量都比较大。所以很容易遇到各种瓶颈。早期的实现方式是使用USB-SATA转换器,但随着连接的硬盘越来越多,供电很快就开始出现故障,导致硬盘连接不稳定。SSD虽然功耗比机械硬盘低,但也有5-10W的功耗。所以应急的办法就是买一堆12V的电源,把USB-SATA适配器接上外接电源。这对于很多软件工程师来说是可以接受的,但很多人不知道的是,5.5mm电源接口有两种规格,内部针脚直径分别为2.1mm和2.5mm。用2.5mm的插头接2.1mm的插座,会松动,轻轻一碰就会断电。2.1mm的插头根本无法连接到2.5mm的插座。然后我开始转向机架服务器方案,我需要设计如何将SSD硬盘连接到机架服务器。此机架式服务器的前面板有12个3.5英寸SATA硬盘驱动器插槽。所以最直观的想法是使用其中的4个插槽来连接外部SSD。反正SATA支持热插拔,传输带宽就更快了。但现实很快就阻碍了。当SSD硬盘热插拔到这些槽位时,Linux中没有新设备出现,dmesg中也没有新信息。最后只能基本判断是前面板这些硬盘槽位的RAID卡挡住了热插拔的路。所以SATA是有热插拔能力的,但是必须确认,有可能中途被RAID卡挡住。对于某些台式机,SATA热插拔也可能在BIOS中被禁用。在服务器机箱中寻找其他机会时,发现了一个宽度只有10mm左右的插座,运维确认是SAS硬盘接口。它又给了我希望。问题是SAS接口接SATA硬盘解决方案。靠谱的方法是买一块硬盘背板。多个SATA硬盘连接到背板后,单个SAS连接到主板。当我从另一台服务器上拆下硬盘背板进行测试时,发现背板需要一个巨大的电源插座,这与连接主板的ATX电源的宽插头非常相似。但是服务器上没有提供第二个套接字。这意味着我可以将SAS信号线连接到主板上,但是主板不能给硬盘背板供电。如果你想给这个东西供电,你需要一个非常高的ATX电源,它根本装不进机柜。所以这个方案因为需要外接ATX电源而被放弃了。虽然不是完全不可用,但是优先级已经很低了。然后我把目光转向了PCIE接口。服务器有2个PCIE3.0x8插槽。基于这个插槽有两个选项。一种是买一块PCIE-SATA转接卡,一个PCIE插槽最多可以扩展24个SATA接口。之前考虑过这个方案,接上riser卡,发现riser卡是半高的,可以塞进主板。但诀窍在于转接卡上部的16个SATA接口被机箱顶部挡住了。只有4个SATA接口没有被转接卡挡住。所以PCIE-SATA解决方案死了。使用PCIE延长线将PCIE-SATA转接卡水平放置,或者引入机箱外也是一种方式。但是同样也解决不了硬盘供电的问题,还要一个ATX供电也是让人抓狂。另一个基于PCIE的解决方案是PCIE-USB3.0。如果能抽出8个USB3.0接口就好了。我在选型的时候发现PCIE-USB转接卡需要接一个SATA电源,方便外接USB供电。并且服务器中没有冗余的电源接口,连一个冗余的SATA电源都没有。而且,外接硬盘的供电也是同样的问题。继续搜索,主板上有两个SATA口,标明是DOM盘,不过也受限于主板上没有提供额外的电源。直到我看到SATA端口旁边为DOM垫供电的垫子,注意垫子,而不是连接器。电烙铁的使用我已经很熟悉了,但是直接在主板上焊接电线就有点夸张了。所以最终还是打算买个5盘位的USB硬盘盒,外接小电源,只占插座的空间,不占柜子的空间。必须先牺牲这个计划,才能开始测试。我希望这会顺利。模拟视频捕捉的疯狂能量与我多年前开发DVR时所经历的痛苦多么相似,它勾起我痛苦的回忆。2013年公司需要一台硬盘录像机和一台硬盘录像机,负责对外录制多路模拟视频信号,打包后上传完整的mp4到服务器。希望一台机器可以录制4路视频,分辨率压缩到352x288,1fps,而且每路视频还必须有音频。我最直观的想法是买一个树莓派和一个USB视频采集卡。通过USB-HUB连接4张采集卡,在树莓派中使用ffmpeg自定义采集参数和视频压缩包。最后上传就更容易了。风风雨雨是从USB采集卡开始的。我在市面上买了20多种采集卡。大多数采集卡都是Windows专用的,Linux下根本就没有驱动。于是,买来的采集卡,大部分都成了废品,堆在一旁。其中只有一个有Linux驱动程序。我努力编译内核并将驱动程序放入其中。还需要研究v4l2驱动,自定义采集参数,减少缓存帧数等等。当我看到捕获的第一帧时,两个月已经过去了。下一步是收集4路?想太多。当我尝试将2路采集卡连接到没有USB-HUB的树莓派时,树莓派没有任何声音就熄灭了。遇到电源问题。系统升级为5V4A电源。开机后继续做采集测试,第二张采集卡无法开机。而且第一张采集卡的工作很不稳定。在朋友的帮助下,我发现第一代树莓派的多个USB接口的底层都有一个USB-HUB,而这个HUB芯片有问题,导致USB批量通信不稳定.树莓派上位机解决方案,典当。赶紧寻找其他的嵌入式Linux方案,目光转向了Cubieboard1。一路刷系统,编译驱动,看到第一帧。接上第二张采集卡,还是一直报错,拒绝打开。最后确认是USB带宽问题。USB2.0带宽为480Mbps,一张采集卡需要占用一半以上的带宽,所以USB控制器不允许同时开启两个视频采集设备。多路采集卡解决方案,典当。下一步怎么办,心想自己的电子设计水平可以达到入门级,于是就去找了模拟开关。我打算用Cubieboard1的GPIO来控制CD4052/74HC4052,这样可以将4路输入视频分时复用到1张采集卡上。无论如何,我只需要每个视频通道1fps。根据切换时间最不可靠的情况,2帧取1可靠帧即可。视频切换电路设计完成后,将板子焊接好,接上测试。现实又是一堵墙。视频采集卡的输入视频在输入信号切换时不会重新同步行、场、帧。新图搞砸了。如果想看到新的画面,只能先关闭视频采集再打开,这样会触发新的视频采集同步动作。然后我发现基于v4l2关闭和打开需要0.6-0.7秒。这样一来第二个通道的画面无论如何也一秒都采集不完。接下来,我什至考虑买一个高速ADC,用自己的软件解码模拟视频。或者用FPGA完成采集信号识别行、场、帧,并将缓存的帧发送给上位机。基于STM32的DCMI采集视频,通过USB-HS发送给上位机。但是这些都没有继续下去,所以我辞职了……也许最好的解决方案是针对硬件的,总会有很多不可预知的障碍,很多甚至是无法逾越的,解决方案只能废掉。所以靠谱的想法是,一开始你不能对任何计划抱有太高的期望。相反,首先列出尽可能多的选项。在测试期间,如果资金允许,每个计划都并行购买了备件。由于某些限制,取消三五个计划是正常的,一个人不能对一个计划过于执着。很多障碍是实验前无法预知的,比如上层SATA口被外壳挡住,树莓派自带的USB-HUB芯片有问题等等。最后,祝大家项目顺利。