lspciコマンドから学ぶサーバーの内部構造とデータの流れ

Uncategorized

どうもこんにちは、agiです。

今回は ESXi ホスト(Dell PowerEdge T330)でlspciコマンドを実行したことをきっかけに、サーバー内部のハードウェア構成やデータの流れを学んだので、その内容をまとめていきます。

↓lspciの結果はこのような感じ。lspciコマンドはシステムのすべてのバスと接続されているデバイスに関する情報を表示します。


サーバー内部は「CPUを中心とした接続構造」でできている

まず大前提として、サーバー内部の高速デバイス接続には主に PCIe(PCI Express) が使われます。 これはイーサネットとは別物ですが、考え方としてはネットワークに少し似ています。

たとえば、ざっくり対応づけるとこんなイメージです。

PCIeネットワークでたとえると役割
Root Complex(CPU側)コアスイッチ各デバイスへの経路の起点
Root Portスイッチポートのようなものデバイスへの出口
レーン数(x1 / x4 / x8 / x16)回線帯域転送性能に影響
NIC / RAID / NVMe / GPU接続先機器実際にデータを処理する装置

PCIeはCPU側を中心に複数のデバイスがぶら下がる構造として捉えると、かなり理解しやすくなります。


CPU直結とチップセット経由の違い

サーバー内部のデバイスは、大きく分けると次の2種類の経路に分かれます。

1. CPU直結のデバイス

高速性が重視されるデバイスは、CPU側のPCIeレーンに直結されることがあります。

  • RAIDコントローラー
  • 高速NIC
  • NVMe SSD
  • GPU

こうしたデバイスは大量のデータを扱うため、低遅延・高帯域が求められます。

2. チップセット(PCH)経由のデバイス

一方で、そこまで高速性が必要ないデバイスはチップセット側に集約されます。

  • USB
  • SATA
  • SMBus
  • 管理系インターフェース
  • 一部のオンボード機能

イメージとしては、CPU直結が基幹系の高速経路、チップセット経由が管理系や補助系の経路という感じみたいです。

ただし重要なのは、チップセット側は複数の機能が集約されるため、上流で帯域を共有するということです。 「デバイスごとに完全独立で干渉しない」というより、独立リンクを持ちやすいが、上流側では集約されると考えるほうが正確です。


メモリはすべてのデータの「作業台」

メモリはPCIeデバイスとは別系統で、CPUのメモリコントローラに直結されています。PCIeデバイスよりもさらに低遅延でアクセスされる、サーバーの作業台です。

ここで重要なのが、多くのI/Oは主記憶(メモリ)を経由して処理されるということです。

たとえば、

  • NICが受け取ったパケット
  • RAIDコントローラーが読み書きするデータ
  • ディスクから読み込まれたファイル

こうしたデータは、通常は主記憶上のバッファを使って処理されます。

ただし、毎回CPUコアが手作業でデータを運んでいるわけではありません。NICやRAIDコントローラーは DMA(Direct Memory Access) によって、CPUコアの細かな介入なしに主記憶へデータ転送できます。

つまり、

  • CPUコアが1バイトずつ運んでいるわけではない
  • でも システム全体としては CPU/メモリ側の制御のもとで動いている

という理解が大事です。


サーバー内部にはキャッシュの階層がある

サーバー内部には、速度差を吸収するためのキャッシュがいくつもあります。 以下はあくまで目安ですが、上に行くほど高速・小容量、下に行くほど低速・大容量です。

速度感容量感役割
L1キャッシュ約1ns級数十KBCPUコア直近。最速
L2キャッシュ数ns級数百KBL1にないデータを保持
L3キャッシュ数ns〜十数ns級数MB〜数十MBCPU全体で共有
メモリ(DDR4/DDR5)数十ns級数GB〜数百GB主記憶。全体の作業台
RAIDキャッシュディスクより高速数百MB〜数GB書き込みの緩衝材
SSD / HDDさらに遅い数百GB〜数TB永続保存先

この構造はかなり重要です。 速い層にデータが残っているほど、遅い層まで取りに行かずに済むため、体感性能が大きく変わります

キャッシュヒット率が高いほど速い、という原理はCPUでもRAIDでもOSのファイルキャッシュでも基本的に同じです。


RAIDコントローラーのキャッシュと Write Back / Write Through

RAIDコントローラーにもキャッシュが搭載されていることがあります。たとえばDellのPERC H730系では1GBのキャッシュ保護機構を備える資料があります。

ここで重要なのがWrite BackWrite Through の違いです。

Write Through

キャッシュに書き込むだけでなく、実際にディスクへの書き込み完了を待ってから完了応答を返す方式です。

  • 安全性は高い
  • そのぶん遅くなりやすい

Write Back

いったんコントローラーのキャッシュに載った時点で完了応答を返し、実ディスクへの反映は後で行う方式です。

  • 速い
  • ただし停電時の保護機構が重要

このため、RAID コントローラーではキャッシュ保護機構(NV Cache/フラッシュ保護キャッシュなど)が非常に重要になります。「Write Backは速いが、保護機構があってこそ安心して使える」という理解でよいのかなと思います。


HDDとSSDの差は「帯域」より「IOPS」が本質的

ストレージ性能というとMB/sが注目されがちですが、実務では IOPS(1秒あたりのI/O回数) が非常に重要です。

ざっくりしたイメージはこんな感じです。

デバイス帯域の目安IOPSの目安
HDD(7200rpm)約100〜200 MB/s約100前後
SATA SSD約500 MB/s級数万〜十万弱
NVMe SSD数GB/s級数十万級

特にDBやVMのように、小さいランダムアクセスを大量に発生させる用途では、帯域よりIOPSやレイテンシの差が効いてきます。

「HDDをRAIDで束ねれば速くなる」というのも半分正しいですが、限界があります。 さらに RAID5は書き込み時にパリティ計算や追加 I/O が発生するため、ランダム書き込みでは不利です。

つまり、今の時代は

  • 容量重視なら HDD
  • 性能重視なら SSD / NVMe

という切り分けがかなり明確です。


まとめ

lspciの出力をきっかけに、PCIeの構造、メモリの役割、キャッシュ階層、ストレージ性能の考え方までつながって見えてきました。

これらの知識はサイジングにも大きく関わっており、サーバの用途によってストレージ性能やメモリの量などを決めていきます。

こうした視点を持つと、サーバをただの箱としてではなく、内部でどうデータが流れているかまでイメージできるようになる、、、と思ってます。

引き続き勉強していきます!