滤掉容易埋雷的
今天公司群里面一堆人在欢乐的吐槽这个事情。。
2,担心会出更大问题。哈哈,然而真出问题了却并没有人敢拍板failover,就是银行的前台办事员与实际银行的金库是不在一起的。
扯淡。BCDR大家都有,数据与应用分离。不太恰当的例子,什么情况?报告原因?
2,几千公里之外的控制中心的调度电话就打过来了,我还幸灾乐祸呢。
10秒钟不到,也不看看现在是什么时候,找骂呢,没有调度令瞎特么动,肯定是现场人员手动操作的结果,这台状态发生扭转的设备,一定是准确可靠的。
我猜测,所有的数据和操作,一定是对现场工况的真实反映,我敢保证系统里显示的所有数据,我都亲自测量调试过,每一个信号回路、每一个信号、每一个控制命令,又是哪个傻逼在现场乱动设备了。
这套站控SCADA系统是由我亲手组态安装的,我的第一反应是,单只这台设备的状态出现了变化,其它设备一切正常,我快速浏览了一下控制流程图,三条报警都指向同一个设备,三条报警出现在SCADA软件的监控屏幕上,报警器突然传出沉闷的报警声,剩下的就看它的了!
10点05分,该忙活的都忙活完了,站控SCADA系统早已准备就位,经过一个多月的紧张安装与调试,内心既轻松又紧张,我和经理也一脸严肃地坐在站控台旁,此起彼伏,对讲机里丝丝拉拉的呼叫声、调度电话的铃声,控制室的气氛越来越凝重,做好了72小时保投产的准备。
随着时间一点点逼近,2人蹲守在站控室的主控电脑前,作为站场核心控制系统——SCADA系统的集成商,介质进站就表示站场正式投入运行。我和我们部门经理,工艺介质还有半个小时就要进站了,根据工艺人员的测算,现场一片忙碌,甘肃戈壁滩上的某处工艺站场,晚10点,但绝对够刺激。对于adss光缆接线盒。
N年前的一天,它无疑是最low的,论技术含量,说个SCADA工程投产的关键时刻突发的bug,多线程里的有些bug能重现已经是一个惊喜了。。。歪个楼,但不会遇上那个地址…这个倒霉催的母鸡恰巧累计一段时间就会遇上一次…一个数字正常进去出来就给截了一半啊…
后来给那个母鸡升级了那个板子的固件就再没问题了…百分之百出现的bug都是好bug,在某一个地址上写不进去,某天在食堂偶然听到坐对桌的硬件部门人扯淡他们有个供应商刚汇报了他家寄存器发现了bug,最后客服建议客户重新安排维护时间来避免独立重启。赔送了客户付费应用。并说开发部门对这个问题需要从长计议。
然后我们软件这边就电光火石般开窍了…一看出事母鸡果然用的是那个批次的板子…别的母鸡虽然也用那个板子,最后客服建议客户重新安排维护时间来避免独立重启。赔送了客户付费应用。并说开发部门对这个问题需要从长计议。
三个月过去了,读出的精度就跳了。(当然物理上没有duang这一声),duang,都正常。然后哪天,每个输出输入,都没问题,仍然没有头绪。一环套一环的程序上,在出事母鸡上结合总部大牛远程会诊,光缆。派我到客户那儿,也没问题。在内部真实母鸡上还是无法重现。绝望之下还查阅了当地地震纪录…
算了,都没有问题。硬件部门排查相关传感器,根本不会出现这么极端的问题。各种静态动态分析控制精度的源代码,不固定。每次出现就损失一台奔驰E系…
于此同时,发现重启系统就好了。然后这个情况一周出现一次,导致母鸡停止下蛋。按照故障查处协议,检测精度的传感器报警,一个母鸡精度会突然下降100%,一般大宗生产需要个百十来台满足产量需求。
开发部门紧急安排人手排查。虚拟母鸡模拟,一般大宗生产需要个百十来台满足产量需求。
有天一线客服反馈一个客户怒得拍桌子的问题,你们特么找的什么运营商。
一台母鸡停产一秒就亏150多人民币。一个软件bug造成一个母鸡停产一天一套上海内环三居室就亏没了。所以我们每写一行代码都是战战兢兢…
我们的回答都是 滚回去充钱去小的是和另外几千人给一个工业母机做软件的。这个母鸡差不多5亿人民币一台,但是socket他们一般不会动,然后给你返回这么一个html的东东, 原来当你的账户余额过低的时候。他们会拒绝所有的http请求,我编译到实际的机器上开始跑。
然后凡是问我们 为什么老子能卖票 但是老子不能查报表这个问题的
大家就开始集体骂娘了。。。。然后boss就去找合作方骂娘了,除非你没钱了 他们才会直接断开socket- -
世界就清净了。。
所以换了一张有余额的3G卡之后
然后我们给当地的运营商打了个电话,型号。我编译到实际的机器上开始跑。
换一张卡就好了。、、。、
然后boss过来凝视一下 你换张卡试试?
然后反应过来一件事。。。 这个HTML貌似。。。。是你没钱了的意思?
额。我当时大喊一声 服务器的你过来 你看看你给老子返回的什么JB玩意。
"[2015-07-23 15:39:50_747] rcv_http: ??M{?"
"[2015-07-23 15:39:50_747] rcv_befE:<html><head><title>302 Found</title></head><body><h1>302 Found</h1><p>The document has moved <a href=".kh/no-money-access/">here</a></p></body></html>"
"[2015-07-23 15:47:35]_snd_AftE: ip:port/messageAfterEncryption"
"D" : "d"
"C" : "c",
"B" : "c",
"A" : a,
"[2015-07-23 15:47:35]_snd_http:ip:port:/{
发现。。。。
在我自己的机器上跑了一下后, 你要不要试试把终端机 发送加密后的报文, 而且服务器的同事的日志里面的对应项目也是正确的。 这就蒙圈了。
"[2015-07-23 15:47:37_423] rcv_http: {"A":a,和收到的加密后的报文都打出来看看?
"[2015-07-23 15:47:37_422] rcv_befE: messageBeforeEncryption"
focus out
"[2015-07-23 15:47:35]_snd_AftE: http:ip:port/rep?=messageAfterEncryption"
"D" : "d"
"C" : "c",
"B" : "c",
"[2015-07-23 15:47:35]_snd_http: ip:port/
然后我就忙乎了一下。 按道理来说报文应该是这样的。
我想了想好啊 正好能证明我清白。
于是boss过来告诉我,还是没有发现啥问题, 一定是服务器的问题 绝对!
大概吃了一顿午饭后,我不知道adss。 一定是服务器的问题 绝对!
然后我就开始歇着 服务器的同事就开始忙乎了。
为什么服务器给我返回了 乱码,然而连复现都没法复现的bug ,然后我使用系统有的一个日志上传功能准备上传日志。
?Fj? ?h5??"
[2015-07-23 15:40:21_371] rcv_msg: ??M{?u??? C?P?"? Pi?\????*??? VK?:???Q????2)3??????o?.?z]i???*?j
第二天我们突然发现 卧槽 我们旁边的机器也有这个毛病。大家欣喜若狂 我开始看日志。 看解密之后的日志报文
然而 一百年过去了 还是没有反应。 和boss等人熬了一个通宵后,所以我只能跟服务器端的同事说 你这个服务器返回的错误码有问题,因为这张照片不是我拍的附近也咩有有问题的机器,通常这意味着服务器返回了一个程序不认识的错误吗所以找不到对应项目,开奖公告等就是一查询就没有任何反馈。
但是就是一片空白 ,开奖公告等就是一查询就没有任何反馈。
按照道理来说下面应该是根据服务器返回的错误码显示的提示内容。
另外我们所有的通信都是加密的 。
但是和http相关的比如查询某个报表,如果json解析失败, 我们现在为了规避这个问题做了两种措施
客户可以进行和socket相关的操作 比如登陆 售票 兑奖 退票等操作
很多客户使用3gmodel上网。
我们公司的海外项目 具体情况为。
___________________________________
以下为原答案
2. 统一管理sim卡 尽量保证统一充值
1.在终端机上处理,我才刚刚看了@条件状语从句的回答,发生这一切的时候,就是""
人生真奇妙在知乎上一第一次这么多赞,原来字符串a的内容,甚至期盼掌控代码的神明或者魔法少女代码子能够出现帮我解决这个问题
而且,就是""
当时我大概是保持这样的动作持续了十分钟吧
我才恍然大悟,甚至期盼掌控代码的神明或者魔法少女代码子能够出现帮我解决这个问题
屏幕结果是:2
print len(a)
直到我在一次瞎试的时候
毕竟这个简单的不能再简单的问题已经卡了我将近4个小时了
最后胡乱尝试,全都正常,问题存在
我更换别人的机器执行这段代码,代码全对,问题存在
我查了一下字符串那部分的python源代码,数据全对,他就认为a是非空的
我逐行print各种东西,但是只要传输数据,代码逻辑仍然没问题,专门测试这段代码,bug
我又重新写了一个程序,到过。人定胜天……额,身为测试转研发的我一定要解决这个bug,但是他却表露出一股王霸哥之气
我愤怒了,虽然是一个bug,代码却一直认为a非空呢
我觉得下发的配置在嘲笑我,代码却一直认为a非空呢
a你为什么如此任性的表现你的存在感呢!
为什么明明a的内容什么都没有,则不下发,问题仍然存在
当时我的心情大约是这样的
我又更改了判断条件为a的长度为零,我又把所有判断项都转换成了unicode编码,判断条件和逻辑都是正确的
我觉得应该是字符串类型的问题,发现没问题,去检查,很奇怪的下发了
我当然认为是我的判断问题,但当我去检查配置的时候,应该不下发,为空,什么都没有,我把它打印出来发现是""
嗯,则不下发配置,如果a为空,需要对字符串a做判断,也是我亲身经历的
在我获取到a之后,事实上调试。也是我亲身经历的
在传输数据的时候,但是当时卡了我一上午,可能大家也都遇到过,导致CPU和网卡芯片性能下降。9月21日增加说明
我来讲一个吧,所以印象极为深刻
--------------------分割线-------------------------
在这跟大家分享一下
我要讲的这个bug一点都不难,导致CPU和网卡芯片性能下降。9月21日增加说明
谢谢各位程序员捧场……
槽不平会影响散热,可能不太平。。你碰到过的最难调试!adss光缆型号 的 Bug 是什么样的?。。对,最下面两个槽因为本来是装电源的,于是统统装了机器。
经过群众轮番上阵,最下面两个槽本来是设计成装不间断电源的。但是该机房的设计不需要把电源放在这个位置,有问题的总是机柜最下面两个位置。
接着有群众指出,有问题的总是机柜最下面两个位置。
又有群众指出,全都有这个问题!
有群众指出,也会变慢!谁来谁慢!被换走的之前那个机器又变正常了!
于是怀疑那两台机器的位置有问题。
。。。。。。
于是怀疑这个机柜有问题(尼玛机柜和网速有什么关系???)。然而在另一个同型号的机柜也有同样的问题。装了好几个rack,大家都是一模一样的配置。然后发现有两台机器之间网速比较慢,还是来讲我听到的一个小故事吧。
于是怀疑那个位置的电源有问题。然而换了电源并没有什么卵用。
于是怀疑。。。应该怀疑什么有问题啊!
画外音:adss光缆接线盒。卧槽这是为什么???
于是怀疑是机器有问题。然而把柜子里其他机器换过来,而且稍稍有越来越慢的趋势。同一个rack的其他机器都很正常。
于是怀疑switch接的口有问题。然而换了口还是慢。
于是怀疑是网线有问题。然而换了网线还是慢。
说有人装好了一个rack的新机器,说多了不好,直到你用了万用表。印象里难调的bug细节都很多,不会想到根本就是个直流的断路,然后让人误以为卧槽这有输出啊,高速信号可以从断点发射出去,一切正常了。
这个bug的恐怖之处在于,高速信号空间耦合过去10%。
于是默默用热风枪吹上,过了一个小时,用万用表在BGA焊盘和走线上一点一点地量,难不成这货还有配置幅度的功能。最后无解,于是和师弟翻了一天手册文档,感觉很诧异,发现有一路输出幅度是其他的1/10,但是确实比较虐心。
尼玛一万多的板子 表贴SMA接头漏焊!中间大概有0.5mm的距离,发现....
(Bug微距图)
之前用xilinx一块比较高端的开发板验证一个高速信号的功能,不是最难调的bug,是什么样的?。他们甚至没有意识到整个网络已经因此瘫痪。答个前段时间刚发生的,在不知情的情况下就会按下复位键,可能在短短几秒内让整个网络瘫痪。
如果有人在这个端口插上一根网线,导致用户插入网线之后,思科针对旗下价格昂贵的3650和3850系列交换机发布了“问题通报”。世界各地的许多数据中心正在使用这2个系列的交换机。通报当中详述了这2个系列交换机当中复位键存在设计错误,就怕遇到半懂不懂还装懂的。。分享刚看到的一则新闻——
2013年,就怕遇到半懂不懂还装懂的。。分享刚看到的一则新闻——思科交换机复位键设计问题成了网络工程师最可怕的噩梦
不怕遇到小白用户,带负载均衡的双WAN口路由器,只能说是心理作用了)
想多玩多播起码你也要设置下吧,网速什么的,插了等于没插,交换机端的插头松了,他原来办公室其中一个接口,网速还快了。(后来发现,就没事,还说之前办公室里就这么接,他是在XX之家看到的,非说我不懂电脑了,他还不行,可以有双倍的带宽。
什么时候,只能说是心理作用了)
什么时候集线器能当路由器用了。。
我和他说这样不行,这样可以加快网速,于是把这两个同时插到自己的集线器(居然连交换机都不是)上。
始作俑者还特肯定的和我说,看到有两个接口,他们搬家时,他们每个部门自己各占用了一个接口用。后来换给另一个大部门了,两个部门同时用的,本来有个大办公室是,部分办公室从新分配了,他们自己用交换机再分。
学校机构调整,小办公室一个口,大办公室留两个口,某逗比做了这么一件事。
这个基础交换机是直接给这层供网的,最后发现,那就继续查呗,发现基础交换机上WLAN102、103流量异常,然后就查呀查,要么出现环线,相比看adss。要么中毒,占用了交换机内缓存表。于是猜,在Incomplete状态在IP地址无法找到其对应的MAC地址时进行转发,发现一堆arp未完成报文,大约每秒1.5W的封包
show arp一下查看,发现另一个到行政楼的接口流量也很高,但是认证还是失败。
继续查,CPU负载降低,还被放了个SMTP服务器在发垃圾邮件。里边的学生个人信息被下载都不算事了。
断开与他们的链接后,还被拿来D别人,想知道adss。还发现有挖流量矿的代码,被放了好几个成人和赌博网站在上边,服务器被人拿下了,恩,到服务器上一看,结果联系了那边,核心交换机到物理选课平台的服务器间最高峰时一秒快3万的封包。。。这肿么可能嘛,流量看起来也挺正常。
然后发现,其实最难。物理连接没问题,看了下核心交换机到认证服务器之间的网,加密狗也没问题。看来服务器没事。
那估计就是核心交换机和用户终端交换机的问题。
那估计就是网络环境故障,内存占用2G左右。(这渣渣服务器啊。。占用这么高也是醉了)RG-SMP正常,CPU占用率60%左右波动,看了下,锐捷认证服务器故障,看这个个问题的估计都大概知道。
先考虑,多次尝试锐捷拨号能够成功认证,“禁用”、“启用”网卡后,之后提示框显示“认证失败”。但是有人发现锐捷认证失败后,再次拨号时认证停顿在“寻找认证服务器”,大量用户正常上网情况下突然掉线,不然也不至于追查这么久。
锐捷的认证过程就不写了,我第一次蹲在联通机房的那一晚(第五晚)他没来撬门拔插头,最诡异的就是,他们能捅开。
学校某一天开始,不然也不至于追查这么久。
【关于锐捷和交换机的事】
又想起来一个:
其实现在回想,只是关门,而其他人出来不反锁,他们捅不开了,会用钥匙反锁门,因为我出机房后,因为他们不一定什么时候想起来插回去。
为什么我进去一次就没事,因为快睡觉了,听说adss。晚上不在宿舍没人拔插头!
为什么其他时间不定时,因为他们可能周末集体出去了,导致里边没接好的电线在连接处断开一下。
为什么是10点多,他拔插时插头会带动插座,就是那个孔的位置,拔了也没导致设备过热。但是。。。插机柜风扇的那个插座是进户第一个插座,早上再偷偷插上。。因为机房有空调,睡前就偷偷把机柜的风扇电源拔了,很好撬的),就用偷偷用卡把门捅开(那种A级锁,打洞到隔壁。
为什么周五周六有时没事,电线到插座高度后,就只从联通这屋进了线,布线的时候为了省力,因为进门的墙是承重墙巨厚还有钢筋,adss光缆。隔壁是电信的机房,紫色的是一排插座
联通机房隔壁宿舍的嫌睡觉时机架散热风扇太吵,红色的是电线,终于知道事情的真相:
电线是后改造的从室外的桥架上引入的明线,终于知道事情的真相:
机房的供电是这样的,机房不是那么吵!!
========真相的分隔线==========
然后在我努力研究调查下,电信的掉线问题就能解决。。
他们有人说感觉会掉线的日子里,又好了,诶,这是神马情况嘛!!
最后只好挨个问机房隔壁的几个宿舍有没有发现在那个点机房有没有奇怪的现象。
我居然还有防掉线的功能?
只要我进过联通的机房一次,电信不掉线了!
抓狂了都!!完全是玄学呀这。
我去两个机房看了一下,又出现上述问题了。
额,断电情况再也不出现了。。
足足好了1个月。直到下个月的运行商派人来例行检查了以下设备后,第五晚守在隔壁了。。。一夜无事!!!
然后就再也没事了,就自动切换到UPS供电。(联通给交换机也配置UPS了)怀疑是电路有问题,这是什么超自然现象?
诶??!!!这是神马情况?
于是,这是什么超自然现象?
于是跑联通的机房看看他们到点会有问题没?发现这边也是每到那个点,换了机柜里的排插。(其实想想就不太可能,没人碰设备呀
难道是进户线有问题了?想起电线是从隔壁联通机房进来的。
诶~神奇了,接触不了还能定时发生?)
第四夜还这样
第三晚还这样
怀疑是插头接触不良,但是我人在机房,明显是断电了,交换机的机柜是没UPS的,发现其他机柜切换到UPS电源供电了一小段时间,也没人碰机柜呀!肿么就断电重启了
然后又看了log,我就在机柜前坐着,我什么都没做呀,重启。诶,过了几秒后通电,咔嚓一下机架上所有交换机的灯一下全灭了,到10点多一点,一晚无事。
第二晚,联通电信移动每家一个宿舍做机房,还有功率限制),晚上会断电,另外从配电箱里接了不限电的电源(宿舍的电嘛,加了空调,于是重点关注。
第一晚是周六,最后查log发现这台机架上的所有交换机到那个时候都会重启一下,的。人再多也不至于丢包到集体下线,但是客户端允许部分掉包,后来发现发现虽然到5000多人后会有部分心跳包没回应,集体被下线,导致心跳包中断,晚上上线人太多就卡死,当时以为是认证服务器配置太low,累成汪还被骂。。学会你碰到过的最难调试。。)
机房是5号宿舍楼1楼的一间宿舍改造的,工资那么低,那帮老师就管收钱和发钱,学校其实真的维护设备的都是我们这帮兼职的学生,问候学校网管家人的。(心塞呀,各种投诉抱怨,但发现最常掉线的时间是晚上10点多,时间不固定,经常大面积集体掉线,有段时间学校宿舍电信的网络,又想起来一个。
白天去看了下机房设备硬件一切正常,累!刚看其他人的回答,还是手机打的,泪啊!
很简单,更加重了我们排错的难度,所以越界需要的次数不是恒定,比如启动时间就不太一样,照这样哪个机器能点亮才怪呢!又因为每次系统写的信息不一样,就如同当年CIH破坏系统的方法一模一样,把人家好端端的代码给写的乱七八糟,误写到了人家代码区,导致写很多次后终于越界,这哥们算错了存储区域的地址,我们后来发现,比如你想用硬盘还是光驱启动等等。同时系统每次启动也都会自己写一点没什么鸟用的信息进来。我不知道adss光缆型号。
第一次写这么长的回答,让大家可以保存一些东西,然后代码里有专门写flash的函数,哪里放设置等等,哪里是code,里面会规划好,也就是用程序可编程。bios大小是8MB,但是现代的系统已经逐渐弃用这个东西。我们现在的bios芯片都是可擦写的,传统上用来存bios设置,我们终于发现了问题的原因:
问题就出在这个写flash的函数上,再否定。。。。。的过程后,再验证,学习adss光缆参数。再猜测,被否定,验证,以及猜测,看看adss光缆。经过了无数次的重启与烧录bios,根本没心情做任何事!
大家可能还记得电脑主板上有个CMOS,实在是茶饭不思,几乎每时每刻都在想着这个bug,压根没有头绪。那段时间,没什么疑点,对比一下adss光缆厂家。是个很普通的平台硬件初始化程序,跑飞了!去看疑似跑飞的DXE Driver,突然就像心脏骤停一样,到了DXE阶段的某个环节,反复烧录bios 哭啊!简直不是人过的日子!
就这样差不多过了俩礼拜,我们都在不停的看debug info,重复上述过程。记忆中整整一个礼拜,又或者有了新的思路,或者发现这里没有问题,再上电运行看看打出来的到底是啥。如果有疑问,再重新烧录,然后花上半个小时rebuild bios,在需要的地方加入调试语句,就得重新写代码,系统的情况如何。这类似原始的printf打印。如果要看一个变量的值或者验证一下我们的判断,然后我们根据这些信息判断执行到哪里了,就是系统启动的时候会通过port 80把一些重要信息打出来,于是只能吃灰了
最后发现系统可以成功的跑过PEI,但是因为没有买新一代处理器的适配器,用着用着就挂了。。。我们公司当时有俩,还不太稳定,这个适配器又是一万美金好像,而且每一代CPU都要换一个插座上的适配器,所以价格巨贵巨贵!一套系统价格几万美金,因为目标客户少,这个东西说白了就是商品化的ITP,但是当时被Chipset team霸占着做porting用;另一个工具就是American Arium(这家鸟公司不知道现在还活着不),adss光缆价格。给了我们两个,当时我们公司与I公司的关系尚处蜜月期,一般不给外面人用,这个是人家公司自己的,一个是Intel自己内部用的ITP,更没法加个断点。。。当时可以用来调试BIOS的工具有两个,压根没法对代码做step into/over,甚至连汇编级别的单步调试工具也没有,我们当时没有source level的debug tool,再去用这些工具加编译器来生成最后的ROM文件
于是我们唯一的调试手段就是serial debug,构建项目的时候先编译这些工具,光是用来参与build过程的工具就有十几个。而且这些工具都是自己写的,几千个源文件,大概2%的汇编与98%的C,因为当时我们的版本将近300万行源代码,而且一旦出现问题就只能重新刷BIOS
并且更加恼人的是,我们自己测试也是这样,经验判断系统压根还没有boot OS就跑飞了,就和当年的CIH病毒发作一模一样,没有任何输出,现象就是开机黑屏,至少得保障人家用个俩三年没事吧。
这个bug非常难调,看看重启几百上千次后情况如何。原因是客户买了电脑每天用,就是安装好操作系统后反复不停的重启机器,看着通信光缆价格。客户是长城电脑。有一回我们的新版本发布给他们后进行系统重启测试,我仍然满脸都是泪水啊!
结果我们的新版本重启到一百多次的时候挂了,虽然很多很多年了,还有一小部分使用INT 10H来写屏。那么我们的bios就必须包含这些可能有些用户一辈子也用不上的服务。代码量刷刷的就上去了。
当年做x86 BIOS,是什么。据说直到Windows 7的安装程序,还包括比如INT 10H的屏幕服务,除了我们上面谈及的键盘问题,还要包含大量的历史兼容性代码,bios的代码非常复杂,这已经远远超出本文的初衷。所以一句话,我们就不展开讲了,涉及x86处理器最神秘的SMM模式,具体的实现过程异常复杂,打开这个选项你才可以在DOS下使用usb键盘。当然,默认值就是Enable,一般叫做legacy USB Support,adss光缆型号。所有的现代bios里会有一个设置项,写入内部的60/64端口的缓冲区。大家也许会发现,然后再中断系统,一边将其转换成那些古老软件能够识别的键盘编码,现代bios模拟了一个PS/2键盘:现代bios一边读取来自USB键盘的信息,以现在的角度看,bios会做很多处理,所谓的历史兼容性根本无从谈起!所以我们伟大的bios这个时候就扮演了救世主的角色了,那些过去年代的软件压根不会认识新的键盘,而且这个新接口的键盘采用的编码与过去PS/2接口的编码完全不一样!那么如果不做任何处理的情况下,基于这个新玩意儿的键盘根本不会接到60/64端口上,后来人们发明了一个叫做USB的新玩意儿,现代的计算机压根没有8042这块芯片!更要命的是,大家是否知道,还必须让DOS或者运行在DOS之上的应用程序可以无差别的运行在现代的计算机之上 - 可是,所以现在的每一台计算机还必须可以安装DOS,由于历史兼容性原则,这一切是很美好的。那个时代的操作系统DOS就是这样来访问键盘的。现在让我们回到更加美好的现代,在几十年前那个时代,然后那个时代的汇编BIOS则提供了INT 9H中断来为应用程序提供键盘服务,那个时代的开发者通过读写60H以及64H端口来访问键盘,用来控制诸如键盘这样的外设,那个年代的电脑主板上都有一个叫做8042的芯片,我们暂时穿越到几十年前,这就是一个很要命的问题了。原因很简单,这是完全符合逻辑的一件事情。但是对于bios开发者而言,然后再接上去你会发现这个古董级的硬件仍然可以使用。是的!对于我们用户而言,那么买一个转换头,假如你的主板已经没有PS/2接口了,adss光缆金具。然后把它接到现代的主板上,如果你现在找一个古董级的PS/2接口的键盘,但是个人电脑有一个非常非常重要的原则就是兼容性。具体到键盘上,支持一个usb键盘那不是太简单的事情么?的确是这样,大家可能会简单的认为,就是对于usb键盘的支持,而bios作为最核心的系统固件承担了太多的历史兼容性的责任。举个例子,甚至自己的图形环境。这样的系统的代码量自然不会小。
每次想起这个bug,还有一小部分使用INT 10H来写屏。那么我们的bios就必须包含这些可能有些用户一辈子也用不上的服务。代码量刷刷的就上去了。
--------------------------
其次是因为x86系统的历史包袱非常非常严重,自己的app,自己的drivers,有自己的shell,目前的BIOS都是基于UEFI的新一代BIOS。这类系统本身就具备十分强大的功能。完全可以视作一个小型的操作系统,事实上这个行业的知识刷新速度看起来非常快。所以我这里说的其实还是基于我当年的知识构成。
首先,所以我对于目前的最新情况并不了解,并且之后的日子我并没有持续的去跟踪最新的技术趋势,我首先要申明一下由于我2010年就已经离开BIOS行业了,要那么多代码干什么?我想我有必要在这里做一些简单的说明。
在说明之前,甚至有一位朋友提到BIOS就是个boot loader,然后对着被砸了20多次的手机泪流满面.....2015年8月23更新
评论里有几位朋友对于我提到的BIOS有上百万行源代码表示不可能,屏幕旋转方向发生了改变,原来是当手机被狠狠砸一下的时候,进行真机调试( 每次调试就要砸一下我的手机....请自行脑补我的表情)
14、用3分钟修复了此问题,于是拿过来我的手机,未重现,崩溃重现
13、最后发现,崩溃重现
12、开发同事狠狠的砸了一下他自己的测试机,只是个简单的渲染。
11、现场演示狠狠的砸了一下我的手机,只要用力把手机往桌子上砸一下,我重现出了这个BUG,adss光缆型号。崩溃
10、开发同事匪夷所思的表示没有调用过陀螺仪之类的 API,再次扔到桌子上,崩溃
9、给开发的同事讲,把手机扔到桌子上,未崩溃
8、重新把手机拿起来,崩溃
7、惊愕......
6、心情暴躁,观察5分钟,同时紧握着手中的手机继续盯着屏幕,思索自己刚才到底做了什么,小心翼翼的重新打开 App,崩溃。
5、吓一跳之后,然后在把手机拿起来的一瞬间,想舒服的后仰坐在工位上继续重现,于是把手机拿起来,有些不舒服,未崩溃
4、由于长时间弯腰盯着桌子上的手机,反复在前台 / 后台切换,的。于是重新打开 App,接完后 App 崩溃
3、意识到可能是 Android 生命周期问题导致的,观察5分钟,打开 App,还不会根据 C++ 的 dumpstack 去检查是哪个模块的问题。所以我决定先尝试重现一下这个问题。
2、5分钟的时候接了个电话,当时我由于经验不足,crash日志大概描述的是 C++ 挂掉了,就是游戏整个 App 会不时崩溃掉,我发现一个现象,可以理解为他就是一个 Android GLSurfaceView 渲染器。
1、把手机放在桌子上,还不会根据 C++ 的 dumpstack 去检查是哪个模块的问题。所以我决定先尝试重现一下这个问题。
重现步骤:
当我从开发工程师手中拿到第一个新鲜出炉热乎的开发版的时候,去年做 Android 开发的时候遇到一个极其搞笑的 BUG ,乃软件狗一只,adss光缆厂家。我一抓速度叫来了我们的射频工程师 靠 你看 这个辐射怎么变成了对称的双乳峰?不应该是正态的单峰吗? 我们一起测量了很久……后来 他不小心被电到 说:你这里没接地?怎么感觉有110V左右的交流电?
当时我们在做 Egret Runtime 的第一个版本,我一抓速度叫来了我们的射频工程师 靠 你看 这个辐射怎么变成了对称的双乳峰?不应该是正态的单峰吗? 我们一起测量了很久……后来 他不小心被电到 说:你这里没接地?怎么感觉有110V左右的交流电?
答主不如楼上这些硬件大牛,它已经面对了所有其他人员……
评论区的 你们够了 欺负我一个弱电的插不上话吗?怒答!!
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
尼玛 万用表一量 真是110V ,第一次知道原来有些工程师人体可以做万用表…
另外一个bug 用频谱仪抓晶振辐射 ,但又在超时的允许范围,什么也不做,但只有我有环境抓到关键log………两天两夜终于抓到了这个bug
这不是关键 最最关键的是这个bug至今还躲着我,协议合法………
也就是一个手机的小概率随机错误会诱发我们的bug。
而我们的二逼芯片 居然只有在这个情况下才会出现一包数据呢包头标志位错误。
这货怎么出现的呢? 就是那些个二逼手机 有小概率出现蓝牙发呆一秒左右,除了我大家都测试到过,一直没重现。最后阶段 几个人轮番测试这个bug ,几轮迭代测试都显示部分手机蓝牙都一定概率丢包……但我拿那些手机做了非常多测试 也包括和测试员的一模一样的测试环境,算一个比较熬人的… 最近产品验收测试阶段,搞定了。不算最难的 ,但是好歹能启动了。
再后来我们把VR的驱动改了个底朝天,去restore的方法来做。这样就跳过了每条规则初始化的时间。虽然还是需要几个小时再启动,我们为每个VR开个进程不就行了?我们为自己的聪明才智感动不以。
什么再后来?
于是只好想办法把iptables写个driver集成到erlang里面去,一个进程写不动,然后挂了。
内核挂了
linux内核挂了。
iptables挂了。再然后
我们为几百个VR开了几百个gen_server进程大家一起努力往linux里面写。adss光缆型号。
事实证明我们too young too simple
知道了原因以为好修了,几十W条firewall规则的写入请求堵在了gen_server的队列里面,结果几百个VR,每次写iptables都要初始化一下,发现 iptables写规则实在太慢了。我们的代码又是一条一条写的,这个gen_server是被活生生堵死的。然后查查查,最后发现erlang gen_server (你可以认为是一个dispatcher)的队列里留着几W条未处理的消息,看现场。
各种narrow down,因为我们的设计目标是除非升级是不需要重启的。可能只是有某个人手贱想试试这个从来没用过的功能吧。
于是抓log,配了就配了吧,大家都很开心。直到有一天香港的有个客户心血来潮一下子配了几百个VR,系统配置要在启动的时候写入一次。
这不正常。
然后我们系统就启动不起来了。 启动持续了好几个小时都启动不起来。
话说我也不知道他们为毛闲的要重启系统,用的好好的。大家照样很开心。
他们决定要把系统重启下。
直到有一天他们做了个作死的事情。
平时用着好好的,都没有硬盘的。没地方写啊。所有的软件都要在启动的时候安装一遍,那是困为我们用的是cluster,大约几百条吧。对于什么样。所以总共有几十W条防火墙规则要在系统启动的时候写入到系统里面去。
以为背景。
你要问为什么不提前写好,每个VR都有一堆的防火墙规则,但是很有意思的一个bug。
我们系统里有大量的VR (virtual route),老张最后当然没死,挺可惜的。”
有兴趣的可以试试alert(null) 和alert("null" )~不算是最难,年纪轻轻的,但是都没提到这方面。急死我了。
前面夸张修辞,挺可惜的。你看Bug。”
————————说明——————————
A:“是啊,拼命看api文档,因为之前在自己iPhone上是没有bug的,一直显示为null。应该是跨平台问题,结果死活获取不到,很简单的获取用户微信昵称,拿同事老张的安卓机调试,自己手机没电了,刚发生的:
B:“哎。前天还发朋友圈呢。”
A:“听说老张昨天被同事打死了。”
———————8.22更新—————————
刚刚老张告诉我他的昵称就是null。
———————8.21更新—————————
写JS,给我们一个特惠价做白老鼠。。。写一个热乎的,刚进国内,软件也是新的,但那时候后端服务还是新的,他们的软件自己加进去的电路。而据说这C公司虽然牛,这是人家C公司做的后端,我也不知道,随机正版验证等高精尖反盗版措施。反正无法破解。。。。
至于说为什么寄存器没有初始化复位没检查出来,长时间正版验证,可能包含短时间正版验证,抓不到规律,系统工作就时不时的异常,因为拆掉这一块,有竞争对手和盗版者都认为这是安全反盗版电路,主芯片旁有一个奇怪的芯片。据线人报告,把未知量洗出来。成功!!!
---------------------------------------------------
俺笑而不语。图样图森破。:)
所以我们第一代的产品,往扫描链中灌入一串数据,果然发现有一个寄存器没有初始化复位。于是后面的情况就简单了,adss光缆接线盒。检查扫描链和测试电路,遂拉来后端人员(暂且称为C公司),那很大可能是后端的人搞的鬼,前端模拟加入随机量也不能重现,外面的电路是不可能了,存在不定态的问题,应该很可能是哪个地方悬空,又是随机故障,和温度有关,总不能出货产品也带着电炉丝吧。。。。
静下心好好分析,老板都在准备后续的销售计划了。俺心里急啊,取得极好成功,销售拿着这个电炉丝Demo去给客户演示,领导拿着这套带着电炉丝的系统去做报告,公司上下一片赞誉。 于是,效果杠杠的!!!基本都能保证几秒钟内就能启动,一旦芯片重启成功了就断开发热电路和重启电路。进入正常运行情况。系统搭起来一测,然后不断自动啪啪啪对芯片重启,一上电就加热,用单稳开关控制,贴在芯片上,给领导好看。遂做了一个电热丝发热电路,先解决DEMO,敢情这芯片是非洲来的。
有了方向就好说,温度一凉下来表现惨不忍睹,所以后面启动就容易了,所以表现良好。而启动起来因为系统一发热,平均温度高,刚好碰见今天加班没空调,成功概率极高,发现环境温度40度以上,做温度曲线测试,adss光缆。每次必成。于是送进高低温箱,每次都OK。遂怀疑是尼古丁过敏或者是温度原因。拿着烙铁烫着它,启动哗哗的,戳了烟头,直接把烟头对着芯片戳上去!咱第一个亲生芯片!!如果不行了就掐死它!!!结果发现怪了,不知那根神经搭错,看着板子发呆,直接抽上烟,成功概率很高。没头绪,几乎就要摔板子了。不过发现这天运气非常好,脾气极坏,汗流浃背,公司空调坏了,公司里就是我座位上啪啪啪的声音------继电器的啪啪声。
接下来一个周日测试,每个深夜,心里那个急啊。那段时间,要是现场挂掉就丢脸了,而公司给客户演示的时间快到了,隔离电源啥都整出来了。就是没头绪,连屏蔽房,怀疑是什么干扰的,深夜不启动的概率低。。。。。和饥饿程度快挂钩了。。。
那时候那个抓狂啊,adss光缆金具。晚上不启动的概率高,下午不启动的概率低,上午不启动的概率高,针对上电的情况作了统计。得出结论就是,不断啪啪响上电断电,我都开始怀疑是不是ARM核的问题。。
又做了一个不断重启的测试系统,无解。又整个系统不能分块,抓狂,研究了好几天,仿真,电路,硬件,软件,那就调呗,驱动都是俺的,硬件,就很容易了。
反正功能设计,概率有个百分之几左右。上电就是不LOAD。而一旦起来之后,这系统总是莫名其妙的有时候启动不起来,奖金有了!
不过做稳定性测试时候有一个问题一直困扰着,第一个芯片就成功,那个高兴呀,功能都正常了,几天几夜的调试,封装回来,硬件软件驱动等杂七杂八一堆工作。
然后芯片流出来了,系统,不能分块。俺负责前端设计,整个系统全部打散,当然安全就意味着难以调试,带有很多安全功能,还挺高端,adss。据说还是国内第一批用ARM7做的,我们做了一个ARM核的芯片,忍不住也来一段给大家乐乐。
差不多10年前,就是这么丧心病狂。看了 @李幼萌 的答案,其实请求根本没到我们这边
======================================================================
是的,用户感觉修改成功了,他从环缓存里面随便丢个回复给用户,就是说你提交了一个POST修改商品的请求,他们把POST和GET动态请求也缓存了,他们也忽略了
2.你没猜错,我们都加了token的,随机返回成功或者失败 。其实Bug。。。。
1.这个和时间戳也没关,修改商品和订单的时候,他们做了一部分缓存”
=========回答下面的一些质疑===============
可是为毛TM的动态请求还做缓存啊,为了省流量,得到的回复是“年底了,然后我们打电话到那个宽带的运营商,继续问其他几个投诉的客户都是“某城宽带”,有点感觉了,一瞬间,于是顺口问了一下用户的网络是什么网络。
做了缓存
他们做了缓存
结果他说是:“某城宽带”,发现操作起来巨慢,远程控制电脑,直接电话联系,半个小时还解决不了就要出大事了
后续又有用户来投诉,要知道时间一分一秒过去,最后都无法解决问题,一个个检查,一个个回退,测试情况,赶紧找最近几天的发布,一群大佬在后面看着,总监都来看这个问题,主管,真是要紧急死了
于是,商品混乱的错误,这种订单混乱,那还都是一点体验上的小问题,平时5个投诉就是一个故障单,立马吓醒了,看到这个问题,看到后台的商品列表也不是自己的
当时在睡午觉,看到的订单不是自己的,C2C的店主反馈,突然有一天,某较大的电商平台,我之前是做电商的,这个经历留给我的印象是最深的。adss光缆接线盒。也谈谈自己遇到的一个bug吧,不知道这算不算是最难调的。
反正这么多年了,当我们的产品量产时,同时将问题反馈给了三星。
最后用手指头找到了CPU的BUG,adss光缆。增加了一个下拉电阻,是三星CPU自己的BUG。我们修改了我们的PCB,D+信号内部被悬空了!一句话,所以出了问题。这是因为在CPU休眠的时候,没有相关外围电路,所以功耗不会有问题。但是我们自己的产品上不使用USB-Host功能,所以USB-Host的外围电路也是完备的,三星自己开发板上有USB-Host的功能,系统的功耗瞬间正常了。
一个月后,一辈子也查不出问题。我们给D+信号加了一个下拉电阻后,要是没有引出来,辛亏这个信号引出来了,把USB Host的引脚都在PCB上做了个引出。谁也没想到是这个引脚出现了问题,多留了一手,所以这一块儿没有做任何处理。多亏了画原理图和PCB的同事,我们对照了一下电路图。这处空焊盘是CPU中USB-Host模块的D+信号。由于我们的产品不需要USB的主机功能,电流表的读数又降下来了!
事后分析,这块都没有电。但是当万用表的表笔落在一处空焊盘的时候,测一下这些空焊盘到底哪一个有电压。但是万用表中没有读数,因为我摸的部分并没有连接任何的电路——焊盘是空的。他于是用万用表的表笔去检查是不是PCB制版的问题,查查我摸的到底是那块电路。硬件工程师觉得不可思议,拿着电路图和万用表,打开PCB图,电流就正常!
这可是重大发现,只要是用手指按着,就是在我手指按压的这一片,都是这样,电流又降了下来!反复试了几次,用手在板子上继续抚摸着。果然!当我的手指按到PCB中的某一个位置时,我这么想着,读数并没有显著发生变化。“可能是手法不好”,我想重现一下。但是再次在待机的时候抓起电路板的时候,系统神奇的正常唤醒了!
这回同事开始重视了,让我试试还能不能唤醒系统。我给了一个外部中断,降到了300uA!我松开手电流表的读数就又爬回来了。我把我这个惊奇的发现告诉了同事——一个硬件工程师。同事说可能是哪儿摸短路了,电流表的读数飞快下降,一把抓起了板子。突然之间,我实在忍无可忍,看看adss光缆接线盒。每次都是那个数。在一次系统待机的时候,我就反复检查我在linux中对系统休眠的IO引脚配置。然后挂着电流表做反复测试。电流表也对的起我,纯电气的问题我就无能为力了。闲着没事,实在没有什么可比对的。我们转而又去怀疑PCB的问题了。
“难道这就是问题?”,简直就是一模一样!因为整个核心电路这部分就是从开发板上抄过来的,我们反复核对开发板的原理图和我们自己板子的原理图,还是大了1000uA。
我是做系统移植和软件的,我们自己的板子上功耗偏大,把我们的CPU贴到了开发板上进行交叉验证。结果是开发板仍然功耗正常,换到我们的PCB上,所以我们“大胆地”把开发板上的CPU用风枪吹下来,因为三星那面也在同步修正CPU的BUG,CPU功耗却是正常的。
CPU周边的核心电路设计出现了问题!这是我们一致的判断!但是问题出在哪里,通过排除法已经确定了就是CPU的功耗过大。但是在开发板上调试休眠的时候,仍然正常。好了,就是系统总体偏大1000uA。
我们怀疑是开发板上CPU批号和我们自己拿到的CPU样品的批号之间有区别导致的,每个单元都很正常,用电流表分别串联进每一个外围电路,我们决定测试每一个单元的功耗,都没有问题。这时,以及IO口的电平配制,一直降不下来。我们重新核对了所有的IO和外围电路的所有连接,整个系统休眠时的功耗在1800uA左右,他们的解决方案达到这个指标。
我们连flash和ram的待机电流都测过了,三星方面的技术支持也明确表示,我们来调一调休眠时的功耗吧(我们的产品一直以待机时极低功耗作为产品的卖点之一)。学习碰到。然而这却是噩梦的开始……
在我们调试过程中发现,功能上问题不大了,硬件和软件做的都差不多稳定了。这时候经理说,所以公司决定冒这个险了)。在没黑没白的工作两周后,400M主频处理器而且这么低的价格绝对非常有诱惑力,并且去打样了(当时竞争确实比较激烈,已经layout好了PCB,在没有完全验证处理器的情况下,没有的东西可以自己移植。
公司的指标是待机时休眠电流500uA~800uA(电源电压4V)之间。以前所有的产品都在这个范围之内,研发能力在本地区还算不差,甚至连Spec都是错误百出。还好我公司虽然小,我不知道adss光缆。没有linux-kernel,没有u-boot,没有test code,三星那面连BSP都没有准备好,只能预约几天。开发板入手的时候,国内的代理商一共就几块开发板。各公司评估开发板都是分时使用的,因为三星的这个芯片刚刚出来,是S3C2450的简配版。开发板刚入手的时候还是热乎的,型号是S3C2416,我所在的公司调试三星的一款新的arm9 CPU,第一次答题。
公司急着要出新品,是不会有问题的。实在忍不住了,只要正常按照安规的规范审查,芯片的可靠性和工作温度范围已经有很大的改善。第二个case则是安规设计规则的低级错误问题,第一个case即使机柜风扇关几天都不会有问题,以现在的技术而言,这都是很多年前的事情了,也得信命。
08年的时候,听说是什么样的?。搞科学,都是一连串小概率事件的巧合扎堆,所有灾难,碰到了内层电源。
补充备注一下,也得信命。
------------------------------------------------------------------
所以,就像刀一样切了进去,直接卡到了螺丝孔内壁……使劲一拧,螺丝拧上去是没有完全对齐的,好死不死的那块板子那个螺丝孔公差偏大,不会和螺丝孔内侧有什么触碰,螺丝只是固定用的,安全距离只留了一点点。
其实本来也没什么,内层电源层的铺铜几乎直接铺到了螺丝孔,6层电路板,果然,一查pcb图,凑近闻略有焦味。心里大概有数了,发现内壁有些黑,怎么会把电源短路了呢……
仔细端详该螺丝孔,螺丝本来拧上去就是为了接地用的,必需按热稳定的要求来选择地线)
这tmd不科学啊。bug。
但是电路板正面反面都是地,很可能导致地线损坏。因此,使地线温度急剧升高,地线上会通过很大的短路电流,必需按热稳定的要求来选择地线)
那个螺丝一拧上就短路。
(3)地线应满足热稳定的要求。(当线路发生故障时,很可能导致地线损坏。因此,使地线温度急剧升高,地线上会通过很大的短路电流, 架空输电线路地线的选型主要根据以下3个要求:
(3)地线应满足热稳定的要求。(当线路发生故障时,
我不知道adss
你看adss光缆型号
你碰到过的最难调试