Sunday, October 30, 2016

mmapを使ってファイルベースの巨大なバッファを確保する話

小さなバッファはインメモリでもつが、メモリに収まらないような大きなバッファはテンポラリファイルを作り、file I/Oでアクセスする、というのが昔からの汎用的なバッファ実装のアプローチ。

だが、バッファに格納するデータ量によってアクセス手段を変えるというのはめんどくさいし、そこを抽象化すると無駄なオーバーヘッドが発生する。

幸いなことに最近は、メモリ空間が広い 64bit CPU だけ考えればいい。なので、ファイルの「読み込み」については、めんどくさいから全部mmapするというのが一般的なアプローチになってきている(例: LLVMのリンカであるlld)。

同様のことが、テンポラリファイルを使う可変長のバッファについても可能であり、h2o では実際に実装している。詳しくは h2o_buffer_reserve 関数の実装を見てもらえばいいと思いますが、ざっくりとした手順は以下のとおり:

▪️バッファ作成もしくはリサイズ処理:
  1. テンポラリファイルを作り、すぐ消す(作成の場合のみ。mkstemp, unlink してから file descriptor を使い続ける)
  2. サイズを設定する(posix_fallocate もしくは ftruncate)
  3. 旧来のマップされた領域を munmap する(リサイズの場合のみ)
  4. 全体を mmap する
▪️解放処理:
  1. munmap して close する

Windowsなら、ファイルを消すのを解放時にする必要があるかも。

21 comments:

  1. Windows は FILE_DELETE_ON_CLOSE フラグを設定しておくのかな。クローズすると自動削除。

    ReplyDelete
  2. Windowsの_openなら_O_SHORT_LIVEDや_O_TEMPORARYが、Linux 3.11以降のopen(2)ならO_TMPFILEがありますね
    https://msdn.microsoft.com/library/z0kc8e3z.aspx

    ReplyDelete
  3. I understand what you bring it very meaningful and useful, thanks.

    five nights at freddy's 5  |run 3 |

    ReplyDelete
  4. Thank you for such a sweet tutorial - all this time later, I've found it and love the end result. I appreciate the time you spent sharing your skills.

    cat mario | whatsapp baixar |  tank trouble |

    ReplyDelete
  5. The blog or and best that is extremely useful to keep I can share the ideas of the future as this is really what I was looking for, I am very comfortable and pleased to come here. Thank you very much.
    animal jam | five nights at freddy's | hotmail login

    ReplyDelete
  6. Objek wisata gunung bromo menjadi primadonya jawa timur karena wisata ini memang sangat fenomenal di kalangan para wisatawan. Banyak para pengunjung yang datang dari luar negeri untuk menikmati keindahan alam di wisata gunung bromo. Hamparan pasir yang luas dan dinginnya hawa pagi di wisata gunung bromo menambah keseruan saat berlibur ke wisata gunung bromo jawa timur tersebut.
    Pelayanan jasa sewa mobil malang murah sangat diburu oleh para wisatawan yang sedang berlibur di kota malang batu. Jasa sewa mobil murah malang ini bisa menjadi ladang bisnis yang menggiurkan, karena mengingat banyak para wisatawan yang datang dari luar membutuhkan transportasi sewa mobil malang murah. Beragam pilihan paket sewa mobil malang murah dan juga bermacam-macam tipe mobil yang disediakan oleh sewa mobil malang batu murah. Informasi pemesanan dan booking online sewa mobil malang murah baca halaman lengkap.
    Racikan ampuh jamu kuat dan tahan lama yang dapat dengan mudah mengatasi masalah ejakulasi dini adalah dengan memakai ramuan herbal madura. Obat kuat yang berasal dari madura sangat populer di kalangan pria yang menginginkan hubungan seksual tahan lama agar bisa menikmati kenikmatan saat berhubungan intim tersebut. Jamu tahan lama seksual ini diolah menggunakan bahan-bahan tradisional dan sudah terdaftar resmi di badan kesehatan republik indonesia. Jadi anda tidak perlu khawatir saat mengkonsumsi jamu kuat alami dari madura ini, tidak ada dampak negatif sedikitpun bagi kesehatan tubuh. artikel terkait . Harga jual jamu kuat dan tahan lama produksi ramuan madura asli obat kuat tahan lama.

    ReplyDelete

  7. The share your really gives us excitement. Thanks for your sharing. If you feel tired at work or study try to participate in our games to bring the most exciting feeling. Thank you!
    hotmail sign in | red ball | 192.168.1.1

    ReplyDelete
  8. Thank you! I hope you have many useful articles to share with everyone!
    slither io

    ReplyDelete
  9. Interesting article! Thank you for sharing them! I hope you will continue to have similar posts to share with everyone! I believe a lot of people will be surprised to read this article!
    abcya

    ReplyDelete
  10. Thanks for your post! Through your pen I found the problem up interesting! I believe there are many other people who are interested in them just like me! Thank you for sharing them with everyone!
    fb login

    ReplyDelete
  11. Thanks for your post! I believe there are many who feel the same satisfaction as I read this article! I hope you will continue to have such articles to share with everyone!
    happy wheels

    ReplyDelete
  12. Thanks for your post! Through your pen I found the problem up interesting! I believe there are many other people who are interested in them just like me! Thank you for sharing them with everyone!
    bloons tower defense 5

    ReplyDelete
  13. Thank you for sharing the post. It's nice to know.
    instagram online

    ReplyDelete
  14. Harga rak sepatu gantung yang dijual secara online yaitu Rp.75.000 per pcs. Namun berbeda dengan produsen RakGantung.com yang menjual produk organizer rak sepatu gantu g dengan harga 65.000 rupiah saja. Lebih murah bukan? Dan jika anda membeli dengan pembelian minimal 3 pcs (reseller) maka akan mendapatkan diskon khusus. Apalagi pembelian rak sepatu gantung dengan jumlah minimal 1 lusin dan minimal 100 pcs. Anda akan mendapatkan super diskon. Sampai saat ini masih dicari reseller, agen dan distributor yang siap bekerja sama memasarkan produk organizer ini. Silahkan anda bandingkan sendiri harga rak sepatu gantung resleting di tempat kami dengan produsen lainnya. Kualitas bahan yang digunakan untuk membuat rak sepatu gantung karakter ini merupakan yang terbaik. Pesan rak sepatu gantung kepada kami sekarang juga.

    ReplyDelete
  15. Sifatnya sulit untuk dibengkokkan, dilas, dipotong. Penggunaan:Pabrik Plat Kapal Bki Krakatau Steel
    Toko Besi Siku Baja
    Supplier besi siku baja
    Pabrik besi beton bjku
    Toko pipa besi
    Toko pipa besi0,30 % – 0,40 % C : connecting rods, crank pins, axles.

    ReplyDelete
  16. Harga rak sepatu gantung karakter di tokopedia atau di website lainnya hanya 65.000 rupiah saja. Produk rak sepatu gantung karakter ini merupakan tempat sepatu paling favorit pembeli, terutama rak sepatu gantung karakter hello kitty dan doraemon. Hampir setiap hari selalu ada konsumen yang pesan rak sepatu gantung karakter kartun hello kitty tersebut. Perpaduan warna pink pada rak sepatu gantung hello kitty tersebut memang membikin pembeli tertarik. Rak sepatu gantung karakter hello kitty lihat produk disini.

    ReplyDelete