1. 程式人生 > >系統技術非業餘研究 » Flashcache使用的誤區以及解決方案

系統技術非業餘研究 » Flashcache使用的誤區以及解決方案

但是flashcache在使用中很多人會有個誤區,導致效能很低。首先我們看下flashcache的設計背景和適用場景:

Introduction :
============
Flashcache is a write back block cache Linux kernel module. This
document describes the design, futures ideas, configuration, tuning of
the flashcache and concludes with a note covering the testability
hooks within flashcache and the testing that we did. Flashcache was
built primarily as a block cache for InnoDB but is general purpose and
can be used by other applications as well.

它是為資料庫這樣的應用的離散讀寫優化。如果你用在了順序讀寫,就有非常大的效能問題。
那麼為什麼呢?我來分析下:

flashcache把內部的cache空間分成很多set, 是以set而不是整體為單位提供cache以及flush後備操作. 也就是說當一個set裡面的dirty page達到一個預設的值的時候,就需要把這麼dirty page 淘汰並且flush到後備裝置去,以便騰出空間給更熱的資料使用。
那麼每個set多大呢?

To compute the target set for a given dbn
target set = (dbn / block size / set size) mod (number of sets)
Once we have the target set, linear probe within the set finds the
block. Note that a sequential range of disk blocks will all map onto a
given set.

set預設是 512*4k = 2M大小,也就是說如果你的這個set剛好是一個檔案所在的塊,而且每次這個檔案都不停的順序寫,很快這個set都變成dirty, 那麼flashcache就選擇馬上刷,這樣加速效果就沒有了。

幸好作者Mohan認識到了這個問題,提供瞭解決方案:

見https://github.com/facebook/flashcache/blob/master/doc/flashcache-sa-guide.txt 中的章節Tuning Sequential IO Skipping for better flashcache performance

引入了配置引數來解決這個問題:

dev.flashcache..skip_seq_thresh_kb:
Skip (don’t cache) sequential IO larger than this number (in kb).
0 (default) means cache all IO, both sequential and random.
Sequential IO can only be determined ‘after the fact’, so
this much of each sequential I/O will be cached before we skip
the rest. Does not affect searching for IO in an existing cache.

這樣你可以把太大的順序操作給過濾掉了,大大提升效能。

祝玩得開心!

Post Footer automatically generated by wp-posturl plugin for wordpress.

相關推薦

系統技術業餘研究 » Flashcache使用的誤區以及解決方案

但是flashcache在使用中很多人會有個誤區,導致效能很低。首先我們看下flashcache的設計背景和適用場景: Introduction : ============ Flashcache is a write back block cache Linux kernel module.

系統技術業餘研究 » Flashcache新新增驅逐空閒髒頁引數

我在之前的博文提過Flashcache的cache是以set為單位管理的,每個set預設2M。 當單個set裡面的髒頁數量超過dirty_thresh_pct的時候,就會啟動背景工作佇列來把超過設定的髒頁回寫到後備磁碟去。 這裡有別的同學對flashcache設計文件的翻譯. 參看dirty_th

系統技術業餘研究 » Flashcache新版重大變化

facebook釋出的flashcache見 https://github.com/facebook/flashcache, 也可以參考我之前寫的 ppt 如何使用,或者參考我們的dba寫的詳細使用和配置,見 這裡, 這裡, 這裡 7月20號,作者Mohan做了重大的改變,極大的提高了易用性。

系統技術業餘研究 » Linux檔案預讀分析以及評估對系統的影響

Linux系統很重要的一個性能提升點就是它的Pagecache, 因為記憶體比IO快太多了,所以大家都想進辦法來利用這個cache。 檔案系統也不例外,為了達到高效能,檔案讀取通常採用預讀來預測使用者的行為,把使用者可能需要的資料預先讀取到cache去,達到高效能的目的。 Linux各個發行版re

系統技術業餘研究 » Erlang程式碼反編譯以及檢視彙編碼

