25
ftp.jaist.ac.jp ののののののの のの のの @kfujieda ftp.jaist.ac.jp のののの

ftp.jaist.ac.jpの低レイヤーの話 on 第九回 カーネル/VM探検隊

Embed Size (px)

Citation preview

Page 1: ftp.jaist.ac.jpの低レイヤーの話 on 第九回 カーネル/VM探検隊

ftp.jaist.ac.jp の低レイヤーの話

藤枝 和宏 @kfujiedaftp.jaist.ac.jp の中の人

Page 2: ftp.jaist.ac.jpの低レイヤーの話 on 第九回 カーネル/VM探検隊

概要• ftp.jaist.ac.jp のハードウェア構成• UltraSPARC T1 について• 割り込みのチューニング

22013/12/7 第九回 カーネル/ VM 探検隊

Page 3: ftp.jaist.ac.jpの低レイヤーの話 on 第九回 カーネル/VM探検隊

3

ftp.jaist.ac.jp

• 日本最強 ( 自称 ) のミラーサーバー• 2013 年 11 月の利用内訳

• 「 ftp-admin の憂鬱」 http://ftp-admin.blogspot.jp/

2013/12/7 第九回 カーネル/ VM 探検隊

sf.net

OpenOffice

ubuntu sf.jp

CentO

S

Fedora

openSU

SE

eclip

se

LibreO

ffice

Debian

Others0.0%

10.0%

20.0%

30.0%

40.0%

50.0%

60.0%51.4%

12.1% 8.3% 6.5% 4.1% 3.9% 2.6% 2.1% 1.8% 1.7% 5.5%

Page 4: ftp.jaist.ac.jpの低レイヤーの話 on 第九回 カーネル/VM探検隊

ftp.jaist.ac.jp の性能• 平日のピーク時 2.4Gbps– ほとんど HTTP– 4,000 接続 150 リクエスト / 秒– CPU 使用率 75% ( カーネル 9 割 )

• 最高記録 4.5Gbps – 2012 年 4 月 25 日 (Firefox 12 のリリース日 )– 17,000 接続 1,950 リクエスト / 秒– CPU 使用率 100% ( カーネル 7 割 )

42013/12/7 第九回 カーネル/ VM 探検隊

Page 5: ftp.jaist.ac.jpの低レイヤーの話 on 第九回 カーネル/VM探検隊

ハードウェア構成

5

Sun Fire T2000 (2U)サーバー本体

SAS エンクロージャー (1U)L2ARC 用 SSD 512GB×4

SAS エンクロージャー (4U)HDD 2TB×24RAID-Z2 (9D+2P+1S)×2実容量 38TB

SAS エンクロージャーはSuper Micro のサーバーシャーシ

2013/12/7 第九回 カーネル/ VM 探検隊

Page 6: ftp.jaist.ac.jpの低レイヤーの話 on 第九回 カーネル/VM探検隊

Sun Fire T2000

• 旧 Sun Microsystems からの寄贈 (2007 年 5 月 )• 発売 : 2005 年 12 月

8 年前のハードウェア• CPU: UltraSPARC T1 1GHz 1CPU• メモリ : 16 GB (1GB×16)

⇒64GB (4GB×16) (2009 年 9 月 )• NIC: GbE×4 10GbE (2012⇒ 年 4 月 )

62013/12/7 第九回 カーネル/ VM 探検隊

Page 7: ftp.jaist.ac.jpの低レイヤーの話 on 第九回 カーネル/VM探検隊

Sun Fire T2000 のマザーボード

7

CPU と DIMM スロットの占める面積が広い2013/12/7 第九回 カーネル/ VM 探検隊

Page 8: ftp.jaist.ac.jpの低レイヤーの話 on 第九回 カーネル/VM探検隊

UltraSPARC T1 (1/2)

• クロック数 1GHz– ラインナップは 1.4GHz まで

• 8 コア 4 スレッド / コア 計 32 スレッド– Chip-level Multithreading (CMT)– 1 サイクルごとに実行スレッドを切り替え

• シンプルなコア– シングルイシュー– インオーダー– 6 ステージパイプライン

82013/12/7 第九回 カーネル/ VM 探検隊

Page 9: ftp.jaist.ac.jpの低レイヤーの話 on 第九回 カーネル/VM探検隊

UltraSPARC T1 (2/2)

• L1 Cache 命令 16kB データ 8kB• L2 Cache 共有 3MB 12-way set associative• メモリーコントローラー内蔵 帯域 34.1GB/s– DDR2-533 4.3GB/s– ×4 チャンネル = 17.1GB/s– ×2 (128bit 幅 ) = 34.1GB/s

92013/12/7 第九回 カーネル/ VM 探検隊

Page 10: ftp.jaist.ac.jpの低レイヤーの話 on 第九回 カーネル/VM探検隊

