DBIx::Class導入時Perlアップデート
CentOS5.1の環境にて、CatalystのためのO/RマッパーにDBIx::Class導入したとき、
WARNING: DBIx::Class::StartupCheck: This version of Perl is likely to exhibit extremely slow performance for certain critical operations. Please consider recompiling Perl. For more information, see https://bugzilla.redhat.com/show_bug.cgi?id=196836 and/or http://lists.scsys.co.uk/pipermail/dbix-class/2007-October/005119.html. You can suppress this message by setting DBIC_NO_WARN_BAD_PERL=1 in your environment.
と散々言われた。おそらくワーニングのとおり環境変数にDBIC_NO_WARN_BAD_PERL=1をセットすればいいんだろうが、パフォーマンス悪くなるとかいうのが気になったのでググってみたらいろいろ出てきたのでメモ。
kazeburoさんやYappoさんが言ってたRed Hat系のディストリビューションのPerlのパッケージにはoverloadされたクラスをblessするとリファレンスを全て検索するパッチがあてられていて遅いので注意してねって感じですか。
要は、CentOSのRPM版Perl使用すると、余計なパッチが当たってしまっているので、以下のとおり除外したものを使え、とのこと。
FedoraがあてたPatch
が原因なのでspecファイルいじってrebuild
さらによく読み進めると結構深刻な問題なようで、use overload; してblessしたモジュールが覿面にパフォーマンス低下するようで。
とこのuse overload;って初見だったんだけど、Perlって演算子のオーバーロードができるんだね。
- http://search.cpan.org/~rgarcia/perl-5.10.0/lib/overload.pm
- http://perldoc.jp/docs/perl/5.6.1/overload.pod
…知らなかった。こんなのもあるのかー。
というわけで、CentOSの該当SRPMバラして、SPECファイル修正してPerlのRPMをリビルド。
$ wget ftp://ftp.iij.ad.jp/pub/linux/centos/5/updates/SRPMS/perl-5.8.8-10.el5_2.3.src.rpm $ rpm -ivh perl-5.8.8-10.el5_2.3.src.rpm $ cd SPECS $ vim perl.spec
--- perl.spec.bak 2008-06-05 21:01:41.000000000 +0900 +++ perl.spec 2008-08-05 17:46:06.000000000 +0900 @@ -5,7 +5,7 @@ %define multilib_64_archs x86_64 s390x ppc64 sparc64 %define perlver 5.8.8 -%define perlrel 10%{?dist}.3 +%define perlrel 10%{?dist}.3nooverloadpatch %define perlepoch 4 %{?!perl_debugging: %define perl_debugging 0} @@ -160,8 +160,8 @@ Patch27116: perl-5.8.8-U27116.patch Patch27391: perl-5.8.8-U27391.patch Patch27426: perl-5.8.8-U27426.patch -Patch27509: perl-5.8.8-U27509.patch -Patch27512: perl-5.8.8-U27512.patch +#Patch27509: perl-5.8.8-U27509.patch +#Patch27512: perl-5.8.8-U27512.patch Patch27604: perl-5.8.8-U27604.patch Patch27605: perl-5.8.8-U27605.patch Patch27914: perl-5.8.8-U27914.patch @@ -370,9 +370,9 @@ %patch27426 -p1 -%patch27509 -p1 +#%patch27509 -p1 -%patch27512 -p1 +#%patch27512 -p1 %patch27604 -p1
$ rpmbuild -ba perl.spec
これで、RPMS/i386以下に
- perl-5.8.8-10.3nooverloadpatch.i386.rpm
- perl-debuginfo-5.8.8-10.3nooverloadpatch.i386.rpm
- perl-suidperl-5.8.8-10.3nooverloadpatch.i386.rpm
ができあがりー。
このうち
をインストール。
$ sudo rpm -Uvh perl-5.8.8-10.3nooverloadpatch.i386.rpm
2008/10/30追記:
CentOS5.2にしたらPerlのパッケージバージョンがperl-5.8.8-15.1にあがってた。。
ChangeLog読んだら、この周りの対応がされてたっぽい。
* Thu Aug 28 2008 Marcela Maslanova <mmaslano@redhat.com> - 4:5.8.8-15.el5.1 - add upstream fix for bless/overload problem (changes 31996,32018,32019, 32025) and perl-5.8.8-bug24254.patch. Without this patch had bless poor performance. - Resolves: rhbz#460308
なので、そのままDBIx::Classで怒られなくなると思いきや、やっぱり怒られる。(T_T)
しょうがないので、関連するパッチを一切合財排除。
- Patch27509: perl-5.8.8-U27509.patch
- Patch27512: perl-5.8.8-U27512.patch
- Patch24254: perl-5.8.8-bug24254.patch
- Patch31996: perl-5.8.8-U31996.patch
- Patch32018: perl-5.8.8-U32018.patch
- Patch32019: perl-5.8.8-U32019.patch
- Patch32025: perl-5.8.8-U32025.patch
大元のパッチ(27509,27512)はupstream changesの組み込みということなのである程度意味があるんだろうが。。うーん…。
帰って来たThinkpadX61
Thinkpad X61ワイヤレスLAN接続トラブルその後のその後。
修理センターに預けることにしたが、デバイスドライバ入れ替えておいてくれ、というオーダーは修理センターでは受けられないとの事。その変わり、「修理の際に技術担当から状況を連絡させます」という約束をいただいた。
ところが!
夏休みの帰省から自宅に戻ってみると、PC変換の不在票がポストに。徐に配送業者に連絡して、PCが返って来た。返って来たPCには「サービス報告書」なるものが添付されていた。
障害状況:間欠障害でリカバリー後でも無線接続が不安定。
修理内容:ご報告の無線LAN接続障害は長時間の無線LANネットワーク接続を行いましたが再現が出来ませんでした。障害記述から無線LANカードの交換を行いました。各種機能テストにて正常稼働を確認しております。
とまあ、いちばん避けたかった結果に。笑えねえよ。そうなるのが容易に想像できたから技術担当から連絡させろっつったのに。で、PC起動したら当り前のようにドライバはバージョンアップされないまま障害再現と。
最早半ギレでスマートセンターにTEL。状況を説明し、修理センターに再度問い合わせ。
一応履歴にそのような連絡をさせるという記載が残っていたようで、平謝りされる。
相当に頭に来ていたものの、接続障害が解決されないと謝られてもしょうがないので、スマートセンターに再度障害解決に付き合ってもらうことにした。こうなりゃトコトンですわ。
電話口でいろいろ確認してみたものの、やはり状況が改善しないため、先方から以下の提案が。
- Access Connectionsを使用しないで接続してみる
- Windows XP Service Pack3(SP3)を適用しない
いずれも報告例があるらしい。Access Connectionsを使用しないのであれば、ドライバのアップデートは不要のはずとの事。また、問題の切り分けとしても、Windowsがおかしいのか、ドライバがおかしいのか、Access Connectionsに異常があるのか判明しやすいとの事。まあこれは極めて合理的だわな。
という訳で、Windowsリカバリするところから再挑戦。おいおい。何度リカバリさせるんだ。。。もう手慣れたもんですわ(泣)。んで、Access Connectionsをアンインストール。
アンインストール後再起動して、コントロールパネルからアクセスポイント検索して、WEPキーを入力、、と。で、しばらく疎通観察してみたら、
接続速度の表示が断続的に変化して、
が繰り返されることに。
がWindowsの接続でも再現!!なんなんだいったい。。。
で昨日はここまででタイムアップ。。しかも、今日(2008/8/10(日))は第2日曜日なのでスマートセンターはお休み。またも一週間塩漬け。いい加減にしてくれ。
ひとまずここまでのまとめ。
- 無線LANカード交換しても再現することから、HWのせいではない
- 他の無線LANクライアントでは再現しないことから、親機のせいである可能性は低い
- Access Connectionsは関係ない
- ドライバの更新は完了していないことから、バージョンが古いことに起因している可能性は否めない
ってことか。そろそろキツいな。。技術的にもそうだけど、手間がかかってしょうがない。
ていうかCardBus用無線子機買った方が早いかなー。。