• 検索結果がありません。

Ceforeチュートリアル資料_070823

N/A
N/A
Protected

Academic year: 2021

シェア "Ceforeチュートリアル資料_070823"

Copied!
30
0
0

読み込み中.... (全文を見る)

全文

(1)

第9回ICN研究会ワークショップ

Ceforeチュートリアル

(2)

Cefore

l

軽量かつ汎用的なCCNベースソフトウェアプラットフォーム

u

言語:C、OS:Linux(ubuntu 14.04 or 16.04)、MacOS、

Raspbian、 Android

u

最小機能構成(cefnetd(後述))

Ø

フォワーディング機能と基本オペレーションツールのみを具備

p

(1) FIB、(2) PIT、(3) InterestおよびObject転送

p

Content Storeは具備していない

u

ユースケースに合わせた機能構成の実現

Ø

リソースの乏しいセンサーノードでは最小機能構成で起動

Ø

最小機能以外はPluginもしくは外部機能として実装

Ø

Plugin実装として柔軟かつ自由に機能拡張を組み込み

p

キャッシュ、モビリティ、トランスポート、NDNパケット転送

p

使用しない機能はビルドしない

Ø

外部機能実装

p

csmgrd (後述)とのTCPソケット通信

(3)

Cefore

の機能構成

l

フォワーディングデーモン(cefnetd)は全てのノードで稼働

l

コンテンツストア管理デーモン(csmgrd)は、コンテンツストアが必要な場合のみ稼動

させる

u

下図の例では赤枠内のcefnetdでコンテンツストアを共有する

パブリッシャ

cefnetd

csmgrd

csmgrd

cefnetd

cefnetd

cefnetd

cefnetd

スマホ・タブレット

PC

センサ

cefnetd

cefnetd

cefnetd

cefnetd

cefnetd

csmgrd

ルータ

(4)

Cefore

ヘッダー&パケットTLV

l

CCNx-1.0のパケットフォーマットに準拠

u

CCNx-1.0のヘッダー構成

Ø

8オクテットの固定ヘッダー

Ø

最大247バイトのOptional Hop-by-hopヘッダー

u

Optional Hop-by-hopヘッダー

Ø

ホップ毎に処理可能なオプション領域

Ø

Cefore独自のプロトコル拡張はこのオプションヘッダーに配置

+ - - - + - - - + - - - + - - - +

|

V e r s i o n

|

P a c k e t T y p e

|

P a c k e t L e n g t h

|

+ - - - + - - - + - - - + - - - +

|

P a c k e t T y p e s p e c i f i c f i e l d s

| H e a d e r L e n g t h

|

+ - - - + - - - + - - - + - - - +

/ O p t i o n a l H o p - b y - h o p h e a d e r T L V s

/

+ - - - + - - - + - - - + - - - +

/ P a c k e t P a y l o a d T L V s

/

+ - - - + - - - + - - - + - - - +

CCNx Messages Format

[出典] CCNx Messages in TLV Format(draft-irtf-icnrg-ccnxmessages-04)

(5)
(6)

cefnetd

l

Ceforeの土台となるシンプルなフォワーディングデーモンであり、

全ノード(送受信者・ルーター)に組み込む

l

実装機能

u

フォワーディング機能

u

Staticルーティング機能

u

Plugin interface

Ø

キャッシュ、モビリティ、経路制御などPluginのためのインタフェース

u

Security機能(未定)

l

コンパイルに必要となるライブラリ

u

OpenSSL(ver.1.0.2l)

cefnetd

X plugin

Y plugin

Z plugin

Cefore plugin interface

Module

(7)

cefnetd – Configuration

l

cefnetdの設定ファイルは以下の3種類

u

cefnetd.conf ・・・ cefnetdに関する各種パラメータ設定

u

cefnetd.fib

・・・ cefnetd起動時のFIB

Ø

FIBはcefnetd起動後にcefrouteユーティリティでも操作可能

u

plugin.conf

・・・ Cefore Plugin全般に関するパラメーター設定

l

設定ファイルは以下のディレクトリに配置する

u

非スーパーユーザ

Ø

“$CEFORE_USER_DIR/cefore”

Ø

環境変数“CEFORE_USER_DIR”のデフォルトは“$HOME”

u

スーパーユーザ

Ø

“$CEFORE_DIR/cefore”

Ø

環境変数“CEFORE_DIR”のデフォルトは“/usr/local”

u

各Plugin固有の設定ファイルは、上記ディレクトリ配下のpluginディレ

