在线观看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

    文章

    10911

    瀏覽量

    213146
  • Linux
    +關注

    關注

    87

    文章

    11351

    瀏覽量

    210507
  • 數據庫
    +關注

    關注

    7

    文章

    3852

    瀏覽量

    64738

原文標題:今年是“異型屏”轉換年!華映看好手機市場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 ?377次閱讀

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

    數據庫是指優化和部署在云端的數據庫,阿里云和騰訊云都提供云數據庫,云數據庫和自己搭建的數據庫
    的頭像 發表于 11-20 16:26 ?4698次閱讀
    云<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 ?2493次閱讀
    <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 ?684次閱讀

    輕量級數據庫哪些

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

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

    SQL Server數據庫故障: SQL Server附加數據庫出現錯誤823,附加數據庫失敗。數據庫沒有備份,無法通過備份恢復數據庫
    的頭像 發表于 09-20 11:46 ?417次閱讀
    <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 ?341次閱讀
    <b class='flag-5'>數據庫</b><b class='flag-5'>數據</b>恢復—通過拼接<b class='flag-5'>數據庫</b>碎片恢復SQLserver<b class='flag-5'>數據庫</b>
    主站蜘蛛池模板: 高黄视频 | 久久久噜噜噜久久久午夜 | 国产精品一区二区三区免费视频 | 女人张开双腿让男人桶完整 | 噜噜色噜噜| 免费a级午夜绝情美女视频 免费jlzzjlzz在线播放视频 | 免费一级网站 | 亚洲二区在线观看 | 深夜视频在线观看免费 | 免费无码看av的网站 | 天天干天天草 | 成人三级在线播放线观看 | 亚洲区| 欧美一区二区影院 | 伊人电影综合网 | 一级毛片一级毛片一级级毛片 | 四级毛片在线播放 | 欧美天堂视频 | 亚洲免费在线观看 | avtt加勒比手机版天堂网 | 婷婷五月在线视频 | 4438x成人全国最大 | 欧美午夜视频在线观看 | 国产精品手机在线 | 一级色视频 | 亚洲天堂免费看 | 亚洲伊人电影 | 国产清纯白嫩大学生正在播放 | 成人免费久久精品国产片久久影院 | 永久免费看毛片 | 欧美性野久久久久久久久 | 美女黄页免费 | 国产精品成人va在线观看入口 | 免费能看的黄色网址 | 国产精品香蕉成人网在线观看 | 日本一区二区不卡视频 | 香焦视频在线观看黄 | 精品免费福利视频 | 欧美色视频网 | 欧美三级视频在线播放 | 玖玖爱在线播放 |