Linuxの体感速度大幅改善パッチ(SCHED_AUTOGROUP)を試してみた
2010/11/23追記:Gentooはsys-kernel/gentoo-sources-2.6.36-r2でこのパッチが取り込まれました。Gentoo仕事早すぎる。
2010/11/27追記:十分にテストされていないため、gentoo-sources-2.6.36-r2はpackage.maskされ、2.6.36-r3で取り除かれました。
2010年11月18日 "ミラクルパッチ"にLinusも大喜び!Linuxカーネルを高速化させた233行のコード|gihyo.jp … 技術評論社
カーネル開発に携わるMike Galbraith氏が書いた233行のカーネルスケジューリングパッチ。このパッチを適用すると,デスクトップ環境においてパフォーマンスが著しく向上するという。実際にこのパッチを当ててみた様子がYouTubeにアップされているが,パッチを当てる前と後では描画速度がまったく違うことに驚く。
そのパッチはこちらの模様。
早速 @kjm さんが試してみたところ、確かに体感速度が向上したらしい。
ということで早速試してみた。
カーネル再構築
手元のカーネルは2.6.36だったので、上記パッチを2.6.36にバックポートしたパッチを作成。
カーネルオプションはSCHED_AUTOGROUP。
General setup ---> [*] Automatic process group scheduling
で、カーネル再構築、インストールして再起動。
他に必要なツール
通常cgroupの制御にはlibcgroupを使うようだが、このSCHED_AUTOGROUPが有効であれば特に不要っぽい。デバッグなどにlibcgroupはあったほうが便利かも。
ちなみにFedoraにはlibcgroup、Debianにはcgroupの名称で取り込まれている模様。Gentooにはまだ取り込まれていないようだ。
libcgroup-0.37_rc1.ebuild
# Copyright 1999-2010 Gentoo Foundation # Distributed under the terms of the GNU General Public License v2 # $Header: $ EAPI="3" inherit linux-info multilib pam MY_PV="${PV/_/.}" MY_P="${PN}-${MY_PV}" DESCRIPTION="Libcgroups is a library that abstracts the control group file system in Linux" HOMEPAGE="http://libcg.sourceforge.net/" SRC_URI="http://kent.dl.sourceforge.net/project/libcg/${PN}/v${MY_PV/rc1/rc}/${MY_P}.tar.bz2" LICENSE="GPL-2" SLOT="0" KEYWORDS="~amd64 ~x86" IUSE="debug +pam +tools +daemon static-libs" RDEPEND="pam? ( sys-libs/pam )" DEPEND="${DEPEND} sys-devel/flex sys-devel/bison" CONFIG_CHECK="CGROUPS ~CGROUP_NS ~CPUSETS ~CGROUP_CPUACCT ~CGROUP_MEM_RES_CTLR ~CGROUP_SCHED" ERROR_CGROUPS="CONFIG_CGROUPS: must enabled for works" S="${WORKDIR}/${MY_P}" src_configure() { econf \ $(use_enable debug) \ $(use_enable pam) \ $(use_enable pam pam-module-dir $(getpam_mod_dir)) \ $(use_enable tools) \ $(use_enable daemon) || die "econf failed" } src_install() { emake DESTDIR="${D}" install || die "install failed" use static-libs || rm -f "${ED}"/usr/$(get_libdir)/*.la dodoc README || die if use daemon;then # newinitd "${FILESDIR}"/cgred.init cgred || die # newinitd "${FILESDIR}"/cgconfig.init cgconfig || die # newconfd "${FILESDIR}"/cgred.confd cgred || die insinto /etc doins samples/{cgconfig,cgrules}.conf || die dodoc README_daemon || die fi }