クトリに配置

l

設定ファイルの行頭が“#”の行は、コメント行として扱われる

(8)

通信概要 – Interest送信

l

Interestを発行し、UNIXドメインソケットを介してcefnetdへ

l

特定のTransport機能を使用する場合、アプリケーション種別に

応じたTransportを選択

アプリケーションがInterestを発行

UNIXドメインソケット

cefnetdがInterestを解析し、Pluginを

Callback

Callback

Pluginが受信Interestを処理し、Strategy

に従い転送先を決定

cefnetdは送信キューよりInterestをデ

キューし、Pluginが決定した転送先に転

送信キュー

n

受信したInterestのOptional Hop-by-hopヘッダーを解析

n

PIT更新

n

指定されたPluginをサポートしている場合はCallback(Plugin呼

び出し)

n

Callbackする際、FIBから検索した転送先をPluginに渡す

n

Optional Hop-by-hopヘッダーの解析後、Nameに従いInterest

を処理

n

転送が必要な場合、Strategyに従い転送先を決定

n

転送するInterestは送信キュー(共有メモリ)にインキュー

n

転送先はPluginのStrategyがFIBの検索結果から決定

(9)

通信概要 – Content Object送信

l

PITに従いキャッシュヒットしたObjectを転送

cefnetdがキャッシュにヒットしたObjectを

応答

Callback

Pluginが受信Objectを処理し、Strategyに

従い転送先を決定

送信キュー

cefnetdがObject解析し、PluginをCallback

TCP/UDP

アプリケーションがObjectを受信

cefnetdは送信キューよりObjectをデ

キューし、Pluginが決定した転送先に転

n

受信したObjectのOptional Hop-by-hopヘッダーを解析

n

指定されたPluginをサポートしている場合はCallback

n

Callbackする際、PITから検索した転送先をPluginに渡す

n

Optional Hop-by-hopヘッダー解析後、Nameに従いObjectを

処理

n

転送が必要な場合、Strategyに従い転送先を決定

n

転送するObjectは送信キュー(共有メモリ)にインキュー

n

転送先はPluginのStrategyがPITの検索結果から決定

(10)

FIB

実装概要

l

cefore-0.6.0/src/lib/cef_fib.cにFIBに関する処理を実装

l

FIBはハッシュテーブル(CefT_Hash_Handle構造体)として実装

u

cefore-0.6.0/src/cefnetd/cef_netd.hのCefT_Netd_Handle構造体メンバfibでハッシュテーブ

ルを保持

u

FIBに収容可能なFIBエントリ数は、cefnetd.confのFIB_SIZEを満たす素数となる

u

FIBエントリ(CefT_Fib_Entry構造体)は以下のデータを保持する

Ø

unsigned char*

Name (検索キー)

Ø

unsigned int

Name長 (バイト)

Ø

CefT_Fib_Face

転送先Faceリスト

u

Nameをハッシュ値に変換し、FIBエントリをハッシュテーブルで管理

Ø

ハッシュ操作APIはcef_hash.c/hに実装されている

ü

ハッシュテーブル作成:cef_hash_tbl_create()

ü

データの追加:cef_hash_tbl_item_set()

ü

データの検索 (アクセス):cef_hash_tbl_item_get()

ü

データの削除:cef_hash_tbl_item_remove()

l

FIBに同じ上流ルータに対してTCPとUDP接続が両方存在する場合、Interestを受信

したプロトコルと同じプロトコルを優先する

u

同じプロトコルの転送先が1つも存在しない場合は、異なるプロトコルの全転送先に転送す

l

Transport Pluginへは受信Interestと共にFIB検索結果(転送先Face一覧)を受け渡す

u

Transport Pluginはプロトコル仕様、Strategyに従い転送する

(11)

FIB

実装(Advanced)

l

FIBエントリの更新、アクセス

u

NameをキーにFIBエントリをLongest Matchで検索

Ø

cef_fib_entry_search()

u

FIBエントリを追加

Ø

cef_fib_entry_create()

:FIBエントリの作成

Ø

cef_hash_tbl_item_set()

:ハッシュテーブルに追加

u

FIBエントリに転送先Faceを追加

Ø

cef_fib_faceid_insert()

u

FIBエントリから転送先Faceを削除

Ø

cef_fib_faceid_remove()

u

FIBよりNameで指定したFIBエントリを削除

Ø

cef_fib_entry_destroy()

l

FIBの拡張

u

