在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

數據庫為什么有可能喜歡Linux AIO(異步I/O)?

BN7C_zengshouji ? 來源:未知 ? 作者:李倩 ? 2018-09-11 10:42 ? 次閱讀

回憶一下

我們都知道Linux的IO模型有阻塞、非阻塞、SIGIO、多路復用(select,epoll)、AIO(異步I/O)等。

數據庫可能比較傾向于使用AIO。從時序上面來講,AIO是用戶應用發起IO請求io_submit()后,它就不需要去等待,讓后臺給它搞定讀寫。之后本線程或者其他線程就可以通過io_getevents()去同步I/O的結果。

這樣的AIO有一個極大的好處在于,IO不會阻塞住CPU的行為,有利于充分利用硬件的資源,有利于讓CPU、IO都parallel起來 。當然,同樣的動作,似乎用epoll()、SIGIO也可以呈現出來。尤其是epoll(),幾乎是C10K問題解決方案在Linux的代名詞。epoll_wait()先等待IO請求的read、write可以發生,而后再根據返回的事件發起讀寫請求:

事件驅動模型libevent等,看起來是事件到來,callback被執行的Reactor模式:

但是其底層其實也是靠epoll()來實現,這個我們透過strace就可以看出。請見我的3分鐘小電影:

大不一樣

epoll()本質上其實還是先等待IO的讀寫可以發生,而后再以Linux常規read()、write() API去發起IO請求。而AIO則是不管三七二十一,直接發IO請求,但是并不等待這個請求的結束,讓Linux后臺自己去完成讀寫。我們來看一個典型的AIO編程案例:

它是通過io_submit()把IO請求發出去之后,它并不需要等IO的結束。后面用io_getevents()去同步。上面的代碼中,io_getevents()的代碼與io_submit()的代碼擺在一起,但是其實它們并不需要一定是同一個線程。

AIO和傳統epoll()的本質區別是,epoll()等方式,它只是一個事件獲取機制,獲取事件后,之后的read(), write()還是要走Linux的傳統路線,經過Linux內核本身的各個層次(如page cache,IO調度等)。而AIO是骨子里面,自己就是一個IO的方式,最終沒有經過傳統的Linux read(),write()這種"all is file"的類VFS接口。Linux native的AIO本身call的函數,本身就是系統調用。strace執行AIO動作的進程得到的直接就是類似如下的結果:

strace ./aio....

...

io_setup(128, {3077799936}) = 0

io_submit(3077799936, 1, 0xbfa5e730) = 1

io_getevents(-1217167360, 1, 1, {...}NULL) = 1

ARM Linux的系統調用表里也可以看出:

故而,AIO可以更多地把機會交給用戶空間,讓用戶空間根據自身的IO特點來為自己量身定制IO的行為。AIO一般也直接結合DIO(direct IO)來使用,進一步繞開內核本身的IO調度和cache機制。

我中意你

那么AIO有什么可能的優勢被數據庫所青睞呢?

1. 透過AIO,可以屏蔽掉Linux內核底層的page cache。而制定application-level的cache機制。

我們都知道,Linux會針對每個文件對應的inode,創立一個address_space,并以Radix樹來組織它的page cache命中情況,page的替換算法,整體是LRU,預測頁面本身的活躍度。這個策略,固然非常符合局部性原理(Locality),但是不能針對用戶程序本身的特征,進行用戶級的cache。

2.透過AIO(尤其是結合DIO),可以一定程度上,進行用戶級別的IO scheduling。采用AIO,用戶可以控制發送給內核的IO請求,從而控制誰比誰更重要。內核固然有它的IO調度算法,但是它是比較general的。

3. 透過AIO,可以進行用戶級別的read-ahead和write-behind控制。

我們都知道,Linux內核本身會根據用戶的讀請求,去預測后續的讀,從而在后續的讀還沒有發起的情況下,就提前預讀。詳見:《宋寶華: 文件讀寫(BIO)波瀾壯闊的一生》,但是這種預讀的page,并不一定是上層應用想要的page。而內核的write-behind機制,也可能導致內核累積到很多dirty數據后,出現寫磁盤的突發性洪泛。現在AIO機制,我們把這些都交給用戶。

