From nakai.norihisa @ yes.nttcom.ne.jp Fri Mar 21 12:10:21 2008 From: nakai.norihisa @ yes.nttcom.ne.jp (nakai norihisa) Date: Fri, 21 Mar 2008 12:10:21 +0900 Subject: [Ultramonkey-l7-develop 161] =?iso-2022-jp?b?bDd2c2QbJEIkThsoQmNhY2hlIHByb2ZpbGU=?= Message-ID: <47E3271D.8000704@yes.nttcom.ne.jp> TO:皆様 中居です。 お疲れ様です。 l7vsd_1.x-lilithをvalgrindのキャッシュプロファイラにかけてみました。 詳しくは添付のlogを見ていただけると幸いですが、簡単な分析を。 環境: UltraMonkey-L7 machine: 注:4coreですが長いので1core分で。 # cat /proc/cpuinfo processor : 0 vendor_id : GenuineIntel cpu family : 6 model : 15 model name : Intel(R) Xeon(R) CPU 5160 @ 3.00GHz stepping : 6 cpu MHz : 3000.107 cache size : 4096 KB physical id : 0 siblings : 2 core id : 0 cpu cores : 2 fpu : yes fpu_exception : yes cpuid level : 10 wp : yes flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm syscall lm constant_tsc pni monitor ds_cpl vmx est tm2 cx16 xtpr lahf_lm bogomips : 6004.34 clflush size : 64 cache_alignment : 64 address sizes : 36 bits physical, 48 bits virtual power management: # cat /proc/meminfo MemTotal: 2057992 kB MemFree: 426704 kB Buffers: 314532 kB Cached: 1053572 kB SwapCached: 0 kB Active: 981148 kB Inactive: 479152 kB HighTotal: 0 kB HighFree: 0 kB LowTotal: 2057992 kB LowFree: 426704 kB SwapTotal: 2048248 kB SwapFree: 2048112 kB Dirty: 4 kB Writeback: 0 kB AnonPages: 92164 kB Mapped: 27484 kB Slab: 147044 kB PageTables: 6932 kB NFS_Unstable: 0 kB Bounce: 0 kB CommitLimit: 3077244 kB Committed_AS: 194288 kB VmallocTotal: 34359738367 kB VmallocUsed: 2384 kB VmallocChunk: 34359734975 kB HugePages_Total: 0 HugePages_Free: 0 HugePages_Rsvd: 0 Hugepagesize: 2048 kB 上記環境にClientMachineが2台、RelServerが2台とした環境で計測してみました。 client1 -+ +- real server | -- UltraMonkey-L7 --| client2 -+ +- real server >==4582== I refs: 1,230,763,843,997 >==4582== I1 misses: 5,519,159,256 >==4582== L2i misses: 6,572 >==4582== I1 miss rate: 0.44% >==4582== L2i miss rate: 0.00% >==4582== >==4582== D refs: 597,409,442,874 (406,375,227,704 rd + 191,034,215,170 wr) >==4582== D1 misses: 32,370,548,922 ( 29,361,388,502 rd + 3,009,160,420 wr) >==4582== L2d misses: 48,988 ( 20,566 rd + 28,422 wr) >==4582== D1 miss rate: 5.4% ( 7.2% + 1.5% ) >==4582== L2d miss rate: 0.0% ( 0.0% + 0.0% ) >==4582== >==4582== L2 refs: 37,889,708,178 ( 34,880,547,758 rd + 3,009,160,420 wr) >==4582== L2 misses: 55,560 ( 27,138 rd + 28,422 wr) >==4582== L2 miss rate: 0.0% ( 0.0% + 0.0% ) このCPUには 1st命令キャッシュ32kbyte(I1) 1stデータキャッシュ32kbyte(D1) 2ndキャッシュ(命令データ混在型) 4Mbyte のっております。 命令キャッシュミスが0.44%ですからほとんどがキャッシュに乗っている計算ですね。 D1のミスレートは5.4%、L2のミスレートは0.0%です D1が64kしかありませんからここにUltraMonkeyのデータ、たとえばiomux_listの配列が 乗り切ることはありませんから、大分あふれるだろうとは思っていたのですが、 配列の先頭部分(使用頻度の高いもの)が乗っかっている様子で予想よりは かなりキャッシュのヒット率が高いです。 通常L1+L2含めてマルチメディア系では命令が98%、データがが90%程度キャッシュヒットすると 言う情報がIntelから公開されています。 http://download.intel.com/jp/developer/jpdoc/vol6iss1_art02_j.pdf マルチメディア系は基本的に繰り返しの多い処理が多いため98%と言うヒット率は驚異的で 通常のアプリケーションならば90前後だと思われます。 と、すればl7vsd-1.x-lilithの 1st命令キャッシュが99.5%のキャッシュヒット 1ndデータキャッシュが94.5%のキャッシュヒット 2ndキャッシュ(データ命令混在型)がほぼ100%と言う値は驚異的にキャッシュの使用効率がよいといえます。 1stキャッシュへのアクセスがほとんどレイテンシーなしに、2ndキャッシュアクセスが 数十クロック、メインメモリへのアクセスが数百クロックをロスするのを考慮した場合、 このキャッシュに全て乗りうるコードと言うのは利点ですね。 #シングルスレッドだから2ndキャッシュ間のスヌーズ処理が無いのは利点ですが… #ソレが良いかどうかはまた別に議論する必要があるでしょう。 よって今回のコーディングではキャッシュの使用効率の高いコードが出来ている、と 解釈してよいと思われます。 皆様と情報共有できれば幸いです。 どうぞよろしくお願いいたします。 -------------- next part -------------- 文字コード指定の無い添付文書を保管しました... 名前: cg_annotate.log URL: http://lists.sourceforge.jp/mailman/archives/ultramonkey-l7-develop/attachments/20080321/ca85ae32/attachment.txt -------------- next part -------------- 文字コード指定の無い添付文書を保管しました... 名前: chachegrind_20080318.log.4582 URL: http://lists.sourceforge.jp/mailman/archives/ultramonkey-l7-develop/attachments/20080321/ca85ae32/attachment-0001.txt