FIBエントリ(CefT_Fib_Entry構造体)に状態変数を追加

u

プロトコル毎のFIBを作成

Ø

CefT_Netd_Handle構造体メンバにハッシュテーブルを追加

Ø

上記FIB操作APIとハッシュ操作APIで難しい実装は不要

(12)

PIT

実装概要

l

cefore-0.6.0/src/lib/cef_pit.cにPITに関する処理を実装

l

PITもFIB同様にハッシュテーブルとして実装

u

cefore-0.6.0/src/cefnetd/cef_netd.hのCefT_Netd_Handle構造体メンバ

pitでハッシュテーブルを保持

u

PITに収容可能なPITエントリ数は、cefnetd.confのPIT_SIZEを満たす素

数となる

u

PITエントリ(CefT_Pit_Entry構造体)は以下のデータを保持する

Ø

unsigned char*

Name (検索キー)

Ø

unsigned int

Name長 (バイト)

Ø

CefT_Down_Faces

Interestを受信したFaceリスト

Face毎の生存時間 (lifetimeなども管理)

Ø

CefT_Up_Faces

Interestを転送したFaceリスト

u

PITエントリにFace毎の生存時間を設定しておけば、cefnetdが定期的

にチェックしエントリを削除する

l

Transport Pluginへは受信Content Objectと共にPIT検索結果(転送先

Face一覧)を受け渡す

(13)

PIT

実装(Advanced)

l

PITエントリの更新、アクセス

u

NameをキーにPITエントリをExact Matchで検索

Ø

cef_pit_entry_lookup() / cef_pit_entry_search()

p

cef_pit_entry_lookup()は指定されたNameのPITエントリが未作成の場

合は作成する

u

PITエントリにInterest受信Faceを追加

Ø

cef_pit_entry_down_face_update()

p

PITエントリの有効期限の再計算、受信Interestの転送の要否判定も

実行する

p

PITの集約アルゴリズムの変更はこの関数を改変する

u

PITエントリにInterest転送先Faceを追加

Ø

cef_pit_entry_up_face_update()

u

PITエントリの削除

Ø

cef_pit_entry_free()

(14)

csmgrd

l

cefnetdは外部機能デーモンであるCS管理デーモン(csmgrd)と連携

l

cefnedとcmsgrd間はTCPにて接続

u

1つのcsmgrdに対して複数のcefnetdの接続が可能

Ø

設定ファイル(csmgrd.conf

)にて接続可能なcefnetdを指定

u

リモートからのTCP接続を使用したcsmgrdの状態確認も可能

Node A

cefnetd

Node B

cefnetd

csmgrd

Node C

cefnetd

Node A

csmgrd

Node B

cefnetd

Node C

cefnetd

Node D

cefnetd

TCP

TCP

TCP

TCP

(15)
(16)

Cefore Plugin

l

機能追加・拡張のためのPluginライブラリ

u

フォワーディング機能(cefnetd)に対する「拡張機能」の追加

u

CS機能(csmgrd)に対する「キャッシュ領域選択機能」及び「キャッ

シュアルゴリズム」の追加

l

Pluginライブラリ連携用コールバック関数インターフェース

u

所定のCallback関数を用いて、Pluginをcefnetd/csmgrdと組み合

わせて使う

u

必要なPluginを必要に応じて開発し、着脱も可能

Ø

軽微なMakefileの変更とリコンパイルで機能追加可能

Ø

追加した各機能はplugin.confにてON/OFF可能

u

異なるPluginライブラリ間で機能拡張・追加の影響を与えない

(17)

Cefore Plugin – cont’d

l

cefnetd用Plugin実装例

u

Sample transport

Ø

Plugin実装用のサンプルコード

u

NDN

Ø

NDNメッセージフォーマットのInterest/DataをNDN FIBに従い転送

l

csmgrd用Plugin実装

u

Cache領域選択((標準で提供)filesystem, memory)

u

Cache algorithm

Ø

(標準で提供)LRU, LFU, FIFO

Ø

その他アルゴリズム拡張

l

Plugin間の連携処理

u

Pluginの上にmodule/library(既存の外部実装など)を実装することも可

(18)

API

概要

l

Callback関数

u

各PluginのCallback関数

Ø

Callback関数は、(1) 初期化処理、(2) Interest受信処理、(3) Object

受信処理、(4) PIT変更、(5) 後処理、の5種類(次項)

Ø

必要ない処理については実装不要

u

Callback関数のインタフェース(引数、戻り値)以外の制約は設けな

