操作
機能 #4176
完了omniidl shortcutの利用
開始日:
2017/09/04
期日:
進捗率:
100%
予定工数:
説明
IDLコンパイラ実行時に-Wbshortcutオプションを追加することで関数を直接呼び出せるようにする。
サンプルを見たところLOCAL_CALLS_SHORTCUTのポリシーを設定したPOAを使用する必要があるようなので、新たに子POAを生成する。
ファイル
操作
n-miyamoto さんが7年以上前に追加. 6年以上前に更新.
100%
説明
IDLコンパイラ実行時に-Wbshortcutオプションを追加することで関数を直接呼び出せるようにする。
サンプルを見たところLOCAL_CALLS_SHORTCUTのポリシーを設定したPOAを使用する必要があるようなので、新たに子POAを生成する。
ファイル
vx_test.png (14 KB) vx_test.png | n-miyamoto, 2017/09/04 17:53 | ||
result_direct_vx.txt (722 KB) result_direct_vx.txt | n-miyamoto, 2017/09/04 17:54 | ||
result_shortcut_vx.txt (792 KB) result_shortcut_vx.txt | n-miyamoto, 2017/09/04 17:54 | ||
result_cdr_vx.txt (666 KB) result_cdr_vx.txt | n-miyamoto, 2017/09/04 17:54 | ||
result_cdr_ubuntu.txt (806 KB) result_cdr_ubuntu.txt | n-miyamoto, 2017/09/04 17:55 | ||
result_direct_ubuntu.txt (779 KB) result_direct_ubuntu.txt | n-miyamoto, 2017/09/04 17:55 | ||
result_shortcut_ubuntu.txt (779 KB) result_shortcut_ubuntu.txt | n-miyamoto, 2017/09/04 17:55 |
ShortCutポリシーを設定したPOA取得用にManagerにtheShortCutPOA関数、getShortCutPOA関数を追加しました。
また、ManagerのinitORB関数内にPOAの生成を追加しました
#ifdef ORB_IS_OMNIORB CORBA::PolicyList pl; pl.length(1); #ifdef RTM_OMNIORB_42 pl[0] = omniPolicy::create_local_shortcut_policy(omniPolicy::LOCAL_CALLS_SHORTCUT); #else CORBA::Any v; v <<= omniPolicy::LOCAL_CALLS_SHORTCUT; pl[0] = m_pORB->create_policy(omniPolicy::LOCAL_SHORTCUT_POLICY_TYPE, v); #endif m_pShortCutPOA = m_pPOA->create_POA("shortcut", m_pPOAManager, pl); #endif
InPortCorbaCdrProvider、OutPortCorbaCdrProviderをshortcut用POAでアクティブ化するようにコードを追加した。
#ifdef ORB_IS_OMNIORB ::RTC::Manager::instance().theShortCutPOA()->activate_object(this); #endif
CMakeLists.txt内でomniid実行時に-Wbshortcutオプションを追加するように変更しました。
SET(IDLCOMMAND_FLAGS -bcxx -Wba -nf -Wbshortcut)
通信方式 | 平均[ms] |
corba_cdr(POA経由) | 0.102864 |
corba_cdr(shortcut) | 0.0822503 |
direct | 0.0818192 |
見ての通り0.02[ms]程度しか差がないため、データポートが100個通信するとかいう状況でもないと意味はなさそうです。
通信方式 | 平均[ms] |
corba_cdr(POA経由) | 0.12463 |
corba_cdr(shortcut) | 0.099306 |
direct | 0.154659 |
何故directの方がcorba_cdrよりも遅いのかは謎ですが、グラフからも転送速度はshortcut>corba_cdrなのは間違いないようです。