CMT の仕組み• パイプラインに異なるスレッドの命令を投入

10

サイクル

命令UltraSPARC T1: A 32-threaded CMP for Servers よりhttp://www.cse.msu.edu/~cse820/lectures/lecturesS08/lecture14_T1.pdf

2013/12/7 第九回 カーネル/ VM 探検隊

Page 11: ftp.jaist.ac.jpの低レイヤーの話 on 第九回 カーネル/VM探検隊

パイプラインの構成• スレッドセレクション以外は古典的な構成

11

Fetch

Threadselection

Decode

Execute

Memory

Writeback

フェッチされた命令はスレッドセレクションで選ばれるまで実行されない

2013/12/7 第九回 カーネル/ VM 探検隊

Page 12: ftp.jaist.ac.jpの低レイヤーの話 on 第九回 カーネル/VM探検隊

スレッドセレクション (1/2)

• ウェイト状態でないスレッドから LRU で選択• ウェイト状態– ストール中

• キャッシュミスなど– 遅延の長い命令を実行中

• LOAD や乗除算など

122013/12/7 第九回 カーネル/ VM 探検隊

Page 13: ftp.jaist.ac.jpの低レイヤーの話 on 第九回 カーネル/VM探検隊

スレッドセレクション (2/2)

• 動けるスレッドが二つの場合– t0-ld は遅いので t1-sub に続いて t1-ld を実行– t0-ld から t0-add へデータをフォワーディング

13

サイクル

命令UltraSPARC T1: A 32-threaded CMP for Servers よりhttp://www.cse.msu.edu/~cse820/lectures/lecturesS08/lecture14_T1.pdf

2013/12/7 第九回 カーネル/ VM 探検隊

Page 14: ftp.jaist.ac.jpの低レイヤーの話 on 第九回 カーネル/VM探検隊

CMT の利点• ハザードが起きにくい– 異なるスレッドの命令間にはデータ、制御ともに依

存関係がない• ストールを隠蔽できる– ストールしたスレッドを待たせて、ほかのスレッドを

実行できる

CPU の利用効率が高い

142013/12/7 第九回 カーネル/ VM 探検隊

Page 15: ftp.jaist.ac.jpの低レイヤーの話 on 第九回 カーネル/VM探検隊

CMT の欠点• シングルスレッド性能が低い– 1 スレッドあたりのスループットが低い– 1 スレッドのみで実行しても遅い

フォワーディングはあるが分岐予測はない

152013/12/7 第九回 カーネル/ VM 探検隊

Page 16: ftp.jaist.ac.jpの低レイヤーの話 on 第九回 カーネル/VM探検隊

UltraSPARC T1 の欠点• 浮動小数点演算器が一つだけ– コアと L2 の間のクロスバーに接続– 1 命令で 40 サイクルのペナルティ

162013/12/7 第九回 カーネル/ VM 探検隊

Page 17: ftp.jaist.ac.jpの低レイヤーの話 on 第九回 カーネル/VM探検隊

UltraSPARC T1 の利点• マルチスレッド性能が高い• メモリ帯域が広い• キャッシュミスのペナルティが小さい

• 並列に行うデータ転送中心のワークロードに向く– ウェブサーバー– Java アプリケーションサーバー

SPEC JBB2005 の Sun Fire T2000 のスコアは 74kXeon 5080 3.8GHz 2 ソケット構成の IA サーバーで 64k

172013/12/7 第九回 カーネル/ VM 探検隊

Page 18: ftp.jaist.ac.jpの低レイヤーの話 on 第九回 カーネル/VM探検隊

18

OS から見た UltraSPARC T1

2013/12/7 第九回 カーネル/ VM 探検隊

32CPU に見える