Ø

Plugin内でスレッド化

Ø

独自のタイマ管理

Ø

メッセージの送出(InterestやObjectの再送信、レポートの送信)

Ø

外部ライブラリ使用

Ø

外部機能との通信

l

その他

u

コンフィグファイル解析、パラメータ参照処理は共通API化

u

送信バッファ操作、メモリプール操作、ログ操作なども共通API化

(19)

Callback

の種類

l

Pluginで利用されるCallback

u

init

Ø

cefnetdの初期処理内で呼出すCallback。内部変数の初期化、メモリ確保お

よびスレッド生成などPlugin毎の初期化処理を実行する。

u

cob

Ø

cefnetdがObjectを受信した際に呼出すCallback。受信ObjectおよびPITの検

索結果(転送先候補)を引数に呼出される。

u

interest

Ø

cefnetdがInterestを受信した際に呼出すCallback。受信InterestおよびFIBの

検索結果(転送先候補)を引数に呼出される。

u

destroy

Ø

cefnetdの後処理内で呼出すCallback。プラグインの後処理(スレッドの回収、

メモリ解放など)を実行する。

l

一部のPluginのみ利用されるCallback

u

pit

Ø

cefnetdがPITよりPITエントリを削除した際に呼出すCallback。cefnetdよりPIT

エントリの削除が発生した通知を受信したい場合は必要。

(20)

Callback

のインタフェース

l

各Callback関数のインタフェースを以下に示す。 “CefT_Plugin_X“は、各プラグイン

情報管理構造体である。

u

構造体”CefT_Rx_Elem“は受信メッセージ、メッセージ解析情報、転送先候補Faceなど、構

造体“CefT_Rx_Elem_Sig_DelPit“は削除されたPITエントリに関する情報が設定されている。

l

Callback内で処理したメッセージを転送するには

u

Callback関数内で処理したメッセージを転送する場合、送信キュー(全Pluginからアクセス

可能)にメッセージをインキューする。インキューしたメッセージはPluginが決定した転送先

にメッセージを転送する。

u

逆にメッセージを転送しない場合は送信キューにインキューしない。

l

Callback内からメッセージの送出も可能

u

例えば、Callback”cob”にてObjectのロストを検知した場合、Interestを生成し送信キューに

インキューすることにより、ロスとしたObject取得を試みることができる。

int (*init)(CefT_Plugin_X*);

int (*cob)(CefT_Plugin_X*, CefT_Rx_Elem*);

int (*interest)(CefT_Plugin_X*, CefT_Rx_Elem*);

void (*pit)(CefT_Plugin_X*, CefT_Rx_Elem_Sig_DelPit*);

void (*destroy)(CefT_Plugin_X*);

(21)

Callback

の設定

l

Developerが実装したCallbackはcefnetdがCallできるよう設定する必要

がある

l

cef_X_plugin.c(Transportなどプラグイン毎に共通処理をまとめたソース

ファイル)にある初期化関数にて、Callback関数を設定する

#ifdef

CefC_Plugin_Samptp

・・・

configureで切り分け

lp = cef_plugin_parameter_value_get (

“TRANSPORT”

,

“samptp”

);

・・・ コンフィグファイルのsamptp=yes/no(ON/OFF)

if

(lp) {

・・・ パラメータが未設定の場合はNULL

value_str = (

char

*) cef_plugin_list_access (lp, 0);

・・・ 設定値はリスト化された形で取得

if

(strcmp (value_str,

“yes”

) == 0) {

・・・ OFFの場合、Callbackは初期値のNULLとなり、cefnetdよりCallされない

work[CefC_T_OPT_TP_SAMPTP].variant

= CefC_T_OPT_TP_SAMPTP;

・・・ Transport Variantを設定

work[CefC_T_OPT_TP_SAMPTP].tx_que

= tx_que;

・・・ 送信キューの共有メモリ

work[CefC_T_OPT_TP_SAMPTP].tx_que_mp = tx_que_mp;

・・・ メモリープールハンドル

work[CefC_T_OPT_TP_SAMPTP].init

= cef_plugin_samptp_init;

・・・ 以下がCallbackの設定となる

work[CefC_T_OPT_TP_SAMPTP].cob

= cef_plugin_samptp_cob;

関数名に制約はなく、引数、戻り値

work[CefC_T_OPT_TP_SAMPTP].interest = cef_plugin_samptp_interest;

のみ規定の型にすればよい

work[CefC_T_OPT_TP_SAMPTP].pit

= cef_plugin_samptp_delpit;

・・・ cefnetdからCallしない場合はNULL

work[CefC_T_OPT_TP_SAMPTP].destroy

= cef_plugin_samptp_destroy;

}

}

