3G 为什么比 Wi-Fi 费电
前天张擎宇同学告诉我,在有 Wi-Fi 的时候最好使用 Wi-Fi 并关掉 3G 网络,可以省很多电。3G 真的比 Wi-Fi 费电吗?我查阅了文献,发现果真如此。当要传输的数据较少时,电源消耗的差距可以大到 10 倍之多。
蓝线:3G 功耗;绿线:wifi 功耗;紫线:考虑了 wifi 扫描和建立连接之后的功耗(来源:TailEnder)
原因主要有两方面:
- 3G 网络完成数据传输后要保持一段时间的高功率状态;
- 3G 网络的发射功率远大于 Wi-Fi 网络。
蜂窝网络与无线局域网
3G 与 wifi 有什么本质区别呢?一个慢,一个快;一个覆盖范围大,一个覆盖范围小。事实上这代表了两种不同形式的网络:蜂窝网络和无线局域网。
不管是 GSM(2G)、GPRS(2.5G)、EDGE(2.5G)、CDMA(3G)、HSPA(3.5G) 还是 4G LTE,它们都是运营商网络,每个基站负责其周围的一块区域,基站的覆盖范围酷似蜂巢,因此称为蜂窝网络(cellular network)。
蜂窝网络由于覆盖范围很广,而且有强大的固定基站,因此假定所有用户都能听到基站,而用户与用户之间未必互相能听到。这就要求基站给用户划分好互不干扰的信道。
GSM(2G)最早使用的是时分多路复用(TDM)技术,把时间切成若干片给不同的客户端使用。为了同步时间片的划分,需要定期插入 “心跳”,这些心跳就是我们把 2G 手机放在收音机前时会听到刺耳噪音的原因(当然,现在很少有人听收音机了)。而 CDMA 使用的是码分多路复用(CDM)技术,就是用不同的编码方式来传输信息,就好像大厅里一个人说英语,一个人说汉语,我们可以选择是听英语还是听汉语。
多路复用技术比较(来源:DIFFERENCE BETWEEN GSM AND CDMA – EXPLAINED!!)
Wi-Fi 则代表了无线通信技术的另一种应用场景:无线局域网(WLAN)。所谓局域网,就是覆盖范围小(几米)、使用人数少(几十人),假定终端之间都能互相听到,从而 “基站” 就被解放了出来,不需要为每个终端分配信道,而是各个终端自行协商谁在什么时候发送数据,避免冲突。因此,无线局域网基站(接入点)的成本比蜂窝网络基站的成本要低很多,这不仅是量产和发射功率的问题,更重要的是采用的技术不同导致基站的负担不同。当然,无线局域网这样的假定也使得它的扩放性(scalability)不强,用户数量一多,客户端自行协商解决冲突的方法效率就低了。
具体来说,无线局域网里协商解决冲突的方法叫做载波监听/冲突避免(CSMA/CA)。每个客户端要说话之前,要首先竖起耳朵听周围有没有其他人在说话,如果没有,好,吹一声口哨(RTS),表示我要开始发数据了,接收者如果能听到这声口哨,就回应一声(CTS),发送者接收到这个回应后,就可以开始发数据了。接收者接收完数据,要回复一声 “roger that”(ACK)。您看,发送一次数据要这么麻烦,其中任何一个阶段受到其他客户端打扰,都会导致发送失败。
WLAN 载波监听/冲突避免时序图(来源:cs.stanford.edu)
Wi-Fi 在收到 ACK 之后,如果没有新的数据要传送,就可以睡眠了。每过一段时间,它会醒来问问接入点有没有新的数据传来,如果没有,就继续睡眠。因此基本上只当有数据需要传送的时候,Wi-Fi 才会消耗电能。当然,最开始 Wi-Fi 扫描接入点和连接接入点的过程也是挺费电的,但我们通常不会不断切换 Wi-Fi 接入点。
蜂窝网络的信道分配
前面提到,蜂窝网络是靠基站来分配信道,而不像无线局域网那样是靠客户端自行协商。如果每个手机一开机就向基站申请一个信道并独占之,会造成巨大的资源浪费,因为手机大多数时候是处于静默状态,既不打电话又不发送数据,而信道是稀缺资源,独占信道会严重影响基站能支持的用户数量。
因此,蜂窝网络的标准无一例外地使用了 “用时分配信道” 的方法,也就是有一个共享信道用于申请信道,客户端需要发送数据的时候:
- 客户端在共享信道上发出租借信道申请;
- 如果基站能收到申请,则分配一个临时独占信道给该客户端;
- 客户端使用分配到的信道发送数据;
- 数据发送完毕,等待一段时间(对方的回应或者有新数据要发送);
- 如果一段时间内没有数据要发送,就释放信道。
在联通采用的 WCDMA 标准中,这个过程被称为 RRC(Radio Resource Control)。采用 WCDMA 为例,是因为它是国际上市场占有率最高的 3G 标准,其他 3G 标准尽管信道复用方式不同,但分配信道的过程是相似的。
WCDMA(3G)电源状态图(来源:High Performance Browser Networking)
从电源管理的角度看,客户端平时处于极低功耗的休眠状态(IDLE),有数据要传输时进入高功耗的发射状态(Cell DCH),数据传输完毕后 5 秒内如果没有数据要发送,就进入较低功耗的待机状态(Cell FACH),如果再过 12 秒无数据可传,就回到休眠状态(IDLE)。
WCDMA 电源状态时序(来源:High Performance Browser Networking)
为什么要等好几秒,还要有个额外的待机状态呢?首先回答等几秒的问题。这是因为分配和释放信道是一件既麻烦又耗时的事情。从休眠状态(IDLE)到可以发送数据的连接状态(Cell DCH),要耗近 2 秒的时间(下图所示为 1.717 秒)。打电话、发短信等待一两秒我们不会感觉什么,然而对于看网页、即时通信来说,这个延迟就有些不可接受了。更重要的是,这个连接过程需要消耗很多共享信道和基站的资源,也需要消耗客户端较多的电能,因此应该尽量少做。在数据传输结束后等几秒,就是考虑到发送完数据后可能还有后续数据要发送,或者要接收对方的回应。
接着回答额外待机状态的问题。随着蜂窝网络标准的演进,带宽越来越快了,高速的数据传输是以提高发射功率为代价的。例如,HSPA 在连通状态的发射功率是 1000~3500 mW,而 GSM 的发射功率只有 800 mW。然而电池行业的发展不遵循摩尔定律,单位体积电池的容量是有限的,降低客户端功耗在蜂窝网络通信中越来越重要。因此 HSPA 在 CDMA 的基础上增加了较低功耗的 “待机状态”(Cell FACH),这个待机状态只消耗几百 mW 的功率,也能以较低的速率(20 kbps)进行少量数据传输,或者在 100 毫秒量级的时间内回到全速发送数据状态(Cell DCH)。这样就在客户端功耗和连接建立的响应时间方面做出了权衡。
对 4G LTE 来说,发射功率更高了,就需要更细致的电源管理。因此,4G LTE 在全速发送数据和空闲状态之间,引入了两个中间状态:Short DRX(Short Discontinuous Reception)和 Long DRX(Long Discontinuous Reception)。
4G LTE 电源状态图(来源:High Performance Browser Networking)
电池杀手:tail energy
介于全速传送数据与空闲状态之间的待机状态,正是蜂窝网络的电池杀手。在 3G 网络中,这些没有传输任何有效数据的待机状态,消耗了射频模块 50% 的能量,也就是一半左右的能量都被浪费了。在 4G 网络中,这种半睡半醒的中间状态在能量消耗中的占比更大。不过,如果去掉中间状态,射频模块将频繁唤醒和睡眠,不仅会增大数据发送的延迟,而且可能会消耗更多的能量(因为建立连接和分配信道的复杂过程也很耗电)。也就是说,中间状态的时间长度事实上是协议设计者权衡后的结果。
3G 与 4G 各个阶段的能量消耗。注意 3G 的表格中,DCH 阶段不是全部用来发送有效数据,也有末尾等待时间(来源:Comparing LTE and 3G Energy Consumption,AT&T)
无线局域网笑了。无线局域网(WLAN)不需要待机状态,因为它不需要分配独占的信道,也就不需要考虑 “建立连接” 的延迟和功耗。要传输数据时,客户端只需按照载波监听/冲突避免(CSMA/CA)协议,看旁边没人发送数据时,自己就可以发送数据了。这种自组织形式的冲突避免方法不存在 tail energy 的开销,也大大降低了连接建立时的延迟(这是另一个问题,WLAN 几到几十毫秒,3G 却需要几百到几千毫秒),但也不可能享受独占信道的效率:网络规模不可能很大,几十个客户端就是上限了。
鱼与熊掌不可兼得,在蜂窝网络和无线局域网的设计中可见一斑。
另一个影响因素:发射功率
除了前面说的 tail energy,还有一个显而易见的因素:发射功率。WLAN 接入点距离近,蜂窝网络基站距离远,除了频段方面的区别,发射功率也有区别。要想传得远,就得高声喊。下表中的 RX 代表接收,TX 代表发送,每格自上而下分别是 1、2、3 根天线,可见单天线的发射功率都在 1 W 上下。
802.11n 不同工作模式下的功率(来源:Demystifying 802.11n Power Consumption)
蜂窝网络的功率怎么样呢?前面提到 HSPA(3.5G)中的发射功率是 1~3.5 W(根据信号强度不等),也就是同样在全速发送状态,蜂窝网络比无线局域网的射频芯片在单位时间内要消耗更多能量。但从下图可以看到,除非是在传输大量数据,对于小块数据按照一定间隔发送的情形,3G 射频芯片的功率多数时间也在 1 W 上下,只有较短的时间产生了高功率发射的尖峰。
3G 射频芯片功率随时间的变化(来源:Power consumption analysis of constant bit rate
data transmission over 3G mobile wireless networks)
在信号比较好的情况下,3G 与 WLAN 发送小块数据的功率消耗相当;但不要忘了 3G 有 tail energy,而 WLAN 没有,因此 3G 耗电远比 WLAN 快就不足为奇了。所以,即使您不在乎坑爹的流量费用,为了您的电池续航时间着想,还是在需要的时候打开 Wi-Fi 吧!当然,在不需要的时候,尤其是公共场合,还是最好关掉 Wi-Fi,不然搜索 Wi-Fi 热点同样很耗电,而且不小心连上了未加密或不受信任的 Wi-Fi 热点,可要小心艳照门哦。
给应用开发者的建议
读到这里,如果您是一位应用开发者,应该已经认识到了蜂窝网络中每发送或接收一块数据,天线就会保持开启状态几秒钟,而这几秒钟将耗费比发送这些数据还要多的功耗。我们可以扬长避短:
- 扬长:在这几秒钟里我们不妨让手机多干点活,比如预取(prefetch)图片等用户可能马上看到的内容;
- 避短之一:有些应用开发者沿用桌面应用的习惯,每分钟发送一个心跳包表示 “我还活着”,在移动终端里这可是非常奢侈的行为。使用长连接吧,不要再 polling 了!
- 避短之二:尽量使用系统的消息推送服务,这样不同应用的消息可以打包推送,而不是每个应用都独立推送一次,让射频模块和系统的其他组件频繁唤醒。
- 避短之三:应用如果需要定期获取用户数据更新,且不方便使用服务器推的话,能不能不使用固定的更新频率,而是根据用户的习惯和网络条件调整更新频率?
- 避短之四:如果应用内有多个定期执行的计划任务,应当尽量凑到一起。
进一步的功耗优化,比如跨应用的任务打包、仅在其他应用发送数据时顺便发送后台数据,需要移动操作系统厂商提供更多的 API,与应用开发者共同努力。
参考文献
我很懒,就只列标题了……
- High Performance Browser Networking
- [TailEnder] Energy Consumption in Mobile Phones: A Measurement Study and Implications for Network Applications
- Latency in HSPA Data Networks, Qualcomm
- Comparing LTE and 3G Energy Consumption, developer.att.com
- Power consumption analysis of constant bit rate data transmission over 3G mobile wireless networks
- 各路网络图片