暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

计算机硬件的速度

生有可恋 2022-09-07
695

在《高性能Python》这本书中提到了硬件的速度,哪些速度是我们可以观测到的,哪些只能通过比较得出大概的差距?

图片来源:【Connection speeds of various common interfaces (image by Leadbuffalo [CC BY-SA 3.0])

图片的左边是对数形式的参考体系,使用对数坐标系,可以在1M/s~10G/s范围内将差距巨大的不同速率拉到一张图中对比。因为使用对数的原因,横轴的刻度是非均匀的。速度最慢的是我们手机的3G、4G网络,处于中间的是USB以及局域网无线、千兆网线,第一梯队是各种接口的速度如 PCI-E、HDMI、雷电口、最快的是内存。这是一张全景图:

我们再看看真实刻度下的各种标准的速率。

我们的4G手机设计速度大概在20MB/s,这个速度实际上是个很高的速度。相当于百兆网线的两倍,但实际上大部分地区的4G速度只能到3MB/s左右,百兆网线可以跑到10MB/s,在人流聚集区4G网络下载速度只能达到3MB/s左右。在一些信号塔附近,4G网络可以达到10MB/s左右的速度,我还没见过跑到20MB/s的4G网络。测速方法就是用手机打开speedtest.cn点测速即可:

这里用的单位是Mbps,换成我们平常下载用的单位MB/s数值还要再除以8。21.82Mbps 相当于2.7MB/s。我们再看下5G网络的速度:


5G在真实环境下的速度相当于千兆的40%,测一次速干掉600M的流量,如果每个月的流量只有几十G,测个三次就干掉两个G了。在5G网络下不要随便测速。

处于中间水平的是我们的家庭网络:

早期的老的无线比如 WiFi 802.11n 和 USB2.0 是一个水平,只有10MB/s左右的速度,实际上对标的是百兆网。这里要注意的是GEthernet,即千兆以太网的速度是100MB/s,USB3.1直接奔1000MB/s去了,这里应该指的是接口标准的速度,在实际生活中,使用USB3.0的无线网卡、U盘、移动硬盘这些受限于所搭载的介质的速度,USB3.0的无线网卡的速度能达到800Mbps,相当于千兆以太网的速度,也就是说USB3.0的无线网卡可以当千兆网卡用。而USB3.0的U盘只能达到30MB/s左右的速度,而USB3.0的移动硬盘则可以达到100MB/s左右的速度,基本上相当于机械硬盘的真实速度。

最后再看下我们的速度冠军内存:

DDR3的内存,速度可以达到10GB/s。如果是和硬盘比,1秒钟就可以填满1GB的硬盘,500G的硬盘只需要1分钟即可填满。

内存的速度怎么测?

在 Linux 下可以使用 dd 这个软件来测试内存的读写速度。

    $ dd if=/dev/zero of=/dev/null bs=1M count=1000

    通过 dmidecode 工具可以查询内存的型号,DDR4 2400 MHZ 的速度大概在9GB/s

      $ dmidecode -t memory| grep -B10 -A12 "Type: DDR4"
      $ dd if=/dev/zero of=/dev/null bs=1M count=1000
      1000+0 records in
      1000+0 records out
      1048576000 bytes (1.0 GB, 1000 MiB) copied, 0.119383 s, 8.8 GB/s

      开了双通道的速度可以达到17.2GB/s

        $ dmidecode -t memory | grep -A11 -B11 "Type: DDR4"
        $ dd if=/dev/zero of=/dev/null bs=1M count=1000
        1000+0 records in
        1000+0 records out
        1048576000 bytes (1.0 GB) copied, 0.0610583 s, 17.2 GB/s

        这个速度基本上是市面上存储能达到的极限了,比如用纯闪存SSD组的阵列,受限于内存的读写速度,存储的IO极限基本上也就在20GB/s

        使用 dd 也可以用来测硬盘速度。

        测写入速度:

          $ dd if=/dev/zero of=test.img bs=1M count=1000
          1000+0 records in
          1000+0 records out
          1048576000 bytes (1.0 GB) copied, 0.513642 s, 2.0 GB/s

          测读取速度:

            $ df -h .
            Filesystem Size Used Avail Use% Mounted on
            /dev/sda5 1.8T 154G 1.7T 9%
            $ dd if=/dev/sda5 of=/dev/null bs=1M count=1000
            1000+0 records in
            1000+0 records out
            1048576000 bytes (1.0 GB) copied, 1.82049 s, 576 MB/s

            以上硬盘是由5块SAS机械盘组的RAID10,四块盘做数据盘,一块当热备。

            PCI-E 接口的 NVMe SSD 的读写速度都能达到1GB/s以上:

            除了考虑 IO 的吞吐量,在有些高频IO应用中,比如数据库,对 IO 的延迟要求也比较高。因为网络的延迟较大,所以很少会用 iscsi 的方案来跑数据库。常用的数据库存储互联方案,一般会选用 InfiniBand 的交换机来互联存储结点。

            全文完。

            如果转发本文,文末务必注明:“转自微信公众号:生有可恋”。

            文章转载自生有可恋,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

            评论