最近使ったOSで,大勢に使いやすいOSはこんな感じだと思う
1. MacOS X
2. Windows XP
3. Ubuntu
4. Fedora 6 or SuSE
6. Debian
7. FreeBSD
8. NetBSD
9. gentoo or OpenBSD
11. Solaris
個人的に使いやすいOSはこんな感じ
1. MacOS X
2. Debian
3. NetBSD
4. Ubuntu
5. Windows XP
6. SuSE
7. Fedora 6 or FreeBSD
9. OpenBSD or gentoo
11. Solaris
Appleはユーザのことを良くわかっていると感じる.
Microsoftも実は結構良くわかっているが,センスが無い.
Sunは全くわかっていない.最悪.
BSD系,Debian系は,自分たちの路線をしっかり持っている感じ.
Fedora 6, SuSEはどっちつかず.
火曜日, 11月 28, 2006
月曜日, 11月 27, 2006
暗号化の速度
次は暗号化の速度を計算.
計測マシンは,CPU: PentiumIII 933MHz x 2, Memory: 1GB, OS: Debian etch / Linux 2.6
測定するのは,AES 128bit CBCモード,AES 256bit CBCモード,sha1
という感じなんだけど,この値,k(キロ)じゃなくて,M(メガ)の間違いな気がする…
というのはおいておいて,
AESの暗号化速度は,単純に相加平均して計算してみると,
という感じ,
sha1は,1024bytesのパケットを定常的に送信した場合
の速度が出る.
しかし,16bytesのパケットを定常的に送信したら,
しかでない.
PentiumIII 933MHzでAES 128使って暗号化している限り,限界値は250Mbpsあたり.
RC4使うと,この倍以上は出るっぽい.
しかし,1パケット毎に32バイト分だけ,AES 256で暗号化しているので,113Mbpsが限界っぽくて,netperfで測った速度はそれなりに良い結果なのがわかった.
つまり,どんなにプログラムを最適化しても,現状の2倍以上の性能は出せない.
通常の3倍には及ばないというわけです.
これならムーアの法則のほうが早いね.
計測マシンは,CPU: PentiumIII 933MHz x 2, Memory: 1GB, OS: Debian etch / Linux 2.6
測定するのは,AES 128bit CBCモード,AES 256bit CBCモード,sha1
% openssl speed aes-128-cbc aes-256-cbc sha1
Doing sha1 for 3s on 16 size blocks: 1030353 sha1's in 3.00s
Doing sha1 for 3s on 64 size blocks: 824617 sha1's in 3.01s
Doing sha1 for 3s on 256 size blocks: 500991 sha1's in 3.00s
Doing sha1 for 3s on 1024 size blocks: 194812 sha1's in 3.00s
Doing sha1 for 3s on 8192 size blocks: 29062 sha1's in 3.00s
Doing aes-128 cbc for 3s on 16 size blocks: 3020029 aes-128 cbc's in 3.00s
Doing aes-128 cbc for 3s on 64 size blocks: 1348323 aes-128 cbc's in 3.00s
Doing aes-128 cbc for 3s on 256 size blocks: 419475 aes-128 cbc's in 3.01s
Doing aes-128 cbc for 3s on 1024 size blocks: 111829 aes-128 cbc's in 3.00s
Doing aes-128 cbc for 3s on 8192 size blocks: 14270 aes-128 cbc's in 3.00s
Doing aes-256 cbc for 3s on 16 size blocks: 2647977 aes-256 cbc's in 3.00s
Doing aes-256 cbc for 3s on 64 size blocks: 1078655 aes-256 cbc's in 3.01s
Doing aes-256 cbc for 3s on 256 size blocks: 319714 aes-256 cbc's in 3.00s
Doing aes-256 cbc for 3s on 1024 size blocks: 83899 aes-256 cbc's in 3.00s
Doing aes-256 cbc for 3s on 8192 size blocks: 10642 aes-256 cbc's in 3.00s
OpenSSL 0.9.8c 05 Sep 2006
built on: Mon Oct 2 16:47:57 UTC 2006
options:bn(64,32) md2(int) rc4(idx,int) des(ptr,risc1,16,long)
aes(partial) blowfish(idx)
compiler: gcc -fPIC -DOPENSSL_PIC -DZLIB -DOPENSSL_THREADS -D_REENTRANT
-DDSO_DLFCN -DHAVE_DLFCN_H -DL_ENDIAN -DTERMIO -O3 -march=i686 -Wa,--noexecstack
-g -Wall -DOPENSSL_BN_ASM_PART_WORDS -DOPENSSL_IA32_SSE2 -DSHA1_ASM -DMD5_ASM
-DRMD160_ASM -DAES_ASM
available timing options: TIMES TIMEB HZ=100 [sysconf value]
timing function used: times
The 'numbers' are in 1000s of bytes per second processed.
type 16 bytes 64 bytes 256 bytes 1024 bytes 8192 bytes
sha1 5495.22k 17533.38k 42751.23k 66495.83k 79358.63k
aes-128 cbc 16106.82k 28764.22k 35676.28k 38170.97k 38966.61k
aes-256 cbc 14122.54k 22934.86k 27282.26k 28637.53k 29059.75k
という感じなんだけど,この値,k(キロ)じゃなくて,M(メガ)の間違いな気がする…
(8192bytes x 10642) / 3(s) x 1000(s) = 29056207333.33 = 29056.20M
というのはおいておいて,
AESの暗号化速度は,単純に相加平均して計算してみると,
AES 128: 252.3Mbps
AES 256: 192.3Mbps
という感じ,
sha1は,1024bytesのパケットを定常的に送信した場合
544.73Mbps
の速度が出る.
しかし,16bytesのパケットを定常的に送信したら,
44.0Mbps
しかでない.
PentiumIII 933MHzでAES 128使って暗号化している限り,限界値は250Mbpsあたり.
RC4使うと,この倍以上は出るっぽい.
しかし,1パケット毎に32バイト分だけ,AES 256で暗号化しているので,113Mbpsが限界っぽくて,netperfで測った速度はそれなりに良い結果なのがわかった.
つまり,どんなにプログラムを最適化しても,現状の2倍以上の性能は出せない.
通常の3倍には及ばないというわけです.
これならムーアの法則のほうが早いね.
netperf その2
環境は前と同じ.
netperf Server側:
OS: Debian etch Testing / Linux 2.6.16-2-686
CPU: PentiumIII 933MHz x 2
Memory: 1GB
netperf Client側:
OS: Debian etch Testing / Linux 2.6.16-2-686
CPU: PnetiumIII 900MHz x 4 on VMWare server
Memory: 256MB
実ネットワーク
仮想ネットワーク
結果
最近のCore 2 Duoとかだったらもっと早そうだけど.
DVTSの30Mbpsをなんとか送信できる程度は出てるので,こんなもんかな.
ところで,クライアントにNetBSD 4.0 Betaを使うと,かなりスループットが上がる事が判明.
netperf Server側:
OS: Debian etch Testing / Linux 2.6.16-2-686
CPU: PentiumIII 933MHz x 2
Memory: 1GB
netperf Client側:
OS: NetBSD 4.0 Beta
CPU: PentiumIII 933MHz x 2
Memory: 1GB
netperf Client側:
OS: Ubuntu 6.10 / Linux 2.6.17-10-server
CPU: PentiumIII 933MHz x 2
Memory: 1GB
結果
うーん,こんなに違うものなのか???
今度,Windows XPとMacOS Xで試してみよう.
netperf Server側:
OS: Debian etch Testing / Linux 2.6.16-2-686
CPU: PentiumIII 933MHz x 2
Memory: 1GB
netperf Client側:
OS: Debian etch Testing / Linux 2.6.16-2-686
CPU: PnetiumIII 900MHz x 4 on VMWare server
Memory: 256MB
実ネットワーク
% netperf -t TCP_STREAM -H solomon
TCP STREAM TEST from 0.0.0.0 (0.0.0.0) port 0 AF_INET
to solomon port 0 AF_INET
Recv Send Send
Socket Socket Message Elapsed
Size Size Size Time Throughput
bytes bytes bytes secs. 10^6bits/sec
87380 16384 16384 10.01 41.74
% netperf -t UDP_STREAM -H solomon.jpcert.cc
UDP UNIDIRECTIONAL SEND TEST from 0.0.0.0 (0.0.0.0) port 0 AF_INET
to solomon port 0 AF_INET
Socket Message Elapsed Messages
Size Size Time Okay Errors Throughput
bytes bytes secs # # 10^6bits/sec
107520 65507 10.00 7937 0 415.91
105472 10.00 60 3.14
仮想ネットワーク
% netperf -t TCP_STREAM -H 172.24.194.52
TCP STREAM TEST from 0.0.0.0 (0.0.0.0) port 0 AF_INET
to 172.24.194.52 (172.24.194.52) port 0 AF_INET
Recv Send Send
Socket Socket Message Elapsed
Size Size Size Time Throughput
bytes bytes bytes secs. 10^6bits/sec
87380 16384 16384 10.02 29.47
% netperf -t UDP_STREAM -H 172.24.194.52
UDP UNIDIRECTIONAL SEND TEST from 0.0.0.0 (0.0.0.0) port 0 AF_INET
to 172.24.194.52 (172.24.194.52) port 0 AF_INET
Socket Message Elapsed Messages
Size Size Time Okay Errors Throughput
bytes bytes secs # # 10^6bits/sec
107520 65507 10.00 999 0 52.34
105472 10.00 644 33.74
結果
実ネットワーク P2P@i
TCP 41.7Mbps 29.4Mbps
UDP 415.9Mbps 52.3Mbps
最近のCore 2 Duoとかだったらもっと早そうだけど.
DVTSの30Mbpsをなんとか送信できる程度は出てるので,こんなもんかな.
ところで,クライアントにNetBSD 4.0 Betaを使うと,かなりスループットが上がる事が判明.
netperf Server側:
OS: Debian etch Testing / Linux 2.6.16-2-686
CPU: PentiumIII 933MHz x 2
Memory: 1GB
netperf Client側:
OS: NetBSD 4.0 Beta
CPU: PentiumIII 933MHz x 2
Memory: 1GB
/usr/pkg/netperf/netperf -t TCP_STREAM -H solomon
TCP STREAM TEST to solomon : histogram
Recv Send Send
Socket Socket Message Elapsed
Size Size Size Time Throughput
bytes bytes bytes secs. 10^6bits/sec
87380 32768 32768 10.01 695.22
netperf Client側:
OS: Ubuntu 6.10 / Linux 2.6.17-10-server
CPU: PentiumIII 933MHz x 2
Memory: 1GB
netperf -t TCP_STREAM -H solomon
TCP STREAM TEST from 0.0.0.0 (0.0.0.0) port 0 AF_INET
to solomon port 0 AF_INET
Recv Send Send
Socket Socket Message Elapsed
Size Size Size Time Throughput
bytes bytes bytes secs. 10^6bits/sec
87380 16384 16384 10.02 54.34
結果
Linux 2.6 NetBSD 4
TCP 54.3Mbps 695.2Mbps
うーん,こんなに違うものなのか???
今度,Windows XPとMacOS Xで試してみよう.
土曜日, 11月 25, 2006
netperfを使った測定
netperf Server側:
OS: Debian etch Testing / Linux 2.6.16-2-686
CPU: PentiumIII 933MHz x 2
Memory: 1GB
netperf Client側:
OS: Debian etch Testing / Linux 2.6.16-2-686
CPU: PnetiumIII 900MHz x 4 on VMWare server
Memory: 256MB
まずは実ネットワークの測定結果
続いて,P2P@i上
結果
VM使ってこれだけでれば,動画ぐらいはストリーム出来そうだな.
OS: Debian etch Testing / Linux 2.6.16-2-686
CPU: PentiumIII 933MHz x 2
Memory: 1GB
netperf Client側:
OS: Debian etch Testing / Linux 2.6.16-2-686
CPU: PnetiumIII 900MHz x 4 on VMWare server
Memory: 256MB
まずは実ネットワークの測定結果
% netper -T TCP_STREAM -H solomon
TCP STREAM TEST from 0.0.0.0 (0.0.0.0) port 0 AF_INET
to solomon port 0 AF_INET
Recv Send Send
Socket Socket Message Elapsed
Size Size Size Time Throughput
bytes bytes bytes secs. 10^6bits/sec
87380 16384 16384 10.03 51.73
% netperf -t UDP_STREAM -H solomon
UDP UNIDIRECTIONAL SEND TEST from 0.0.0.0 (0.0.0.0) port 0 AF_INET
to solomon port 0 AF_INET
Socket Message Elapsed Messages
Size Size Time Okay Errors Throughput
bytes bytes secs # # 10^6bits/sec
107520 65507 10.00 7318 0 383.38
105472 10.00 74 3.88
続いて,P2P@i上
% netperf -t TCP_STREAM -H 172.24.251.203
TCP STREAM TEST from 0.0.0.0 (0.0.0.0) port 0 AF_INET
to 172.24.251.203 (172.24.251.203) port 0 AF_INET
Recv Send Send
Socket Socket Message Elapsed
Size Size Size Time Throughput
bytes bytes bytes secs. 10^6bits/sec
87380 16384 16384 10.02 30.00
% netperf -t UDP_STREAM -H 172.24.251.203
UDP UNIDIRECTIONAL SEND TEST from 0.0.0.0 (0.0.0.0) port 0 AF_INET
to 172.24.251.203 (172.24.251.203) port 0 AF_INET
Socket Message Elapsed Messages
Size Size Time Okay Errors Throughput
bytes bytes secs # # 10^6bits/sec
107520 65507 10.00 873 0 45.74
105472 10.00 865 45.32
結果
実ネットワーク P2P@i
TCP 51.7Mbps 30.0Mbps
UDP 383.4Mbps 45.8Mbps
VM使ってこれだけでれば,動画ぐらいはストリーム出来そうだな.
SIGPIPE
TCPのsocket書き込み時等に,既に相手側が閉じていたら,SIGPIPEが投げられる.
SIGPIPEが飛んでくるとアプリケーションが終了してしまうので,SIGPIPEを捕捉しなければいけないっぽい.
writeやsendtoに失敗した場合,errnoにはEPIPEがセットされる.
SIGPIPEが飛んでくるとアプリケーションが終了してしまうので,SIGPIPEを捕捉しなければいけないっぽい.
writeやsendtoに失敗した場合,errnoにはEPIPEがセットされる.
WRITE(2) BSD System Calls Manual WRITE(2)
NAME
write, writev, pwrite - write output
...
ERRORS
Write(), writev(), and pwrite() will fail and the file pointer will
remain unchanged if:
[EPIPE] An attempt is made to write to a pipe that is not open
for reading by any process.
[EPIPE] An attempt is made to write to a socket of type
SOCK_STREAM that is not connected to a peer socket.
火曜日, 11月 21, 2006
月曜日, 11月 20, 2006
C++ on MacOS X Panther
MacOS X Panther対応のg++は,Appleからはversion 3までしか出ていない
g++ version 3ではC++のtemplateとSTLを使うとうまく動かない場合があるので,Finkを入れて,g++のversion 4を使うようにしよう.
g++ version 3ではC++のtemplateとSTLを使うとうまく動かない場合があるので,Finkを入れて,g++のversion 4を使うようにしよう.
木曜日, 11月 16, 2006
iproute2 for Linux
eth0:
192.168.0.1
eth1:
10.0.0.1
destination next
192.168.0.0/24 192.168.0.88
10.0.0.0/8 10.0.0.88
# ip route add default via 192.50.109.88 table ispA
# ip route add default via 150.65.118.88 table ispB
# ip rule add from 192.168.0.0/24 lookup ispA
# ip rule add from 10.0.0.0/8 lookup ispB
# ip route add default via 192.168.0.88
水曜日, 11月 15, 2006
MacOS XにSTLportを入れる
1. STLportから,STLport 5.1.0 RC3をダウンロードしてくる.
2. STLport-5.1.0/stlport/stl/config/features.hに以下のパッチを当てる.
2.5 MacOS X Tigerの場合STLportのディレクトリに,C++のincludeディレクトリへのシンボリックリンクを作成する必要がある (2006/11/18 追加)
3. makeする
4. /usr/local以下にコピーする
2. STLport-5.1.0/stlport/stl/config/features.hに以下のパッチを当てる.
--- STLport-5.1.0/stlport/stl/config/features.h Sat Aug 5 18:11:19 2006
+++ STLport-5.1.0-apple/stlport/stl/config/features.h Wed Nov 15 01:07:56 2006
@@ -187,6 +187,12 @@
# else
# define _STLP_LITTLE_ENDIAN 1
# endif
+# elif defined (__APPLE__)
+# if defined (__BIG_ENDIAN__)
+# define _STLP_BIG_ENDIAN 1
+# else
+# define _STLP_LITTLE_ENDIAN 1
+# endif
# else
# error "can't determine endianess"
# endif
2.5 MacOS X Tigerの場合STLportのディレクトリに,C++のincludeディレクトリへのシンボリックリンクを作成する必要がある (2006/11/18 追加)
# ln -s /usr/include/c++/4.0.0 STLport-5.1.0/c++
3. makeする
% cd STLport-5.1.0/build/lib
% make -f gcc.mak clean all install
4. /usr/local以下にコピーする
% su
# tar cf - stlport | (cd /usr/local/include; tar xf -)
# chmod -R a+r /usr/local/include/stlport
# chown -R root:wheel /usr/local/include/stlport
# (cd lib; tar cf - --exclude=CVS --exclude=.cvsignore .) | (cd /usr/local/lib; tar xf -)
# chown -R root:wheel /usr/local/lib/libstlport*
# exit
gccで定義されているマクロを見る
% echo | gcc -v -E -dM -
#define __DBL_MIN_EXP__ (-1021)
#define __FLT_MIN__ 1.17549435e-38F
#define __CHAR_BIT__ 8
#define __WCHAR_MAX__ 2147483647
#define __DBL_DENORM_MIN__ 4.9406564584124654e-324
...
MacOS Xの場合,
#define __APPLE__ 1
と定義されていて,エンディアンは,
#define __BIG_ENDIAN__ 1
となっているか,
#define __LITTLE_ENDIAN__ 1
となっている.
月曜日, 11月 13, 2006
Road Map
1. implement CUI
2. improve and modify the algorithm of DHT
3. implement Web UI
4. test on MacOS X Tiger, NetBSD 4, Debin testing, Fedora 6, Ubuntu 6.10
5. implement DNS
6. implement ICMP unreach
7. implement IP routing
8. implement a structure to collect data
9. test on some OSes
10. release and distribute!
11. implement IPv6
...
2. improve and modify the algorithm of DHT
3. implement Web UI
4. test on MacOS X Tiger, NetBSD 4, Debin testing, Fedora 6, Ubuntu 6.10
5. implement DNS
6. implement ICMP unreach
7. implement IP routing
8. implement a structure to collect data
9. test on some OSes
10. release and distribute!
11. implement IPv6
...
Fedora 6でselinuxを無効にする
起動時に無効にする.
設定ファイルで無効にしておく.
# /usr/sbin/getenforce
Enforcing
# /usr/sbin/setenforce 1
# /usr/sbin/getenforce
Permissive
設定ファイルで無効にしておく.
# vi /etc/selinux/config
# SELINUX=enforcing
SELINUX=disabled
日曜日, 11月 12, 2006
Fedora 6でIPv4のzeroconfを無効にする
# netstat -rn
Destination Gateway Genmask
169.254.0.0 0.0.0.0 255.255.0.0
# vi /etc/sysconfig/network
NOZEROCONF=yes
# /etc/rc.d/init.d/network restart
# netstat -rn
登録:
投稿 (Atom)