透過 Informix Dynamic Server 10.0 利用 Linux 的特性(來自IBM)

tonykorn97發表於2006-12-29

裡面有需要的KAIO的資訊

Kernel Asynchronous I/O


IBM Informix Dynamic Server (IDS) 10.0 使用非同步 I/O、直接 I/O 和向量 I/O
來提高效能,並使用處理器親和來取得更大的可伸縮性和並行性,從而透明地最佳化和利用 Linux 環境。IDS 10 的效能和可靠性,加上可用於
Linux 的硬體價格,便得到一種強大而又經濟的、同時適用於中小型和大型企業的解決方案。下面就讓作者細細道來。
簡介

IBM 是 Linux 的早期支持者,如今仍然是此平臺上的技術和市場引領者。增強 Linux 環境和利用 Linux 核心已經成為 IBM Informix
Dynamic Server (IDS) Version 10.0 的重要部分。

IDS Version 10.0 包含很多能在 Linux 環境中取得好處的增強,包括:

對新 Linux 平臺的支援。
Linux 環境的透明最佳化和利用。
Linux 2.6 核心特性的利用。
非同步 I/O 和直接 I/O 的使用,提高 I/O 效能。
處理器親和(Processor affinity),以提高可伸縮性和並行性。
透過可配置頁寬來最佳化效能。
提供 Linux 系統上的更多安裝方法。
簡單網路管理協議(Simple Network Management Protocol, SNMP)支援。
透過流管道的程式間通訊。
2.6 核心上的可伸縮性。
本文包含關於 IBM Informix Dynamic Server Version 10.0 在 Linux 平臺上特有的一些新特性的資訊。很多其他 IDS Version 10.0
特性在很多平臺上同時可用,包括 Linux 平臺。要了解更多關於非 Linux 特有的特性的資訊,請參閱 IBM Informix Dynamic Server,
Version 10.0 的新特性。


新 Linux 平臺

IBM 提供了在多種不同的硬體平臺和作業系統上部署 IBM Informix Dynamic Server Version 10.0 的靈活性和選擇性。64
位計算平臺的出現為資料庫伺服器和資料庫應用程式效能的增強提供了新的可能性。32 位平臺有其固有的地址空間限制,最多隻能達到 4
GB。如果消除資料庫伺服器地址空間的 4 GB 的限制,那麼就可以建立更大的緩衝池、排序堆、包快取以及其他需要消耗大量記憶體的資源。64
位環境以及解決大於 4 GB 記憶體的能力,可以大大增強資料庫的可伸縮性和效能。對於 IDS Version 10.0,IBM 擁有在所有主流 Linux
平臺上最佳化的本地 64 位版本。

新的 IBM Informix Dynamic Server Version 10.0 所支援的 Linux 平臺有:

x86(用於基於 Intel Pentium、Xeon 和 AMD Athlon 系統的 32 位版本)
POWER?(IBM eServer?、iSeries? 和 pSeries? 系統)
zSeries?(IBM eServer zSeries? 系統)
Intel EM64T (X86-64),隨著第一個 IBM Informix Dynamic Server Version 10.0 修補包(Q2 2005)的出現而受到支援
IA64(用於基於 Intel Itanium 的系統的 64 位版本)
AMD64(用於基於 AMD Opteron 和 Athlon64 的系統的 64 位版本),隨著第一個 IBM Informix Dynamic Server Version 10.0
修補包的出現而受到支援


對 Linux 2.6 核心的支援

Linux 2.6 核心宣稱,對在企業環境和資料中心執行的 Linux 作了很多改進。Informix 研究和開發小組從事 2.6
核心的工作已經有些時日了,他們對 IDS 做了增強,以便利用這些核心中的新特性。

核心特性的可用性

在撰寫本文之際,以下企業級的發行版都帶有核心 2.6:

Red Hat Enterprise Linux AS release 4.0
SUSE LINUX Enterprise Server 9


Kernel Asynchronous I/O

Kernel Asynchronous I/O (KAIO) 允許應用程式將處理過程與 I/O 操作重疊,以提高 CPU 和裝置的利用率。對於 KAIO,程式不需要等待
I/O 請求完成;當 I/O 操作完成時,程式就可以繼續。

