Upgrade to Pro — share decks privately, control downloads, hide ads and more …

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

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

ftp.jaist.ac.jpが使っているSun Fire T2000のCPUであるUltraSPARC T1の話をする。

Af61fe2beec7f195d7418e0a474a4dfc?s=128

Kazuhiro Fujieda

December 07, 2013
Tweet

Transcript

  1. ftp.jaist.ac.jpの低レイヤーの話 藤枝 和宏 @kfujieda ftp.jaist.ac.jpの中の人

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

    第九回 カーネル/VM探検隊
  3. ftp.jaist.ac.jp • 日本最強(自称)のミラーサーバー • 2013年11月の利用内訳 • 「ftp-adminの憂鬱」 http://ftp-admin.blogspot.jp/ 3 2013/12/7

    第九回 カーネル/VM探検隊 51.4% 12.1% 8.3% 6.5% 4.1% 3.9% 2.6% 2.1% 1.8% 1.7% 5.5% 0.0% 10.0% 20.0% 30.0% 40.0% 50.0% 60.0%
  4. 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割) 4 2013/12/7 第九回 カーネル/VM探検隊
  5. ハードウェア構成 5 Sun Fire T2000 (2U) サーバー本体 SASエンクロージャー (1U) L2ARC用

    SSD 512GB×4 SASエンクロージャー (4U) HDD 2TB×24 RAID-Z2 (9D+2P+1S)×2 実容量38TB SASエンクロージャーは Super Microのサーバーシャーシ 2013/12/7 第九回 カーネル/VM探検隊
  6. Sun Fire T2000 • 旧Sun Microsystemsからの寄贈 (2007年5月) • 発売: 2005年12月

    8年前のハードウェア • CPU: UltraSPARC T1 1GHz 1CPU • メモリ: 16GB (1GB×16) ⇒64GB (4GB×16) (2009年9月) • NIC: GbE×4⇒10GbE (2012年4月) 6 2013/12/7 第九回 カーネル/VM探検隊
  7. Sun Fire T2000のマザーボード 7 CPUとDIMMスロットの占める面積が広い 2013/12/7 第九回 カーネル/VM探検隊

  8. UltraSPARC T1 (1/2) • クロック数1GHz – ラインナップは1.4GHzまで • 8コア 4スレッド/コア

    計32スレッド – Chip-level Multithreading (CMT) – 1サイクルごとに実行スレッドを切り替え • シンプルなコア – シングルイシュー – インオーダー – 6ステージパイプライン 8 2013/12/7 第九回 カーネル/VM探検隊
  9. 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 9 2013/12/7 第九回 カーネル/VM探検隊
  10. 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探検隊
  11. パイプラインの構成 • スレッドセレクション以外は古典的な構成 11 Fetch Thread selection Decode Execute Memory

    Writeback フェッチされた命令はスレッドセレクションで 選ばれるまで実行されない 2013/12/7 第九回 カーネル/VM探検隊
  12. スレッドセレクション(1/2) • ウェイト状態でないスレッドからLRUで選択 • ウェイト状態 – ストール中 • キャッシュミスなど –

    遅延の長い命令を実行中 • LOADや乗除算など 12 2013/12/7 第九回 カーネル/VM探検隊
  13. スレッドセレクション(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探検隊
  14. CMTの利点 • ハザードが起きにくい – 異なるスレッドの命令間にはデータ、制御ともに依存関係 がない • ストールを隠蔽できる – ストールしたスレッドを待たせて、ほかのスレッドを実行で

    きる CPUの利用効率が高い 14 2013/12/7 第九回 カーネル/VM探検隊
  15. CMTの欠点 • シングルスレッド性能が低い – 1スレッドあたりのスループットが低い – 1スレッドのみで実行しても遅い フォワーディングはあるが分岐予測はない 15 2013/12/7

    第九回 カーネル/VM探検隊
  16. UltraSPARC T1の欠点 • 浮動小数点演算器が一つだけ – コアとL2の間のクロスバーに接続 – 1命令で40サイクルのペナルティ 16 2013/12/7

    第九回 カーネル/VM探検隊
  17. UltraSPARC T1の利点 • マルチスレッド性能が高い • メモリ帯域が広い • キャッシュミスのペナルティが小さい • 並列に行うデータ転送中心のワークロードに向く

    – ウェブサーバー – Javaアプリケーションサーバー SPEC JBB2005のSun Fire T2000のスコアは74k Xeon 5080 3.8GHz 2ソケット構成のIAサーバーで64k 17 2013/12/7 第九回 カーネル/VM探検隊
  18. OSから見たUltraSPARC T1 2013/12/7 第九回 カーネル/VM探検隊 18 32CPUに見える $ mpstat CPU

    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 1CPUが遅いので割り 込みが多いと使用率 が高くなる CPU minf mjf xcal intr ithr csw icsw migr smtx srw syscl usr sys 11 18 0 2057 2028 3 4314 32 947 304 739 1323 7 45 12 10 0 4820 17256 16396 2038 77 493 281 302 610 4 71
  19. 割り込みの割り当て(1/2) 19 # echo “::interrupts” | mdb –k Device 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 4 e1000g#1 MSI 2 enbl 0x1a 0x79a no 6 29 e1000g#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 5 e1000g#3 MSI 2 enbl 0x2a 0x7ea no 6 12 e1000g#2 MSI 1 enbl 0x29 0x7e9 no 6 12 mpt#1 MSI 0 enbl 0x28 0x7e8 no 5 21 増設NIC GbE×4 TXとRXが別 オンボード GbE×4 SAS HBA×2 2013/12/7 第九回 カーネル/VM探検隊
  20. 割り込みの割り当て(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-DA2 10GbE×2 マルチキュー 2013/12/7 第九回 カーネル/VM探検隊 計42個
  21. CPUごとの割り込みの設定 CPU 割り込み CPU 割り込み 0 px#0 px#0 uata#0 nxge#3

    16 ochi#1 ixgbe#0 1 px#0 nxge#3 nxge#1 mpt#0 17 ixgbe#0 ixgbe#1 2 18 3 19 4 px#0 px#1 su#0 nxge#0 20 ixgbe#0 5 px#1 nxge#5 ixgbe#1 21 mpt#1 ixgbe#1 ixgbe#1 6 22 7 23 8 px#1 nxge#2 ixgbe#1 24 ochi#1 px#1 ixgbe#1 9 nxge#2 ixgbe#1 25 ixgbe#0 ixgbe#0 10 26 11 27 12 e1000g#2 e1000g#3 ixgbe#0 ixgbe#0 ixgbe#1 28 nxge#1 13 ixgbe#0 29 e1000g#0 e1000g#1 14 30 15 31 21 2013/12/7 第九回 カーネル/VM探検隊
  22. 割り込みの制御 • 割り込み可能なCPUを減らす # psradm -i 2 3 6 7

    10 11 14 15 18 19 22 23 26 27 30 31 22 2013/12/7 第九回 カーネル/VM探検隊
  23. 割り込みの制御を外すと(1/2) 23 CPU 割り込み CPU 割り込み 0 16 ohci#0 ixgbe#0

    1 px#0 mpt#0 17 ixgbe#0 2 px#0 e1000g#0 18 ixgbe#0 3 px#0 e1000g#0 19 ixgbe#0 4 px#0 nxge#0 20 ixgbe#0 5 px#1 nxge#0 ixgbe#1 21 mpt#1 6 px#1 nxge#1 ixgbe#1 22 e1000g#2 7 px#1 nxge#1 ixgbe#1 23 e1000g#3 8 px#1 nxge#2 ixgbe#1 24 9 nxge#2 ixgbe#1 25 10 nxge#3 ixgbe#1 26 11 nxge#3 ixgbe#1 27 12 ixgbe#1 28 13 ixgbe#0 29 su#0 14 ixgbe#0 30 uata#0 15 ohci#1 ixgbe#0 31 2013/12/7 第九回 カーネル/VM探検隊
  24. 割り込みの制御を外すと(2/2) • 同じデバイスの割り込みが一つのコアに集中 – 命令キャッシュを汚さないため? – 割り込みによるストールを隠蔽できない – CPUの利用効率が下がる •

    Sun Fire T2000/T1000で割り込み可能なCPU を減らすのは常套手段 24 2013/12/7 第九回 カーネル/VM探検隊
  25. まとめ • ftp.jaist.ac.jp はSun Fire T2000で動いている • UltraSPARC T1はウェブサーバーに向き •

    割り込み可能なCPUを減らさないと性能が出ない 25 2013/12/7 第九回 カーネル/VM探検隊