https://blogs.oracle.com/yenduri/entry/so_flow_sla_socket_option
Solaris 11.2で新しいソケットオプションであるSO_FLOW_SLAを追加しました。これを使うとアプリケーションがソケットレベルフローやリソース管理プロパティをsetsockopt()を使って作成することができます。このソケットオプションを使う場合には、PRIV_SYS_FLOW_CONFIG 権限が必要です。
setsockopt(3C) のmanページにはプログラミングAPIの詳細が全て掲載されています。利用は以下のように簡単です。
The flows created using setsockopt(3C)を用いて作成したフローは、pfiles(1)からだけでなく、flowadm(1M), flowstat(1M)を使って監視することができます。sock_flow_props_t sprop; sock = socket(AF_INET, SOCK_STREAM, 0); sprop.sfp_version = SOCK_FLOW_PROP_VERSION1; sprop.sfp_mask = SFP_MAXBW; sprop.sfp_maxbw = 500000000; /* 500 Mbps */ setsockopt(sock, SOL_SOCKET, SO_FLOW_SLA, &sprop, sizeof (sprop));
このソケットオプションを使って-Mオプションを実装しているnc(1)/netcatツールの例を見てみましょう。
nc -l 80 を 10.2.3.118 上で実行します。
別の画面で以下のように観察できます。# nc -M maxbw=100M 10.2.3.118 80 ...
# flowadm FLOW LINK PROTO LADDR LPORT RADDR RPORT DSFLD 24.sys.sock net1 tcp 10.2.3.117 38769 10.2.3.118 80 -- # flowadm show-flowprop FLOW PROPERTY PERM VALUE DEFAULT POSSIBLE 24.sys.sock maxbw rw 100 -- -- 24.sys.sock priority rw -- medium low,medium,high # pfiles `pgrep nc` 18827: nc -M maxbw=100M 10.2.3.118 80 ... 3: S_IFSOCK mode:0666 dev:556,0 ino:5341 uid:0 gid:0 size:0 O_RDWR SOCK_STREAM SO_SNDBUF(49152),SO_RCVBUF(128872), SO_FLOW_SLA(maxbw: 100.000 mbits/sec) sockname: AF_INET 10.2.3.117 port: 38769 peername: AF_INET 10.2.3.118 port: 80 congestion control: newreno ...
0 件のコメント:
コメントを投稿