(22)

Ceforeディレクトリと追加Plugin構成

cefore-x.x.x

・・・ Ceforeのルートディレクトリ

|- configure.ac

・・・ 「1. オプションチェックの追加」を参照

|- Makefile.am

・・・ 「1. configureオプションの追加」を参照

|- src

| |- cefnetd

| |- include

| | |- cefore

| | | |- cef_plugin.h

| | | |-

cef_newplugin.h

・・・ 新規に追加するPluginのヘッダーファイル

| | | +- Makefile.am

・・・ 「2. ヘッダーファイルの追加」を参照

| | +- Makefile.am

| |- lib

| |- Makefile.am

| +- plugin

| |- cef_plugin.c

| |- cef_X_plugin.c

| |- Makefile.am

・・・ 「2. ソースコードファイルの追加」を参照

| +- X

・・・ Transport、Cache algorithmなどのディレクトリ

| +-

newplugin

・・・ 新規に追加するPlugin用ディレクトリ

| +-

cef_newplugin.c

・・・ 新規に追加するPluginのソースコードファイル

|- tools

+- utils

(23)

Plugin

の追加⼿順(1)

l

オプションチェックの追加

u

cefore-x.x.x/configure.ac

l

configureオプションの追加

u

cefore-x.x.x/Makefile.am

# set distcheck configure flag

DISTCHECK_CONFIGURE_FLAGS=--enable-csmgr --enable-hoge … --enable-newplugin

# checks for arg

dnl

dnl

check newplugin

dnl

AC_ARG_ENABLE(

newplugin,

AS_HELP_STRING([--enable-newplugin], [new plugin (default off)]),

[enable_newplugin=yes],

[enable_newplugin=no]

)

(24)

Plugin

の追加⼿順(2)

l

ヘッダーファイルの追加

u

cefore-x.x.x/src/include/cefore/Makefile.am

l

ソースコードファイルの追加

u

新規に追加するCallbackなどを記述したPluginのソース

は、cefore-x.x.x/src/plugin/X/newpluginに追加

u

cefore-x.x.x/src/plugin/Makefile.amにビルド対象となる

ソースコードファイル、およびマクロを追加

if NEWPLUGIN_ENABLE

# AM_CFLAGSはソースコード、ヘッダーファイルのifdef/ifndefで使用

AM_CFLAGS+=-DCefC_Plugin_Newplugin

AM_CSOURCES+=X/newplugin/cef_newplugin.c

endif # NEWPLUGIN_ENABLE

if NEWPLUGIN_ENABLE

CEF_HEADER+=cef_newplugin.h

endif

# NEWPLUGIN_ENABLE

(25)

NDN Plugin

l

NDNメッセージ⇔Ceforeメッセージ変換するためのPlugin

l

ゲートウェイ(CeforeとNDNの境界)ノードにてNDN Pluginを有効化

l

CeforeネットワークよりNDNネットワークへメッセージを転送するためには、

NDN FIBが必要

u

現時点での実装ではCCN FIBおよびPITとのマッチングを優先し、CCN FIB/PIT

に転送先が存在しない場合のみNDN FIB/PITとマッチングする

NFD

NFD

NFD

cefnetd

NDN

Plugin

cefnetd

NDN

Plugin

①NDN Interestメッセージを送

NDN Interest受信時の動作

NDN InterestをCCNフォーマットに変換

NDN PITエントリを作成

・CCN InterestをCCNネットワークへ転送する

NDNネットワークへのInterest転送動作

NDN FIBとマッチング

CCN InterestをNDNフォーマットに変換

・NDN InterestをFIBに従いNDNネットワークへ転送す

cefnetd

④NDN Cob受信時の動作

・NDN CobをCCNフォーマットに変換

・CCN CobをPITに従いCCNネットワークへ転送

⑤NDNネットワークへのCobの転送動作

・NDN PITとマッチング

・CCN CobをNDNフォーマットに変換

NDN CobをNDNネットワークへ転送する

⑥NDN Cobを受信

(26)

Cache Plugin & Cache Algorithm

l

csmgrdは起動時に使用するCache Pluginを指定

u

File System Cache(低速、大容量CS)、Memory Cache(高速、小容量CS)を

