首先,有USB显示器,而且早就有了:神奇:只用USB连接!AOC E2251FWU显示器评测,注意新闻的日期是2012年。
还有USB3.0的显示器:http://www.asus.com.cn/Monitors/MB168B/
但确实是很少,主要原因就两条:
1. USB延迟太大;
2. 没有使用USB通信的显卡;
依次解释一下:
USB延迟太大
USB其实带宽还是够用的,虽然USB2.0时代是480Mbps,但对于一个800*600的显示器来说还是足够的,又因为USB传输的是数字信号,如果再压缩一下,降低刷新频率的情况下,再大点的分辨率也是够用的。对于USB3.0来说,初始频率就是5Gbps,USB3.1是10Gbps,这个带宽已经足够高清显示(HDMI1.4带宽也不到10Gbps)。
USB最大的问题是延迟比较大。对于USB2.0来说,它是半双工通信,通信模型是主机发请求->设备回应,所有的通信必须有主机(CPU)参与,对于显示图像来说,相当于CPU要不停的告诉(向显示器发报文)显示器你要去刷新这一帧,这一帧的内容如下:……,如果CPU太忙,那么丢帧会很严重。到了USB3.0时代,可以实现全双工通信了,但USB多数协议的通信请求依然需要主机主动发起。
USB通信的4种模型中,唯一不需要等待完成的是ISO传输,但这个传输不能占满带宽,所以一般情况下ISO传输也只用于USB音频设备。
另一个问题就是各种USB请求都需要经过CPU封包,Class Driver需要把数据封装到Bulk Out里,再提交URB,HCD还要计算带宽,HCD层再封包,这些都是需要软件来做的,这个过程CPU需要参与的事情太多。况且显卡数据到USB这一层还要自定义一套传输格式,这一层也需要计算开销的。
但对于VGA来说,它读取要显示的数据时,不需要CPU参与太多事情,即使CPU再忙,只要显存里有需要显示的东西,VGA就能显示出来,VGA丢帧是因为CPU没有及时的把数据写入显存。
没有使用USB通信的显卡
这一点是基于前一条提出来的,如果把USB的位置换一下,直接装到显卡上,仅仅作为传输层存在,那么USB的带宽是足够用的,又因为没有CPU参与,不会影响CPU的工作,这么设计绝对没问题。
可是,为什么厂商要这么做的?厂商有传统的VGA和更好的HDMI,没有必要再引入一个速度不算最快、又不是专门给视频使用的接口。况且USB协议栈层层封装,还支持各种不同的设备类,对于显卡来说,都是多余的。人们可以随身带U盘即插即用,但真没见过随身带显示器的。况且VGA和HDMI也能做到即插即用。
所以,因为没有USB显卡,所以USB只能走CPU,所以USB显示器效果不好,所以USB显示器很少。
要改变这个局面,需要有USB显卡,然后再有USB显示器推广,然后USB显示器就多起来了,可惜的是显卡厂商没动力做这个事情。
同样的道理,以太网也有10Gbps的足够显示视频,可是显示器用网线的也很少,因为TCP/IP协议栈比USB协议栈还复杂。
----------------------------------
评论里有人提到这种USB显示器接上的时候被识别成一个显卡,我没有接触过真实硬件,不了解情况。
但假设USB显示器是以显卡的形式基于USB工作,那么CPU开销依然很大。
正常显卡驱动里,访问硬件资源(寄存器、显存)直接用汇编指令就可以了(IN/OUT/MOV),对于USB显示器来说,则是一个一个USB请求包,每个USB包要经过几个到几十个函数调用才能完成封装并经过物理层面发到对端的设备上,硬件指令开销就是成千上万倍的,这个开销,远远比请求从CPU到显卡走PCI通道要慢的多。关键是还要等回调函数完成,开销应该是百微秒级到毫秒级的,这还只是一条指令。
所以还是直接访问硬件最快。