ネットワークエンジニアとして知っておくべきこと

【図解】MB/sとMbpsの正しい変換 ~MB,GB,TBとMiB(メビバイト),GiB(ギビバイト),TiB(テビバイト)の違い

はじめに

問題です。Windows のファイル転送時によく見かける下図についてです。速度が『1.00 MB/s』となっていますが、Mbps  (Mega bit per second) に変換するとどうなるでしょう?

8 Mbps と答えた方。実は (たぶん) ちょっと違います。

容量 (bits, Bytes)の単位

一般に容量を示す KB や MB , GB, TB のように、"B" が大文字で表記される場合、それは Byte (バイト) を意味します。冒頭の図のように MB/s と書かれている場合、メガバイト/秒という意味になります。

1 Byte = 8 bit ですので、1 MB と言われたら、一般には 8 Mbit (メガビット) を意味します。速度の単位 bps もそうですが、bit を表す場合は小文字の "b" を使うことが多いです。

ところで、M (メガ) は何かというと、一般には 10 の 6 乗を意味します。なので 1 MB = 8 × 106 = 8,000,000となります。

先程から『一般には』と表現しているのには訳があります。というのも、文脈によっては M (メガ) は 2 の 20 乗を意味するからです。

なので文脈によっては 1 MB = 8 × 220 = 8,388,608となります。

国際単位系 (SI) と国際規格 IEC 80000-13 の定義

国際単位系 (SI) の定義では M (メガ) は 10 の 6 乗を意味します。

一方、情報工学の世界では 2 進数を扱うことが多く、それゆえ M (メガ) を 2 の 20 乗の意味で使うことが便利でした。

そこでこの 2 つを区別するため、国際規格 IEC 80000-13 においては Mebi (メビ) という単位が定義され、これが 2 の 20 乗を意味するようになりました。

それ以外にもキロバイトに対してキビバイト、ギガバイトに対してギビバイト、テラバイトに対してテビバイト、といった定義がされています。(下表)

国際単位系 (SI)IEC 80000-13
Kilo (キロ)103Kibi (キビ)210
Mega (メガ)106Mebi (メビ)220
Giga (ギガ)109Gibi  (ギビ)230
Tera (テラ)1012Tebi (テビ)240
Peta (ペタ)1015Pebi (ペビ)250

なので国際単位系 (SI) と国際規格 (IEC 80000-13) の定義を『正しい』とすることを、この記事では『一般に』と表現しています。

Windows や Linux  での定義

では一般ではないものにはどういうものがあるかというと、現在の IT の主要な OS である Windows や Linux での容量の定義です。

これらの OS では IEC 80000-13 で定義された KiB, MiB, GiB, TiB のことを、それぞれ KB, MB, GB, TB と表記しています。

例えば Windows の 1023 バイトのファイル (下図左) と 1024 バイトのファイル (下図右) を見比べてみると、1024 バイトに達することでファイルサイズが 1 KB になっていることが分かります。

速度 (bps) の単位

一方、速度に関して言うと、Kbps や Mbps は国際単位系 (SI) の定義のみが使われます。K (キロ) であれば 10 の 3 乗ですし、M (メガ) であれば 10 の 6 乗です。

おそらくこの辺りは IEEE 規格の定義が強く出ているためと思われます。

例えば 1000Base-T では『1 クロック = 8 ns  (ナノ秒) の中で 2 bit を表現するペアケーブルが 4 対で伝送』します。それゆえ速度は 2 [bit] / (8 × 10-9)  [sec] ×  4 = 10 [bps] = 1 [Gbps]となります。

同様に、無線の IEEE802.11a でも『4 μs (マイクロ秒) の中で 6 bit を表現するサブキャリア 48 個で伝送 (そのうち 1/4 は誤り訂正符号)』します。それゆえ速度は 6 [bit] / (4 × 10-6) [sec] × 48 × 3/4 = 54 × 106 [bps] = 54 [Mbps] となります。

無線の理論速度などの原理の詳細については以下をご参照下さい。

【図解/初心者向け】無線LAN(wifi)の仕組みと基礎/原理~規格の歴史,種類,速度について~
無線LAN (Wi-Fi) の規格と速度理論値 無線 LAN の最新規格 IE...

Windows や Linux  でもネットワーク通信は IEEE 規格で行うことが多く、データ容量と速度の単位における K (キロ) や M(メガ) の定義に不整合が起きているのです。

最初の問題の答え

これまでの話をもっても、Windows の MB/s の MB が 106 なのか 220 なのか分かりません。ただ、よく観測してみると、998 KB/s となっている場合がある一方、

0.98 MB/s と表現されている場合があります。そして速度がこれ以上の場合は MB/s 表記が維持されます。

もし 1MB/s = 1000 KB/s であるならば 998 KB/s という表現はされず、0.99 MB/s となるはずです。そうなっていないということは、1MB/s = 1024 KB/s であることが推測されます。

なお、この速度のキャプチャを取るために、『ポリシーベースの QoS』という Windows 標準機能を使いましたが、その設定値として 1 MBps を設定して閉じてまた開くと 1024 KBps に変わっていましたので、この説がさらに補強されます。

この推測が正しいとすると、冒頭の 1 MB/s は  8,388,608 bps ≒ 8.4 Mbps となります。

容量が小さいうちは大した話ではない。だが、、、

今までは MB/s の定義について触れてきましたが、大きな誤解の元としては、速度を表現する bps については国際単位系の 10 の乗数が使われるのに対し、Windows , Linux 等の OS 上ではデータ容量を表現するのに 2 の乗数が使われる、という不整合があることです。

この不整合を認知しないと、思わぬ計算違いをしてしまうこともあります。

例えば Windows サーバ上に 1 TB のファイルがあるとします。これをネットワーク越しに別の Windows サーバに移動します。ストレージの IO は十分高いとし、ネットワークが 1000Base-T でシステム上のボトルネックになるとします。

一般に 1 TB を 1 Gbps で移動するには 1 × 1012 [Byte] × 8 [bit/Byte] / 109 [bps] = 8 ×103 [sec] ≒ 2時間 13分 となります。

ですが Windows 上では TiB ですので 1 × 230 [Byte] × 8 [bit/Byte] / 109 [bps] ≒ 8590 [sec] = 2時間23 分となります。

つまり、1 TB で 10 分の開きが出てきます。

最近では大容量化が進んでいますので、例えば  20 TB  分のファイルを移動するなら 200 分も変わってきます。

ファイルサーバの移行などの理論値試算の際には、ご注意を。

コメント

タイトルとURLをコピーしました