4. 透過AIO,不阻塞地在前臺線程,直接dispatch IO請求,帶來很好的

scalability。在InnoDB里面,可以透過innodb_use_native_aio來配置使用同步的IO還是AIO,而且它有一番對比,值得細細地品讀。同步IO的時候,query threads是將IO請求放入queue,由InnoDB后臺線程的每個線程處理一個IO請求。而AIO的時候,query threads直接發IO請求。

With synchronous I/O, query threads queue I/O requests, andInnoDBbackground threads retrieve the queued requests one at a time, issuing a synchronous I/O call for each. When an I/O request is completed and the I/O call returns, the InnoDBbackground thread that is handling the request calls an I/O completion routine and returns to process the next request. The number of requests that can be processed in parallel isn, wherenis the number ofInnoDBbackground threads. The number ofInnoDBbackground threads is controlled byinnodb_read_io_threadsand innodb_write_io_threads.

With native AIO, query threads dispatch I/O requests directly to the operating system, thereby removing the limit imposed by the number of background threads.InnoDBbackground threads wait for I/O events to signal completed requests. When a request is completed, a background thread calls an I/O completion routine and resumes waiting for I/O events.

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • cpu
    cpu
    +關注

    關注

    68

    文章

    11049

    瀏覽量

    216158
  • Linux
    +關注

    關注

    87

    文章

    11469

    瀏覽量

    212921
  • 數據庫
    +關注

    關注

    7

    文章

    3904

    瀏覽量

    65828

原文標題:今年是“異型屏”轉換年!華映看好手機市場Q4復蘇