Kernel Asynchronous I/O 已經受到自 2.6.x 起的官方 Linux 核心的支援。IBM Informix Dynamic Server Version 10.0
支援字元裝置(也叫裸裝置)和塊裝置上的 Kernel Asynchronous I/O。Kernel Asynchronous I/O
在預設情況下是開啟的,在啟動資料庫伺服器的程式所在的環境下,可以透過將環境變數 KAIOOFF 設為 1 來將其禁用。

作業系統需求

主流 2.6 核心中包括了對本地 Kernel AIO 的支援。

重要: 不管是什麼級別的發行版或者核心,libaio.so 庫都是必需的。在本文撰寫之際,IBM Informix Dynamic Server Version 10.0
需要不低於 0.3.96-3 的 libaio。

如果安裝在計算機上的 libaio 的版本不能滿足這些最低要求,那麼應下載來自 Red Hat 或 SUSE 的最新 RPM Package Manager (RPM)。

Kernel Asynchronous I/O 配置

Kernel Asynchronous I/O (KAIO) 在預設情況下是開啟的。在啟動 Dynamic Server 程式的環境下,可以透過指定環境變數 AIOOFF=1
將其禁用。

如果啟用了 KAIO,IBM Informix Dynamic Server Version 10.0 會嘗試動態地裝載 libaio。如果不能裝載這個共享庫,那麼 KAIO
將被禁用,並且在資料庫伺服器的訊息日誌檔案中會記下一條訊息。

在使用 KAIO 時,建議在不同的虛擬處理器上執行 poll 執行緒。為此,可以在 NETTYPE 配置引數中將 NET 指定為 virtual processor
(VP)。例如,您可以指定:

NETTYPE ipcshm,...,...,NET

或者

NETTYPE soctcp,...,...,NET

在 Linux 上,整個系統中並行 KAIO 請求有個最大數量的限制。/proc/sys/fs/aio-max-nr 檔案包含了這個值。Linux
系統管理員可以增加這個值,例如使用以下命令:

# echo new_value > /proc/sys/fs/aio-max-nr

在 /proc/sys/fs/aio-nr 檔案中可以看到所有作業系統程式已分配的請求數。

預設情況下,IBM Informix Dynamic Version 10.0 分配最大請求數一半的請求,並將它們均等地指派給一定數量的 CPU
虛擬處理器。您可以使用環境變數 KAIOON 來控制分配給每個 CPU 虛擬處理器的請求數量。為此,可以在啟動資料庫伺服器之前將 KAIOON
設定成要求的值。

KAIOON 的最小值是 100。如果 Linux 快要用完 KAIO 資源,例如在動態新增了很多 CPU 虛擬處理器的時候,在 online.log
檔案中會打出警告。發生這種情況時,Linux 系統管理員應該像前面描述的那樣新增 KAIO 資源。

效能優點

如果作業系統支援 KAIO,則 CPU 虛擬處理器(VP)直接向檔案作出 I/O 請求,而無需透過作業系統緩衝區。在這種情況下,應該只配置一個
AIO VP,再加上兩個附加的 AIO VP 用於每個緩衝的檔案塊。

如果某個系統將所有可用的實體記憶體都用於應用程式(最顯著的是用於 IDS),那麼 Linux
可用於檔案系統快取的記憶體就非常少,從而導致檔案系統 I/O 變得非常慢。在這一點上,KAIO
可以帶來最大的好處,並且這種好處通常是可以明顯感覺到的。

直接 I/O

直接 I/O(Direct I/O, DIO)是另一種用於讀寫的可減少對 CPU 佔用的快取方法,它消除了從檔案快取傳輸到使用者緩衝區的副本。對用
O_DIRECT 標誌開啟的檔案的讀/寫將導致資料直接在使用者緩衝區和磁碟之間傳輸。當啟用 KAIO 並檢測到 Linux 核心版本為 2.6.x 時,直接
I/O 將被開啟。

