タグ

xsに関するstarsky5のブックマーク (13)

  • Perlのメモリリークを見つける方法 - Islands in the byte stream (legacy)

    Perlではメモリリーク検出ツールがいくつか開発されているので、top(1)の結果を眺めるよりそういうツールを使うほうが楽である。 さて、メモリリークが発生しているとき、その可能性としてはだいたい以下の4つが挙げられる。 Perlレベルでの循環参照 グローバル変数に値をどんどん足しているとき*1 XSレベルでリファレンスカウントの管理ミス XSレベルでmalloc()したメモリの管理ミス この1-3についてはすべてPerlインタプリタ内の出来事であり、Test::LeakTraceを使って検出できる。4を検出するのは難しいが、Test::Valgrindが役に立つ。 Test::LeakTraceのSYNOPSISは歴史的経緯によりごちゃごちゃしているが、テストで使うべき関数はno_leaks_ok()とleaks_cmp_ok()だけである。 たとえば、以下のようにして使う*2。 #!p

    Perlのメモリリークを見つける方法 - Islands in the byte stream (legacy)
  • eval "use $module" in Perl_call_sv() could segmentation faults - Islands in the byte stream (legacy)

    Data::Utilのmethod modifiersが落ちる件は,Perlコアのバグであるようだ*1。perlPerl_call_sv()でサブルーチンを呼び出すときに,そのサブルーチンがディレクティブを含んだeval()を実行し,そのuseディレクティブが例外を放出すると*2,setjmp(3)がSEGVを起こしたり黙って落ちたりするようだ。 この問題はPerl_call_sv()を使っているXSコードで起きやすいが,以下のコードで示すようにPure Perlでも発現する可能性がある。 再現コード: #!perl -w use strict; use Test::More tests => 3; { package T; use Tie::Hash(); use base qw(Tie::StdHash); sub FETCH{ my($self, $key) = @_; # XXX

    eval "use $module" in Perl_call_sv() could segmentation faults - Islands in the byte stream (legacy)
  • おさかなラボ - PerlでXSを使ってみよう

    と思う人は多いと思う。気になっている人は多いだろう。しかし、XSに関する詳細なドキュメントは、ググってみると驚愕するくらい少ない。そして読みにくい。理由は後述する。 私もXSに関するドキュメントを書きたいのだが、カバーする範囲が広大すぎてどこから手を付けたらいいのか全く分からない。が書けそうな勢いだ。エントリを分けて書くのか、既存とは別のチュートリアル文書のようなものを書くのか、悩んでいるところである。その代わり、今回はXSってえる?って人には有用なエントリにしたいと思う。そして簡単なサンプルを書いてみたいと思う。 少々のことなら分かるしググるし大丈夫だぜ!という人は、以下のエントリ、およびリンク先を参照すると良いと思う。 XS by id:naoya まずはXSって何?ってことだが、この時点で何がなんだかさっぱり分からない人が多いと思う。それもそのはず、XSという言葉が包括的

  • HTTP::Parser::XS - a PSGI compatible, fast http parser - kazuhoのメモ置き場

    んー、と思って、書いた。GitHub - kazuho/p5-http-parser-xs: a fast http parser BLURB は、 PSGI のリクエストオブジェクトを返す 高速 同期 httpd, 非同期 httpd のどちらを実装する際にも使用可能 POST コンテンツのハンドリングはご自分で いったんファイルに入れたり、いろいろ要件があるし、パース作業は発生しないので Perl でもあまり遅くならないため てな感じです。以下ベンチマーク。 $ ./http-parser-vs-xs-benchmark.pl Rate HTTP::Parser HTTP::Parser::XS HTTP::Parser 2978/s -- -95% HTTP::Parser::XS 54348/s 1725% --ベンチマークに使ったコードは、以下のとおり。 #! /usr/bin/

    HTTP::Parser::XS - a PSGI compatible, fast http parser - kazuhoのメモ置き場
  • perl - Const released -- True Readonly : 404 Blog Not Found

    2008年06月27日07:30 カテゴリLightweight Languages perl - Const released -- True Readonly 空前のXSブームにほだされたのか、気がついたら作ってました。 /lang/perl/Const/trunk - CodeRepos::Share - Trac @CPAN (coming soon) 一言で言うと、Readonlyを置き換えるモジュールです。 Readonlyをお使いなら、s/Readonly/Const/gで同じように動くはずです。 Readonlyはないすでだみあんなモジュールですが、実装にtieを用いているため低速です。 ところが、SVには、すでにREADONLY flagが用意されているのです。これを使わぬ手はありません。 実は、Perl 5.8以降では、Internals::SvREADONLY()とい

    perl - Const released -- True Readonly : 404 Blog Not Found
  • セキュアな XS ローダー - id:kazuhookuのメモ置き場

    perl のプロセス内でサンドボックスを作ろうと思うと、少なくとも以下の2点が必要です。 オプコードの制限 DynaLoader::dl_install_xsub を利用したネイティブコード注入 このうち、オプコードの制限については、ops モジュールで行うことが可能です。一方、DynaLoader::dl_install_xsub 関数については、これを単純に使えなくしてしまうと、XS モジュールをロードできなくなってしまうので、一定の条件下でのみ、これが実行されるような仕組みを作ってやる必要があります。 というわけで私案。クロージャーを使って、以下のような形にするのはどうでしょう? 「strict::import とか書き換えられちゃうとダメじゃね?」ということで没ネタですorz #! /usr/bin/perl use strict; use warnings; use DynaLo

    セキュアな XS ローダー - id:kazuhookuのメモ置き場
    starsky5
    starsky5 2009/03/17
    Sandbox
  • wakaponさんの超☆Perl備忘帳: DynaLoader.pm XSLoader.pm newXS

    DynaLoader.pmとXSLoader.pmまわりのお話.動作の仕方や,両者の違いなどを見ていく.参考にしたのはperl5.10.0のソースツリー. 1. XSUBとnewXS DynaLoaderの質はXSUBなので,まずはそのあたりから見ていく.XSUBを使ったモジュール(=Pure-Perlじゃないモジュール)を作成するときには,DynaLoader.pmやXSLoader.pmを使う.例えばthreads.pmの場合,冒頭に以下のような記述がある. # Load the XS code require XSLoader; XSLoader::load('threads', $XS_VERSION); これでXSUB(単にCのサブルーチン; XSコード)をPerl処理系に組込んだことになる.この「組込む」という工程には,newXSが使われる.例えばthreads->creat

  • perldoc perlxstutを読んだときのメモ - はこべにっき ♨

    正月番組をみながら[http://perldoc.perl.org/perlxstut.html#EXAMPLE-3:title=perldoc perlxstut]を読んだ.メモをとったのでせっかくだからはっつけておくよ. ちょっとメモがはしょり気味なのと,うちの理解があやしいところがあってこころもとないですが,perlxstut読むときの参考にでもなればばば. Example1 $ h2xs -A -n Mytest で雛形がつくれる.生成されたMytest.xsにXSのコードを書く 値を返さないHello, WorldだとCODE:以下にprintfを書くだけでOK void hello() CODE: printf("Hello, world!\n"); CODE: みたいな部分はXS特有の書き方.あとで展開されてCのコードになる. $ perl Makefile.PL $ mak

    perldoc perlxstutを読んだときのメモ - はこべにっき ♨
  • Perl/XSが得意なこと - Islands in the byte stream (legacy)

    最近ひたすらXSを書いていて思ったのが,XSはやっぱり速いということ。 ただ,いつでも無条件に速いというわけでもなく,何も考えずに書くとPurePerlのコードより遅くなることも珍しくない。実際,最近書いたShikaやMOPのXS版もいきなり高速だったわけではなく,一番最初のコードはPurePerlのほうが10%-30%ほど高速だった。 いろいろベンチマークをとった結果の感触として,XSの得手・不得手が分かってきたのでメモしておく。ちなみに下記で「注意を払う」というのは内部で呼ばれるmalloc()を極力減らすという意味で使っている。SVの生成自体はmalloc()を伴わないことが多い*1が,文字列の生成/連結や配列の生成/push/unshiftでは内部でmalloc()が呼ばれる可能性が高く,速度を落とす原因となる。 得手分野 ループ - XSのループが早いというより,Perlのループ

    Perl/XSが得意なこと - Islands in the byte stream (legacy)
  • Perlプログラマのためのgdb入門(at Shibuya.pm #9 LT) - とあるはてな社員の日記

    先日のShibuya.pm #9のLightening Talkで「gdbでXS on mod_perlをデバッグ」という話をしてきました。XSを使い出すと、従来のPerl的デバッグだけでは不十分なのでgdbをうまく使って、効率的にデバッグしましょう、という話です。実は、はてな社内では1年近く前に勉強で話したネタだったのですが、ようやく公開することができました。 Shibuya.pmでは5分という枠があったのでショートver.でしたが、ここでは制限はないので、来のロングバージョンの資料をアップします。ちょっと公開できない情報が混っていたので、xxxで隠していますが、ご了承ください。 ちなみに、Rubyとかでも似た感じでデバッグできると思うので、そちらの人も参考にしてください。長いよ!という人は、最後の「これは設定しておけ的gdb初期化マクロ」だけでもどうぞ。かなり便利です。 (資料公開が

    Perlプログラマのためのgdb入門(at Shibuya.pm #9 LT) - とあるはてな社員の日記
  • Shibuya Perl Mongers : Shibuya Perl Mongersテクニカルトーク#9

    Shibuya Perl Mongersテクニカルトーク#9 (通称:XS Nite) を2008年6月25日に開催します。 日時 - 2008年6月25日(水) 18:30-21:00 (18:00 開場) 会場 - 神保町三井ビル 17F 株式会社インターネットイニシアティブ (IIJ) 大会議室 料金 - 無料 事前登録 - (定員100名) 定員に達したので締め切りました。 ストリーミング 録画を公開しました(cojiさん、ありがとうございます!) http://techtalk.jp/2008/06/shibuyapm9.html プログラム 内容・順番・時間などは予告なく変更する場合があります。 第一部「XS 概論」 18:30 はじめてのXS - ハマりどころはココだ (hirose31) 18:45 Perl 5 internals の世界にようこそ (Daisuke Ma

  • XS利用でPerl高速化 その2 - ひげぽん OSとか作っちゃうかMona-

    前回は、XSモジュールを使うと処理が高速になる可能性があるという紹介をしました。 ただしXSモジュールの導入にはデメリットもあります。 C言語で実装しているという関係上、 モジュール変更のたびにリコンパイルが必要である メモリリークの危険性がある Perlの管理下にないメモリは自分で解放しなければなりません(詳細は後日) プラットフォーム間での互換性が保てない リコンパイルや修正が必要な場合が多い PerlのXSバージョンに左右される場合がある Perl単体のときと比べてデバッグが難しい などなど、クリアすべき点があります。 というわけで使いどころとしては、 Perlのコードで速度的にボトルネックになっている部分があり そのコードの仕様はほぼfixしている(変更が入る可能性は少ない) というような場合に、XSで処理を書いてみて、ベンチマークをとってみるという形が良いと思います。 なおXSに

    XS利用でPerl高速化 その2 - ひげぽん OSとか作っちゃうかMona-
  • ひげぽん OSとか作っちゃうかMona- - [Perl] XS利用でPerl高速化

    (追記:2009/03/25) id:tokuhirom さんからコメントを頂きました。このベンチマークは問題があるそうです。 http://d.hatena.ne.jp/higepon/20050615/1118829090#c (追記:終わり) PerlにはC言語で書かれた関数を呼び出すためにXSという仕組みが存在します。 一部CPANモジュールでも使われているためご存知の方も多いと思いますが、今回はこのXSの簡単な利用方法を紹介したいと思います。 なおXSは、はてなでも使用しています。 さてXSモジュールを使うとうれしい事は C言語で書くことにより、処理が高速になる可能性がある 既存のC言語ライブラリ資産をPerlから利用することができる Perlがあまり得意でない、メモリ内などに存在するビット単位での細かなデータ構造を、あれこれできる などが挙げられると思います。 今回は、高速化に

    ひげぽん OSとか作っちゃうかMona- - [Perl] XS利用でPerl高速化
  • 1