$ mpstatCPU minf mjf xcal intr ithr csw icsw migr smtx srw syscl usr sys wt idl 0 11 0 974 1755 4 1709 13 519 180 324 1000 7 23 0 70 1 11 0 1012 1513 19 1893 15 575 205 354 1065 7 24 0 69 2 10 0 794 1390 2 1479 13 456 171 269 1048 7 20 0 73 3 9 0 749 1326 2 1395 12 433 163 252 1040 7 19 0 74 4 13 0 1105 1512 2 2149 19 472 215 416 1285 9 28 0 63 5 14 0 1241 1700 2 2528 21 555 234 467 1453 10 32 0 59 6 20 0 1906 2218 3 3992 31 985 302 693 1543 10 44 0 46 7 17 0 1523 1913 3 3009 25 713 272 573 1527 10 37 0 53 8 18 0 1412 1252 3 2557 22 517 244 525 1162 7 32 0 61 9 15 0 941 879 3 1605 17 314 197 324 946 6 23 0 71 10 14 0 1196 1192 2 2362 19 425 214 435 1028 6 28 0 65 11 18 0 2057 2028 3 4314 32 947 304 739 1323 7 45 0 48 12 10 0 4820 17256 16396 2038 77 493 281 302 610 4 71 0 25 13 11 0 2914 9441 8631 1692 33 393 237 322 708 5 50 0 45 14 10 0 741 639 3 1198 14 278 158 236 718 5 20 0 75 15 9 0 717 706 2 1334 13 281 148 235 697 5 19 0 75 16 8 0 2588 9223 8662 1133 23 213 193 205 476 4 42 0 54 17 13 0 3421 9989 8575 3163 52 732 290 498 947 6 61 0 32 18 14 0 1463 1332 3 2759 22 586 238 556 1137 7 35 0 58 19 11 0 873 742 3 1464 15 305 177 315 781 6 23 0 72 20 9 0 2581 9115 8604 1021 23 200 184 213 452 4 41 0 55 21 8 0 3791 3587 2796 1657 22 284 426 318 465 3 35 0 62 22 17 0 2027 2025 3 4356 31 945 289 731 1285 8 47 0 46 23 14 0 1396 1276 3 2667 22 529 237 536 1082 7 33 0 60 24 15 0 1307 1205 4 2503 21 503 228 502 1039 7 32 0 61 25 7 0 4342 16280 15864 806 48 160 202 139 320 3 59 0 38 26 10 0 917 884 2 1736 15 311 176 325 740 5 23 0 72 27 17 0 1961 1972 3 4229 30 922 286 709 1259 8 46 0 47 28 19 0 2198 2150 3 4548 34 961 311 765 1308 7 46 0 47 29 17 0 1539 1371 3 2812 24 530 257 566 1114 6 34 0 60 30 14 0 922 759 3 1491 16 271 194 314 785 5 22 0 73 31 13 0 1028 956 3 1903 16 305 192 357 751 5 24 0 71

1 CPU が遅いので割り込みが多いと使用率が高くなる

CPU minf mjf xcal intr ithr csw icsw migr smtx srw syscl usr sys11 18 0 2057 2028 3 4314 32 947 304 739 1323 7 4512 10 0 4820 17256 16396 2038 77 493 281 302 610 4 71

Page 19: ftp.jaist.ac.jpの低レイヤーの話 on 第九回 カーネル/VM探検隊

割り込みの割り当て (1/2)

19

# echo “::interrupts” | mdb –kDevice Type MSG # State INO Mondo Shared Pil CPU px#0 PCIe 27 enbl 0x3b 0x7bb no 1 4 px#0 PCIe 51 enbl 0x3a 0x7ba no 14 0 px#0 PCIe 49 enbl 0x39 0x7b9 no 14 0 px#0 PCIe 48 enbl 0x38 0x7b8 no 9 1 nxge#3 MSI-X 248 enbl 0x22 0x7a2 no 6 0 nxge#3 MSI-X 249 enbl 0x21 0x7a1 no 6 1 nxge#2 MSI-X 250 enbl 0x20 0x7a0 no 6 9 nxge#2 MSI-X 251 enbl 0x1f 0x79f no 6 8 nxge#1 MSI-X 252 enbl 0x1e 0x79e no 6 1 nxge#1 MSI-X 253 enbl 0x1d 0x79d no 6 28 nxge#0 MSI-X 254 enbl 0x1c 0x79c no 6 5 nxge#0 MSI-X 255 enbl 0x1b 0x79b no 6 4e1000g#1 MSI 2 enbl 0x1a 0x79a no 6 29e1000g#0 MSI 1 enbl 0x19 0x799 no 6 29 mpt#0 MSI 0 enbl 0x18 0x798 no 5 1 su#0 Fixed --- enbl 0x2 0x7c2 no 12 4 uata#0 Fixed --- enbl 0x4 0x7c4 no 5 0 ohci#1 Fixed --- enbl 0x3 0x7c3 no 9 24 ohci#0 Fixed --- enbl 0x1 0x7c1 no 9 16 px#1 PCIe 27 enbl 0x3b 0x7fb no 1 8 px#1 PCIe 51 enbl 0x3a 0x7fa no 14 4 px#1 PCIe 49 enbl 0x39 0x7f9 no 14 24 px#1 PCIe 48 enbl 0x38 0x7f8 no 9 5e1000g#3 MSI 2 enbl 0x2a 0x7ea no 6 12e1000g#2 MSI 1 enbl 0x29 0x7e9 no 6 12 mpt#1 MSI 0 enbl 0x28 0x7e8 no 5 21

増設 NIC GbE×4TX と RX が別

オンボード GbE×4

SAS HBA×2

2013/12/7 第九回 カーネル/ VM 探検隊

Page 20: ftp.jaist.ac.jpの低レイヤーの話 on 第九回 カーネル/VM探検隊

割り込みの割り当て (2/2)

20