Erlang的程式碼是先翻譯成abstract_code,再到目的碼的,如果有符號資訊很容易恢復原始碼,通常我們部署系統的時候需要把符號資訊去掉,reltool就可以幹這個事情! 我們演示下: $ cat server.erl -module(server). -compile(export

系統技術業餘研究 » 看圖學TCP API以及狀態變遷

client的connect呼叫和server端之間的三根線應該對應著三次握手過程,這裡有一點問題。 client傳送的sync到達應該在server端accpet之前,所以橙色線應該指向accpet前面。 同樣,server端響應ack,sync是在accpet呼叫前的,因此粉色線也應該放在a

系統技術業餘研究 » 例證NIF使用的誤區

NIF是什麼? A NIF library contains native implementation of some functions of an Erlang module. 不清楚的同學請參考http://www.erlang.org/doc/man/erl_nif.html. 這個功

系統技術業餘研究 » Fio壓測工具和io佇列深度理解和誤區

Fio 是個強大的IO壓力測試工具,我之前寫過不少fio的使用和實踐,參見 這裡。 隨著塊裝置的發展,特別是SSD盤的出現,裝置的並行度越來越高。利用好這些裝置,有個訣竅就是提高裝置的iodepth, 一把餵給裝置更多的IO請求,讓電梯演算法和裝置有機會來安排合併以及內部並行處理,提高總體效率。

系統技術業餘研究 » Linux下非同步IO(libaio)的使用以及效能

Linux下非同步IO是比較新的核心裡面才有的,非同步io的好處可以參考這裡. 但是文章中aio_*系列的呼叫是glibc提供的,是glibc用執行緒+阻塞呼叫來模擬的,效能很差,千萬千萬不要用。 我們今天要說的是真正的原生的非同步IO介面. 由於這幾個系統呼叫glibc沒有提供相應的封裝,所以l

系統技術業餘研究 » Linux TASK_IO_ACCOUNTING功能以及如何使用

在過去我們瞭解系統IO的情況大多數是通過iostat來獲取的,這個粒度只能精確到每個裝置。通常我們會想了解每個程序,執行緒層面發起了多少IO,在Linux 2.6.20之前除了用systemtap這樣的工具來實現是沒有其他方法的,因為系統沒有暴露這方面的統計。 disktop per裝置per應用

系統技術業餘研究 » Erlang節點互聯失敗原因分析以及解決方案

今天和項仲在部署新系統的時候發現節點間ping不成功的情況,類似 1> net_adm:ping(‘[email protected]’). pang 由於這個問題比較普遍,我就記錄下一步步的排除步驟. 首先從原理上分析下!由於erlang節點間通訊是透過tcp來進行的,所以我們

系統技術業餘研究 » Erlang epmd的角色以及使用

很多同學誤會了epmd的作用,認為epmd就是erlang叢集的協議,我來澄清下: Epmd是Erlang Port Mapper Daemon的縮寫,在Erlang叢集中的作用相當於dns的作用,提供節點名稱到埠的查詢服務,epmd繫結在總所周知的4369埠上。 epmd文件:這裡 epmd協議

系統技術業餘研究 » 未公開的gen_tcp:unrecv以及接收緩衝區行為分析

gen_tcp:unrecv是個未公開的函式,作用是往tcp的接收緩衝區裡面填入指定的資料。別看這小小的函式,用起來很舒服的。 我們先看下它的程式碼實現,Erlang程式碼部分: %%gen_tcp.erl:L299 unrecv(S, Data) when is_port(S) ->

系統技術業餘研究 » gen_tcp傳送緩衝區以及水位線問題分析

前段時間有同學在線上問了個問題: 伺服器端我是這樣設的:gen_tcp:listen(8000, [{active, false}, {recbuf,1}, {buffer,1}]). 客戶端是這樣設的:gen_tcp:connect(“localhost”, 8000, [{active, f

系統技術業餘研究

ItPub寫的文章“2017 年度 DB-Engines 資料庫冠軍得主:PostgreSQL 封王!”, 點選 這裡 進一步閱讀 升的最快的幾個資料庫,我簡單的無責任點評: PG資料庫是很老的資料庫,不過這幾年冉冉升起,因為是學院派的,有很好的學術和智力的支援,一直以來在資料庫的體系結構,程式碼

系統技術業餘研究 » MySQL資料庫架構的演化觀察

MySQL資料庫架構的演化觀察 December 14th, 2017 Categories: 資料庫 Tags: mysql

系統技術業餘研究 » inet_dist_connect_options

Erlang 17.5版本引入了inet_dist_{listen,connect}_options,對於結點間的互聯socket可以有更精細的控制,RPC的時候效能可以微調: raimo/inet_tcp_dist-priority-option/OTP-12476: Document ke

系統技術業餘研究 » 推薦工作機會

最後更新時間:2014/11/28 請賜簡歷至:[email protected], 感謝您對加入我們公司有興趣,我們希望能早日和您共事。 以下幾個職位1年內有效,歡迎內部轉崗:
 資深資料工程師 公司:阿里(核心系統資料庫組) 工作地點:杭州(西溪園區) 崗位描述: 分析雲服務產生的海

系統技術業餘研究 » 新的工作和研究方向

和大家更新下: 做了將近8年資料庫後,我的工作和研究方向將會延伸到虛擬化和計算相關的雲服務,希望能夠和大家一起進步,Happy New Year! 預祝大家玩得開心! Post Footer automatically generated by wp-posturl plugin for w

系統技術業餘研究 » 叢集引入inet_dist_{listen,connect}_options更精細引數微調

Erlang 17.5版本引入了inet_dist_{listen,connect}_options,對於結點間的互聯socket可以有更精細的控制,RPC的時候效能可以微調: raimo/inet_tcp_dist-priority-option/OTP-12476: Document ke