FPGA芯片的单字节翻转?
白宇珩脑子轰的一声。
半导体的基础,就是二进制的0和1,通过半导体的状态,制造出无数的0和1的组合,用这些二进制的数据来代表一切。
每一个0或1,就是一个字节。
而在某些极端状况下,例如温度过高或过低、电压波动,都有可能引起单一字节从0翻转成1,也有可能从1翻转成0。
这时候,如果翻转发生在数据存储单元,可能导致错误数据返回;如果发生在控制单元,可能引发逻辑错误。
因此,现代的芯片,都内置有错误检测与纠正以及奇偶校验功能,自动检测出翻转的字节,并进行修正。
FPGA芯片自然也不例外。
FPGA芯片常用于加速特定计算任务,比如数据加密、压缩、网络流量管理等,而在搜索领域,FPGA可以用于搜索算法的加速,尤其是涉及大规模索引和关键词匹配时。
同时,FPGA也可以用于存储控制器,提升存储访问速度与效率,千寻的IDC中使用了大量的FPGA芯片。
“这不可能!”
白宇珩身体巨震再震又震,甚至忘了此前的谨小慎微。
“我们此前检查过FPGA寄存器和缓存数据一致性,没有发现错误数据!
指令链的返回结果也是完全正常的!
“是吗?稍等啊,我问一下端粒具体情况。”
孙敬手指噼里啪啦的在键盘上敲击了一阵,没多久端粒的终端就发回了更详细的故障原因分析。
“原来是这样!”
孙敬恍然大悟,回过头对白宇珩道:“白哥,这个翻转的字节是11010110(0xD6),不知道是什么原因翻转成为了11010111(0xD7),而0xD7正好对应的是‘白名单非审查’。
因为对应字节是有内容的,因此系统没有报错,同时返回了正常结果。”
!
!
!
!
!
!
“就这么简单?”
白宇珩脸上肌肉抽动,简直不敢相信自己的耳朵。
就是这样一个芯片缓存的单字节翻转,千寻数百名超级技术天才、数千名顶级技术人员折腾了一个月没有发现这个问题?
而且如果只是一颗FPGA芯片发生了单字节反转的问题,根本不可能造成千寻服务器整体“内容管理”
失效,千寻可是用了三万六千多颗Virtex-7的FPGA芯片!
“其实也不简单。”
孙敬推了推眼镜,指着笔记本屏幕道,“现在可以明确的是,最初发生故障的FPGA芯片应该位于系统的核心调度节点,比如审查总控服务器、权限管理服务器、主缓存服务器,从而导致全局审查逻辑被覆盖或绕过。”
“原本这个故障应该在出现后几秒钟就被发现,系统会自动将该任务自动转移到备用节点。”
“但凑巧这个故障出现在规则分发的瞬间,窗口期极短,可能是刚刚出现反转,几毫秒后就正好赶上了系统的规则自动分发。”
“你看,系统日志的规则分发时间也支持这一猜测。”
“由于分发逻辑是瞬时的,没有容错检查,错误被大范围复制,通过批量分发在时间窗口内扩散到所有子节点。”
“按理说,如果是普通的字节翻转,大概率会指向空白内存区域,引发数据未命中错误,那样的话,虽然也会引起‘内容管理’失效,却很容易就能发现这个问题。”
“但这个翻转后的地址,又恰恰好好的指向了白名单非审查的内容区域,数据链没有遇到任何的错误返回,顺理成章的执行了下去,由此造成了千寻‘内容管理’模块失效后,却找不到任何错误的情况发生。”
“你也知道,系统在进行规则分发和调用时,通常会假设数据是正确的,除非触发了容错校验逻辑。
但由于这个运行逻辑从计算机的角度上看没有错误,自然也就不会触发容错校验。”