アプリ起動の高速化@ubuntu
拙生のような貧乏人と違い、贅沢な環境も難なく構築できる
資金力をお持ちの方なのに、もったいないから&安いから
という理由で二昔前のPCを集めてきて、ただだからという理由で
ubuntuを使っている御仁がいらっしゃいます。
金を残す人ってそうなんだろうなぁ。。。
なんて感心しているというお話じゃございませぬ。(w
実はこの御仁結構こだわるかたで、アプリの起動をもっと
早くしたいと色々頑張っておられます。
で、先日尋かれたのがprelinkを導入したみたけど、実行すると
not an ELF objectと怒れれっちゃうけどどぉして?というものでした。
あのぉ~、prelinkってELF(Executable and Linkable Format)の
オブジェクトに対して共有ライブラリから必要部分を事前に
スタンバイさせておいて、プログラムの起動を早くする機能だから、
ELF形式じゃないものは怒られるのが当たり前だと思うんですけどぉ。
さらに御仁が語るところによると、ならばと色々ググッってprelinkの
コンフィグファイルに思い当たるものをどんどん登録し、-aオプションを
つけてprelinkを実行したということです。
おぉぉ!なかなか賢いじゃん。
つまりコンフィグファイルに登録したものの中でprelink可能なものは
全てする、というのが-aオプションなんです。
で、拙生が御仁に尋ねたのは、マシーンスペックは?
返ってきたのはFMV-D3290の中古でCPUがCeleron1.8GHz、
メモリは2GB、HDDは80GBで75GB以上は使用していたはず
とのことでした。
ちょっと待ってぇ!!
prelinkを導入するならもっと仕組みを調べてからにしましょうぜ。
prelinkすればプログラムに使用しているバイナリが、プラスされた
ライブラリ分だけ増大しちゃうんですけど。
できるやつを全部prelinkしちゃったらHDDの容量は大丈夫かいな?
prelinkだけでなくELFについてももうちょっとお勉強が必要ですね。
といっても拙生自身もそんなに詳しいわけじゃありませぬが。。
【ELF概要@拙生流】
( @拙生流とするときは、書いたことへの検証は参考文献や
ググり詣でで行っていないため、あまり自信がないときに
多用しますので要注意!です・・・笑 )
アプリを構成するライブラリには、アプリが違っても汎用的な機能で
共通して使いまわせるものが数多くあります。
アプリそれぞれにライブラリを持つこと(静的ライブラリ)は
プログラムの大きさや開発者の手間を増大させるので、共有するための
動的ライブラリを用意しておき、それを利用することで無駄を省こう
という考え方です。
ELF 共有オブジェクトは概ね標準共有ライブラリという意味です。
【ELFの功罪】
功 プログラム容量が小さくて済む。
開発者の手間が減る。
罪 起動が遅い
共有ライブラリを利用する方法は拙生の知る限り、動的リンクと
動的ロードの2通りですが、いずれにしろアプリを実行した
ユーザー空間の仮想メモリに必要なライブラリをロードして
再配置する分、静的ライブラリより起動が遅いのは仕方ありません。
prelinkすれば早くなる代わりに余分にリソースを喰うという
トレードオフ関係にあります。
ちなみに効果が体感できるほど飛躍的なものかどぉかは別として、
起動を並列処理させたりマウントをRAMドライブで駆動させたり
(UPSなどしっかりした電源環境が必要)キャッシュ関係をいじったり、
高速化に関する手法はたくさんあるのですが、下手をやらかすと
お釈迦にしてしまう可能性があり、prelinkなどよりはハードルが
ずっと高いものもあるので、事前のお勉強がとても大事になります。
さてさて、結論めいた話でまとめると
prelinkをするにはHDDを容量を大きなものにしましょうぜ。
内臓SSDにしたらさらに高速です。
データを外付けストレージやクラウドにして空きスペースを
確保したらその分遅くなっちゃうので、お勧めはもっと良い
パソコンにしろ!ってことですか。(結局はそこかい!? w)
拙宅ubuntuメインマシーンはWindowsマシンのお下がりで
初期の世代といえどCPUはi7(2.93GHzx4core/8s)、メモリは8GB、
256GBのSSDですから、何も細工せずとも早さは超特急ですよ。
(笑笑笑@勝ち誇った笑い
何て書いたら本気出されてi7-5960X (8core/16s DDR4)
SSDx4ーRAID6のストライピングあたりで対抗されたら怖いので
程々にしておきましょ。@実は煽り
*PS
高速化の一つとして先日POSTしたCCACHEも有効な手段ですね。
HOME
最近のコメント