ixgbe#0 MSI-X 240 enbl 0x27 0x7e7 no 6 20 ixgbe#0 MSI-X 241 enbl 0x26 0x7e6 no 6 12 ixgbe#0 MSI-X 242 enbl 0x25 0x7e5 no 6 12 ixgbe#0 MSI-X 243 enbl 0x24 0x7e4 no 6 17 ixgbe#0 MSI-X 244 enbl 0x23 0x7e3 no 6 16 ixgbe#0 MSI-X 245 enbl 0x22 0x7e2 no 6 25 ixgbe#0 MSI-X 246 enbl 0x21 0x7e1 no 6 25 ixgbe#0 MSI-X 247 enbl 0x20 0x7e0 no 6 13 ixgbe#1 MSI-X 248 enbl 0x1f 0x7df no 6 12 ixgbe#1 MSI-X 249 enbl 0x1e 0x7de no 6 21 ixgbe#1 MSI-X 250 enbl 0x1d 0x7dd no 6 24 ixgbe#1 MSI-X 251 enbl 0x1c 0x7dc no 6 9 ixgbe#1 MSI-X 252 enbl 0x1b 0x7db no 6 8 ixgbe#1 MSI-X 253 enbl 0x1a 0x7da no 6 21 ixgbe#1 MSI-X 254 enbl 0x19 0x7d9 no 6 17 ixgbe#1 MSI-X 255 enbl 0x18 0x7d8 no 6 5

Intel X520-DA210GbE×2

マルチキュー

2013/12/7 第九回 カーネル/ VM 探検隊

計 42 個

Page 21: ftp.jaist.ac.jpの低レイヤーの話 on 第九回 カーネル/VM探検隊

CPU ごとの割り込みの設定CPU 割り込み CPU 割り込み

0 px#0 px#0 uata#0 nxge#3 16 ochi#1 ixgbe#01 px#0 nxge#3 nxge#1 mpt#0 17 ixgbe#0 ixgbe#12 183 194 px#0 px#1 su#0 nxge#0 20 ixgbe#05 px#1 nxge#5 ixgbe#1 21 mpt#1 ixgbe#1 ixgbe#16 227 238 px#1 nxge#2 ixgbe#1 24 ochi#1 px#1 ixgbe#19 nxge#2 ixgbe#1 25 ixgbe#0 ixgbe#0

10 2611 27

12 e1000g#2 e1000g#3ixgbe#0 ixgbe#0 ixgbe#1 28 nxge#1

13 ixgbe#0 29 e1000g#0 e1000g#114 3015 31

212013/12/7 第九回 カーネル/ VM 探検隊

Page 22: ftp.jaist.ac.jpの低レイヤーの話 on 第九回 カーネル/VM探検隊

割り込みの制御• 割り込み可能な CPU を減らす

# psradm -i 2 3 6 7 10 11 14 15 18 19 22 23 26 27 30 31

222013/12/7 第九回 カーネル/ VM 探検隊

Page 23: ftp.jaist.ac.jpの低レイヤーの話 on 第九回 カーネル/VM探検隊

割り込みの制御を外すと (1/2)

23

CPU 割り込み CPU 割り込み0 16 ohci#0 ixgbe#01 px#0 mpt#0 17 ixgbe#02 px#0 e1000g#0 18 ixgbe#03 px#0 e1000g#0 19 ixgbe#04 px#0 nxge#0 20 ixgbe#05 px#1 nxge#0 ixgbe#1 21 mpt#16 px#1 nxge#1 ixgbe#1 22 e1000g#27 px#1 nxge#1 ixgbe#1 23 e1000g#38 px#1 nxge#2 ixgbe#1 249 nxge#2 ixgbe#1 25

10 nxge#3 ixgbe#1 2611 nxge#3 ixgbe#1 2712 ixgbe#1 2813 ixgbe#0 29 su#014 ixgbe#0 30 uata#015 ohci#1 ixgbe#0 31

2013/12/7 第九回 カーネル/ VM 探検隊

Page 24: ftp.jaist.ac.jpの低レイヤーの話 on 第九回 カーネル/VM探検隊

24

割り込みの制御を外すと (2/2)

• 同じデバイスの割り込みが一つのコアに集中– 命令キャッシュを汚さないため?– 割り込みによるストールを隠蔽できない– CPU の利用効率が下がる

• Sun Fire T2000/T1000 で割り込み可能なCPU を減らすのは常套手段

2013/12/7 第九回 カーネル/ VM 探検隊

Page 25: ftp.jaist.ac.jpの低レイヤーの話 on 第九回 カーネル/VM探検隊

25

まとめ• ftp.jaist.ac.jp は Sun Fire T2000 で動いている• UltraSPARC T1 はウェブサーバーに向き• 割り込み可能な CPU を減らさないと性能が出な

2013/12/7 第九回 カーネル/ VM 探検隊