このブログはURLが変更になりました

新しいブログはこちら→ https://matsuu.hatenablog.com/

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 さんが試してみたところ、確かに体感速度が向上したらしい。

.@kjm せんせいによると、今週話題になった200行程度のカーネルに対する体感速度改善パッチ、劇的に変わったらしい。2.6.36でも一部ファイル名を変えれば適用可能とか。おれも試してみるか!less than a minute ago via twicca

ということで早速試してみた。

カーネル再構築

手元のカーネルは2.6.36だったので、上記パッチを2.6.36にバックポートしたパッチを作成

カーネルオプションはSCHED_AUTOGROUP。

General setup  --->
  [*] Automatic process group scheduling

で、カーネル再構築、インストールして再起動。

他に必要なツール

通常cgroupの制御にはlibcgroupを使うようだが、このSCHED_AUTOGROUPが有効であれば特に不要っぽい。デバッグなどにlibcgroupはあったほうが便利かも。

ちなみにFedoraにはlibcgroup、Debianにはcgroupの名称で取り込まれている模様。Gentooにはまだ取り込まれていないようだ

Gentoo用に簡単にebuildを書いてみた。

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
}

daemon周りがまだ用意できてないので未完成ebuild。誰かよろしく。

試してみた結果

手元のネットブック(Dell Inspiron mini 9)で試してみたところ、emergeぶん回してる間でもYouTubeが再生できるようになった。多分快適になった気がする。プラシーボ効果かも。