文章出處:【微信號:zengshouji,微信公眾號:MCA手機聯盟】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦
    熱點推薦

    Linux設備驅動中的異步通知與異步I/O

    (struct fasync_struct **fa, int sig, int band);Linux 2.6 異步I/OAIO概念與GNU C庫函數AIO基本思想是允許進程發起很多
    發表于 02-21 10:52

    Android如何使用Db4o數據庫

    db4o是一個被廣泛歡迎的面向對象數據庫,起初它基于Java平臺,而后發布了.Net平臺的版本,db4o具有雙授權(GPLv2和商業授 權),所以在很多開源項目中都可以看到db4o的身
    發表于 05-24 07:32

    Linux上安裝Oracle 11g數據庫

    Linux上安裝Oracle 11g數據庫
    發表于 09-07 09:14 ?3次下載
    <b class='flag-5'>Linux</b>上安裝Oracle 11g<b class='flag-5'>數據庫</b>

    Java I/O 的相關方法分析

    (select and poll),signal driven I/O (SIGIO),asynchronous I/O (the POSIX a
    發表于 09-27 13:18 ?0次下載
    Java <b class='flag-5'>I</b>/<b class='flag-5'>O</b> 的相關方法分析

    Linux教程之linux下如何備份還原mysql數據庫

    本文介紹了linux下如何備份與恢復mysql數據庫。數據庫備份是非常重要的。如果定期做好備份,這樣就可以在發生系統崩潰時恢復數據到最后一次正常的狀態,把損失減小到最少。
    發表于 10-19 17:18 ?4次下載

    數據庫學習教程之數據庫的發展狀況如何數據庫什么新發展

    本文檔的主要內容詳細介紹的是數據庫學習教程之數據庫的發展狀況如何數據庫什么新發展主要內容包括了:1 數據庫技術發展概述2
    發表于 10-25 16:29 ?5次下載
    <b class='flag-5'>數據庫</b>學習教程之<b class='flag-5'>數據庫</b>的發展狀況如何<b class='flag-5'>數據庫</b><b class='flag-5'>有</b>什么新發展

    數據庫哪些常見的應用結構數據庫應用結構的使用資料概述

    本文檔的主要內容詳細介紹的是數據庫哪些常見的應用結構數據庫應用結構的使用資料概述 數據庫常見的應用結構:1.集中式結構2.文件服務器結構
    發表于 10-31 16:57 ?11次下載
    <b class='flag-5'>數據庫</b><b class='flag-5'>有</b>哪些常見的應用結構<b class='flag-5'>數據庫</b>應用結構的使用資料概述

    嵌入式Linux 異步IO機制

    : 用戶進程可以對I/O事件進行阻塞,但是I/O操作并不阻塞。通過select/poll/epoll等函數調用來達到此目的。4. 異步時間非
    發表于 04-02 14:31 ?442次閱讀

    數據庫和自建數據庫的區別及應用

    數據庫是指優化和部署在云端的數據庫,阿里云和騰訊云都提供云數據庫,云數據庫和自己搭建的數據庫
    的頭像 發表于 11-20 16:26 ?4884次閱讀
    云<b class='flag-5'>數據庫</b>和自建<b class='flag-5'>數據庫</b>的區別及應用

    Linux中如何使用信號驅動式I/O?

    一、Linux 的 5 種 IO 模型 二、如何使用信號驅動式 I/O? 三、內核何時會發送 “IO 就緒” 信號? 四、最簡單的示例 五、擴展知識 一、Linux 的 5 種 IO
    的頭像 發表于 03-12 14:47 ?2641次閱讀
    <b class='flag-5'>Linux</b>中如何使用信號驅動式<b class='flag-5'>I</b>/<b class='flag-5'>O</b>?

    數據庫知識

    數據時代的數據庫 --數據采集、數據清洗和分析、數據可視化:提供決策依據 openGauss是一款高性能、高安全、高可靠的企業級開源關
    發表于 06-09 16:10 ?0次下載

    連接到您最喜歡數據庫

    DbVisualizer連接到所有流行的數據庫,并支持特定于數據庫的對象類型等。
    的頭像 發表于 08-11 16:45 ?860次閱讀

    輕量級數據庫哪些

    輕量級數據庫哪些 隨著互聯網和物聯網等新一代信息技術的廣泛應用,數據庫系統也變得越來越重要。人們對于數據庫數據庫的可靠性、安全性和性能等要
    的頭像 發表于 08-28 16:41 ?6473次閱讀

    數據庫數據恢復—SQL Server數據庫出現823錯誤的數據恢復案例

    SQL Server數據庫故障: SQL Server附加數據庫出現錯誤823,附加數據庫失敗。數據庫沒有備份,無法通過備份恢復數據庫
    的頭像 發表于 09-20 11:46 ?642次閱讀
    <b class='flag-5'>數據庫</b><b class='flag-5'>數據</b>恢復—SQL Server<b class='flag-5'>數據庫</b>出現823錯誤的<b class='flag-5'>數據</b>恢復案例

    數據庫數據恢復—通過拼接數據庫碎片恢復SQLserver數據庫

    一個運行在存儲上的SQLServer數據庫1000多個文件,大小幾十TB。數據庫每10天生成一個NDF文件,每個NDF幾百GB大小。數據庫包含兩個LDF文件。 存儲損壞,
    的頭像 發表于 10-31 13:21 ?623次閱讀
    <b class='flag-5'>數據庫</b><b class='flag-5'>數據</b>恢復—通過拼接<b class='flag-5'>數據庫</b>碎片恢復SQLserver<b class='flag-5'>數據庫</b>
    主站蜘蛛池模板: 日日操日日射 | 一区二区免费看 | 婷婷激情综合网 | 国产成人亚洲影视在线 | 激情文学综合丁香 | 最近最新中文字幕6页 | 第四色播日韩第一页 | 人人插人人艹 | 俺也去第四色 | 夜夜做日日做夜夜爽 | 日本一本一道久久香蕉免费 | 欧美三级免费看 | 日韩视频 中文字幕 视频一区 | 夜间视频在线观看 | 国产精品久久久久久免费播放 | 日日躁夜夜躁狠狠天天 | 天天爽夜夜 | 成人网在线 | 色婷婷久久久swag精品 | 欲色啪| 欧美激情 自拍 | 午夜视频播放 | 国产福利在线观看你懂的 | 九色亚洲 | 欧美a视频| 国产在线麻豆自在拍91精品 | 婷婷爱五月| 久久香蕉国产线看观看亚洲片 | 免费高清视频在线观看 | 6080国产午夜精品 | 国产在线色视频 | 伊人啪啪网 | 天堂视频在线免费观看 | 欧美一区二区三区在线观看 | 午夜在线网站 | 亚洲 午夜在线一区 | 久久香蕉国产线看观看精品yw | 天天综合色网 | 日本免费观看网站 | 三级www| 午夜三级毛片 |