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するとリファレンスを全て検索するパッチがあてられていて遅いので注意してねって感じですか。


hide-k.net#blog: CentOSでDBIC最新版を使うときの注意

要は、CentOSRPMPerl使用すると、余計なパッチが当たってしまっているので、以下のとおり除外したものを使え、とのこと。

FedoraがあてたPatch

  • perl-5.8.8-U27509.patch
  • perl-5.8.8-U27512.patch

が原因なのでspecファイルいじってrebuild


kazeburo : FC5 FC6でPerlが遅い問題

さらによく読み進めると結構深刻な問題なようで、use overload; してblessしたモジュールが覿面にパフォーマンス低下するようで。


とこのuse overload;って初見だったんだけど、Perlって演算子オーバーロードができるんだね。

…知らなかった。こんなのもあるのかー。


というわけで、CentOSの該当SRPMバラして、SPECファイル修正してPerlRPMをリビルド。

 $ 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以下に

ができあがりー。


このうち

をインストール。

 $ 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がおかしいのか、ドライバがおかしいのか、Access Connectionsに異常があるのか判明しやすいとの事。まあこれは極めて合理的だわな。


という訳で、Windowsリカバリするところから再挑戦。おいおい。何度リカバリさせるんだ。。。もう手慣れたもんですわ(泣)。んで、Access Connectionsをアンインストール。


アンインストール後再起動して、コントロールパネルからアクセスポイント検索して、WEPキーを入力、、と。で、しばらく疎通観察してみたら、

接続速度の表示が断続的に変化して、

が繰り返されることに。

Windowsの接続でも再現!!なんなんだいったい。。。


で昨日はここまででタイムアップ。。しかも、今日(2008/8/10(日))は第2日曜日なのでスマートセンターはお休み。またも一週間塩漬け。いい加減にしてくれ。


ひとまずここまでのまとめ。


ってことか。そろそろキツいな。。技術的にもそうだけど、手間がかかってしょうがない。


ていうかCardBus用無線子機買った方が早いかなー。。