當使用檔案系統快取策略(用於 cooked 檔案的預設策略)時,I/O
操作是以緩衝的方式執行的。雖然當快取命中率較高時,這種快取策略極為有效,但快取策略有一定的開銷,因為它需要額外地將緩衝區從磁
盤複製到檔案快取(讀的情況下),或者將緩衝區從檔案快取複製到磁碟(寫的情況下)。由於緩衝區已經被快取在 IDS
緩衝池層,因此,當檔案系統快取命中率較低,並且要執行很多 I/O 操作時,這種雙重快取是不必要的。


處理器親和

處理器親和指的是將一個或一組程式繫結到一個特定的 CPU 或一組 CPU
上。這樣做的好處是可以覆蓋系統內建排程器,迫使一個程式只在指定的 CPU 上執行。在 Symmetric Multiprocessor (SMP) 和 Non-Uniform
Memory Access (NUMA) 環境中,這樣可以提高效能,因為更可能出現的情況是,處理器快取將包含用於繫結到該處理器程式的快取資料。

NUMA 架構的設計超越了 SMP 架構的可伸縮性限制。對於 SMP,所有記憶體訪問都透過一條相同的共享記憶體匯流排。在 CPU
數量不多的情況下,這樣沒有問題,但如果有幾十個、甚至幾百個 CPU,這些 CPU
爭用對共享記憶體匯流排的訪問,那麼共享匯流排在這一點上就會出現問題。而 NUMA 限制任何記憶體匯流排上的 CPU
數量,並透過高速互連將不同節點連線起來,從而緩解了這一瓶頸。

當一個程式被排程到不同處理器上時,快取命中的機率就很小,於是會出現效能退化(由於發生了遷移,必須重新填充快取)。

在使用該特性時必須謹慎,因為不正確的使用反而會招致負面的效能影響。覆蓋核心選擇地確認對程式最佳的排程器是需要技巧的。使用處理
器親和來獲得顯著的效能提升需要進行一些實驗,因為每一次的工作負載都不一樣,核心和 I/O 排程器對於不同的工作負載會有不同的表現。

將 VPCLASS 配置引數的 aff 選項設定為在 $INFORMIXDIR/etc/$ONCONFIG 檔案中 CPU 虛擬處理器所繫結的 CPU 數量。

注:將一個 CPU 虛擬處理器繫結到一個處理器並不妨礙其他程式在那個處理器上的執行。沒有被繫結到某個 CPU
的應用程式程式或其他程式,可以無拘束地在任何可用的處理器上執行。

作業系統需求

CPU 親和是 2.6 核心的特性,已經被向下移植(back-port)到 Red Hat Enterprise Linux 3。

在 Linux 上安裝伺服器而不使用 Java

您可以直接呼叫 RPM Package Manager (RPM) 並使用基於指令碼的安裝將 Dynamic Server 安裝在 Linux 上,而不必使用 Java?。這個過程與
IBM Informix Dynamic Server Version 10.0 之前的伺服器安裝過程類似。也可以使用 InstallShield Multi-Platform (ISMP)
安裝程式,這是一個基於 Java 的安裝程式,它利用了 RPM 技術,將 IBM Informix Dynamic Server 安裝在 Linux 上。

透過直接呼叫 RPM 而將 IBM Informix Dynamic Server 安裝在 Linux 系統上:

以使用者 informix 的身份,建立 IBM Informix 產品目錄($INFORMIXDIR)。
將 $INFORMIXDIR 環境變數設定為這個目錄。
例如:

( bash or /bin/sh ) export INFORMIXDIR= /usr7/informix
或者(對於 csh)

setenv INFORMIXDIR /usr7/informix
插入 CD,並安裝包含 IBM Informix CD 的驅動器。這個安裝點(mount point)被稱為 $MEDIADIR。
閱讀位於 $MEDIADIR/doc/license 中的許可,然後將 $ACCEPTLICENSE 環境變數設定為 yes。
例如:

( bash or /bin/sh ) export ACCEPTLICENSE=yes
或者(對於 csh)