pluginにて具備

l

各Cache Pluginは起動時に使用するCache algorithmを指定

u

LRU、LFU、FIFOを具備

u

ユーザー独自のCahce algorithmを実装可能

cefnetd

csmgrd

TCP

File System Cache

Memory Cache

Cache Plugin X

Cache Plugin Y

Cache Plugin

LRU

Cache algorithm X

Cache algorithm

LFU

FIFO

Cache Pluginは、初期処理時に指定されたCache algorithm (共有ライブラリ)をダイナ

ミックロードする

. また開発者は、独自のCache algorithmを実装することも可能.

csmgrdは起動時に、csmgrd.confで指定され

たCache Plugin(共有ライブラリ)をダイナミッ

クロードする

開発者は、独自のCache Pluginを実

装することも可能

cefnetd

(27)
(28)

Tools/Command Utilities

l

コンテンツの配信、取得

u

Named Cobのアップロード・ダウンロード

Ø

cefputfile/cefgetfile

u

特定のContent Objectのダウンロード

Ø

cefgetchunk

u

ストリーム配信・受信

Ø

cefputstream/cefgetstream

l

ネットワーク管理ツール

u

コンテンツがキャッシュされているノードの特定

Ø

conping

u

コンテンツまでの経路、キャッシュされているコンテンツの詳細取得

Ø

contrace

l

その他

u

Wireshark

(29)

Conping

l

conping

Ø

指定したコンテンツがキャッシュされているノードの特定ツール

p

Contrace(次項)と異なりコンテンツまでの経路やキャッシュされているコンテンツの詳細を

取得することはできない

Ø

conping prefix [-r responder] [-w wait_time] [-h hop_limit]

responder

応答を要請するノード(IPアドレス)

wait_time

最大応答待ち時間(sec)

hop_limit

要求メッセージの最大ホップ数

Ø

実行結果は以下の形式で出力される

response from

Responder: Result

time=

RTT

ms

Responder

:応答者のIPアドレス

Result

:conpingの実行結果

cache

:「prefix」に前方部分一致するコンテンツが

Responderにキャッシュされている

no cache

:「prefix」に前方部分一致するコンテンツが

Responderにキャッシュされていない

no route

:要求メッセージの転送先がResponder のFIBに

登録されていないため転送できなかった

(30)

Contrace

l

contrace

Ø

指定したコンテンツがキャッシュされているノード、そのノードまでの経路、各ホップ間の遅

延、キャッシュされているコンテンツの詳細情報を取得するツール

p

各ホップ間の遅延を正確に計測するためには各装置が時刻同期している必要がある

Ø

contrace name_prefix [-p] [-n] [-o] [-r hop_count] [-s skip_hop] [-w wait_time]

name_prefix

トレースするコンテンツのプレフィックス

-p

「name_prefix」とコンテンツのName照合方法として前方部分一致を許可

-n

経路とRTTのみを取得する

-o

publisherに対する応答を要求する

hop_count

要求メッセージの最大ホップ数

skip_hop

contraceを実行したノードより「skip_hop」ホップ以下に位置する

ノードは、 「name_prefix」とマッチングするコンテンツをキャッシュしていて

も応答しない

wait_time

最大応答待ち時間(sec)

参照

関連したドキュメント

Secondly, once we have established the solvability of SPDEs within the stochastic parabolic weighted Sobolev spaces H γ,q p,θ (O, T ) , we have to exploit the L q (L p ) –regularity

3 pts. *For control of most weeds. **For control of expected heavy infestations of crabgrass and fall panicum. 1 When using Princep Caliber 90, use equivalent active ingredient

Do not apply more than a total of 15.0 quarts per acre per year (15.0 lb ai/A/Yr), including any application at the dormant or delayed dormant timing. •

(2)コネクタ嵌合後の   ケーブルに対する  

方法は、L-Na 液体培地(バクトトリプトン 10g/L、酵母エキス 5g/L、NaCl 24 g/L)200mL を坂口フラスコに入れ、そこに体質顔料 H を入れ、オートクレーブ滅菌を行

Radiation concentrations measured at the multi-nuclide removal equipment (ALPS) outlet. (as of June

 県民のリサイクルに対する意識の高揚や活動の定着化を図ることを目的に、「環境を守り、資源を

Title of Change: Wafer fab transfer to ON Semiconductor Gresham, Oregon USA from ON Semiconductor Fab2, Oudenaarde, Belgium related to Fab2 sale.. Proposed Changed Material