ceph與linux系統配置優化

性能測試時經常會發現性能數據不穩定的現象,尤其是服務器使用的是帶有cache的raid卡。比如在使用30個7.2K SATA盤搭建的ONEStor ceph集羣 (使用HP Smart Array P840raid卡,cache緩存大小4G)測試4k randwrite時,單個客戶端iops可以達到4k以上,低的時候單個客戶端iops基本在1k左右,爲此,我們就去尋找導致這種現象出現的主要原因。
 

Linux內核會將它最近訪問過的文件頁面緩存在內存中一段時間,這個文件緩存被稱爲pagecache。

inode是linux/unix操作系統中的一種數據結構,包含了各文件相關的一些重要信息。在創建文件系統時,就會同時創建大量的inode。一般inode表會佔用文件系統磁盤空間的1%。

理解inode,要從文件儲存說起:

文件儲存在硬盤上,硬盤的最小存儲單位叫做"扇區"(Sector)。每個扇區儲存512字節(相當於0.5KB)。操作系統讀取硬盤的時候,不會一個個扇區地讀取,這樣效率太低,而是一次性連續讀取多個扇區,即一次性讀取一個"塊"(block)。這種由多個扇區組成的"塊",是文件存取的最小單位。"塊"的大小,最常見的是4KB,即連續八個 sector組成一個 block。

文件數據都儲存在"塊"中,那麼很顯然,我們還必須找到一個地方儲存文件的元信息,比如文件的創建者、文件的創建日期、文件的大小等等。這種儲存文件元信息的區域就叫做inode,中文譯名爲"索引節點"。每一個文件都有對應的inode,裏面包含了與該文件有關的一些信息。,爲了加快對索引節點的索引,linux又引入了inode緩衝區。就是把從硬盤讀取到的inodes信息保存在緩存中。

我們可以用slabtop工具查看緩存中inodes的使用情況。內核的模塊在分配資源的時候,爲了提高效率和資源的利用率,都是透過slab來分配的。我們可以使用slabtop命令查看slab內存分配機制。這個應用能夠顯示緩存分配器是如何管理Linux內核中緩存的不同類型的對象。這個命令類似於top命令,區別是它的重點是實時顯示內核slab緩存信息,例如:

如果看到的xfs_inode和radix_tree_node使用的太多或者剛被清除,這時候就要特別注意inodes的影響了。

如何判斷是否有inodes的影響?在進行性能測試過程中儘量使用iostat 查看硬盤的使用情況。如果在進行隨機寫性能測試時,隨機寫性能比較低。可以使用iostat –x 1 查看硬盤信息,如果硬盤的util很高,同時又有大量的讀存在,這時候基本說明系統正在從硬盤讀取大量的inodes,硬盤資源很大部分被讀inodes給佔用了。

當然,觸發它進行讀取inodes的原因有很多:

1、使用了drop_caches的方式釋放了inodes和dentry。就是在/proc/sys/vm/drop_caches裏寫入2或者3 都會drop inodes和dentry。

2、有過其他大量的讀寫操作,比如增刪過硬盤、主機等只要有過大量數據恢復,數據恢復之後再進行性能測試就會觸發需要重新讀inodes。這時性能數據會很長時間維持在很低的狀態,因爲從緩存讀inodes的命中率很低,甚至連續寫幾個小時或更長的時候都會性能很低。

3、內存使用太多。如果slab cache佔用過多屬於正常問題,並且當內存到達系統最低空閒內存限制的話,會自動觸發kswapd進程來回收內存。

從測試的角度來看,目前性能測試數據乎高乎低基本原因就是讀取inodes造成 的。(不排除還有其他原因),要讓測試隨機寫時,儘量高的提升從緩存讀取inodes的命中率,目前有如下方法:

1、 fio測試時儘量使用小塊進行測試,目前來看如果使用100G的塊,就不太受inodes的影響,性能數據比較高

2、 儘量不使用做過異常測試的集羣進行性能測試

3、 隨機寫性能測試時使用iostat查看硬盤狀態,如果此時有大量讀,儘量讓測試時間長一點 ,多寫一會後停止fio後再重新測試。直到基本不出現讀時再記錄測試結果

4、 在/etc/sysctl.conf內核參數文件中配置

vm.vfs_cache_pressure = 50

該配置表示內核回收用於directory和inode cache內存的傾向;缺省值100表示內核將根據pagecache和swapcache,把directory和inode cache保持在一個合理的百分比;降低該值低於100,將導致內核傾向於保留directory和inode cache;增加該值超過100,將導致內核傾向於回收directory和inode cache。
 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章