setenv ACCEPTLICENSE yes
將 install_rpm 和所有 *.rpm 檔案從 CD 複製到 $INFORMIXDIR。
以 root 身份,在 $INFORMIXDIR 目錄執行 install_rpm,如下所示:
cd $INFORMIXDIR

install_rpm

要了解更多資訊,請參閱 IBM Informix Dynamic Server Installation Guide for UNIX and Linux。

SNMP 支援

IBM Informix Dynamic Server Version 10.0 支援 Linux 上的 Simple Network Management Protocol (SNMP) 代理。SNMP 代理是基於 PEER
Network 的 SubAgent Development Kit 的。

該發行版包括以下安裝在 $INFORMIXDIR 目錄下的檔案:

bin/onsnmp ——這是 OnSNMP 從代理,被打包為獨立的程式。
bin/onsrvapd ——這是守護程式,它為發現的每個伺服器產生一個從代理。
snmp/peer/snmpdp ——這是 PEER Network 主代理。
snmp/peer/CONFIG ——這是 PEER Network 配置檔案。
snmp/*V1.mib —— MIB 檔案定義隨 OnSNMP 提供的裝置(instrumentation)。檔名中包含“V1”的檔案遵從 SNMP version
1,並享有最廣泛的認同。檔名中包含“V2”的檔案遵從 SNMP version 2;副檔名為“my”的檔案是過渡性檔案,將被用於做最後的處理。
snmp/*V2.mib
snmp/*.my
此平臺沒有提供在 OnSNMP 手冊中提到的 runsnmp.ksh 指令碼。該指令碼不在 $INFORMIXDIR 目錄中。

OnSNMP
由一個主機來支援,這個主機執行一個且只有一個伺服器。如果在同一個主機上有多個伺服器在執行,那麼用在隨後伺服器上的從代理就不能
啟動。


如何在 Linux 上啟動 IDS SNMP 服務

$INFORMIXDIR/snmp/peer/snmpdp $INFORMIXDIR/snmp/peer/CONFIG NOV
$INFORMIXDIR/bin/onsrvapd -l /tmp/onsrv -g 64

要了解更多資訊,請參閱 IBM Informix SNMP Subagent Guide。


使用流管道的程式間通訊

從用於 Version 10.0 的第一個 fixpack 開始,IBM Informix Dynamic Server 支援 Linux 上使用流管道的程式間通訊(Interprocess
communication, IPC)。程式間通訊是使用 UNIX? 域套接字實現的。

為了啟用此協議,$INFORMIXDIR/etc/$ONCONFIG 檔案中的 NETTYPE 配置引數和 $INFORIMXDIR/etc/sqlhosts 檔案條目中的 nettype
欄位必須包含 "onipcstr"。

本地 32 位應用程式和工具可以使用 IPC 流管道協議連線到 64 位伺服器。

要了解更多資訊,請參閱 IBM Informix Administrator's Reference。


Linux kernel 2.6 上 IDS 的可伸縮性

我們常常聽到,“Linux 不具有伸縮性”,這句話其實是不對的。它只是考慮了在 Linux kernel 2.2 中觀察到的效能。事實證明,Linux
kernel 2.4 提供了非常好的伸縮行為。而對於 kernel 2.6,CPU 和程式的伸縮性可以提高得更多。

我們在 SLES8 (z900t) 和 SLES9 (z990) 上用一個 Informix 64
位資料庫做了一次伸縮性測試。目的不是執行一個典型的、具有大量記憶體和儲存伺服器需求的資料庫基準,而是測試 CPU
和程式的可伸縮性。對於一個工作負載,使用測試模擬一個完整的環境,在此環境中,終端操作員對資料庫執行事務。基準集中在訂單輸入環
境的主要活動(事務)上。

SLES8 測試中的伸縮顯示了伸縮比例為 3.7(4 CPU)、6.9(8 CPU)、9.5(12 CPU)和 11.5(16 CPU)。z990 上的 SLES9
也顯示了類似的伸縮性。當測試中使用了不止一個 CPU 時,吞吐率比在 SLES8 和 z900t 情況下要高出 50%。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/312079/viewspace-245577/,如需轉載,請註明出處,否則將追究法律責任。

相關文章