[Linux] 24 April 2011 はてなブックマーク - Ubuntu11.04 “Natty Narwhal”  その1: indicator-cpufreqのマルチコア対応 Twitterでつぶやく

Ubuntu11.04 “Natty Narwhal” その1: indicator-cpufreqのマルチコア対応

20110424-multicore_indicator.png
同僚達がBeta2なのにも関わらず11.04を入れ始めていて、しょうがないので入れた。
自分はRaid使ってるので標準版ではなくAlternate版を入れた。
で、まあいろいろと問題があった。
1、新UIであるUnityで以前のcpuクロックインジケーターが使えない問題。
2、UnityでF10がパネルメニューを開く設定になっていてibus-anthyで半角変換が無効になる問題。
3、多言語環境で日本語のフォントの摘要順番が狂うことによってアンチエイリアスの聞かなくなる問題。

いずれも常用するのに問題があったので対応方法をメモ。
今回はcpuクロックインジケーターの問題から。

▽ マルチコア環境でGUIからクロックコントロールできない問題
まずは下記を実行してindicator-cpufreqをインストールする。
sudo add-apt-repository ppa:artfwo/ppa
sudo apt-get update
sudo apt-get install indicator-cpufreq
で、あとはコンソールで
indicator-cpufreq &
とかして起動する。スタートアップに/usr/bin/indicator-cpufreqを登録しても良い。
でも、開発中のためか、このままでは最初のCPU以外のクロックが設定できない。コード中にもFIXMEとか書いてあって開発者もUI的にどうすべきか悩んでる様なのだけどないと困るので、とりあえずコア数のカウントして全コアを同じ設定にするようにするパッチを書いた。
--- indicator.py	2011-04-24 10:02:32.000000000 +0800
+++ indicator_multicore.py 2011-04-24 09:56:02.000000000 +0800
@@ -18,8 +18,8 @@
# org.freedesktop.PolicyKit1 (cheat at distutils-extra)

# TODO:
-# import multiprocessing
-# multiprocessing.cpu_count()
+import multiprocessing
+CPU_CORES=multiprocessing.cpu_count()

import gobject
import gtk
@@ -71,6 +71,12 @@
self.select_items = {}
group = None

+ # number of cpu cores label
+ if CPU_CORES > 1:
+ menu_item = gtk.MenuItem("Total Core: "+str(CPU_CORES))
+ menu.append(menu_item)
+ menu.append(gtk.SeparatorMenuItem())
+
# frequency menu items
freqs = cpufreq.get_available_frequencies(FIXME_CPU)
for freq in freqs:
@@ -93,6 +99,7 @@
menu_item.connect('activate', self.select_activated, 'governor', governor)
self.select_items[governor] = menu_item

+
menu.show_all()

self.set_menu(menu)
@@ -134,11 +141,13 @@
"/org/gnome/cpufreq_selector/selector",
introspect=False)
if select == 'frequency':
- proxy.SetFrequency(dbus.UInt32(FIXME_CPU), dbus.UInt32(value),
- dbus_interface='org.gnome.CPUFreqSelector')
+ for cpuid in range(CPU_CORES):
+ proxy.SetFrequency(dbus.UInt32(cpuid), dbus.UInt32(value),
+ dbus_interface='org.gnome.CPUFreqSelector')
else:
- proxy.SetGovernor(dbus.UInt32(FIXME_CPU), value,
- dbus_interface='org.gnome.CPUFreqSelector')
+ for cpuid in range(CPU_CORES):
+ proxy.SetGovernor(dbus.UInt32(cpuid), value,
+ dbus_interface='org.gnome.CPUFreqSelector')

def can_set(self):
pass
これをローカルにmulticore.patchとでもしてどこかに保存後に下記を実行する。
cd /usr/lib/pymodules/python2.7/indicator_cpufreq
sudo rm indicator.pyc
sudo cp indicator.py indicator.py.backup
sudo patch < [保存したパス]/multicore.patch
その後、pycを生成するために1度だけsudoでindicator-cpufreqを実行しCtrl+cで抜ける。
sudo indicator-cpufreq
[Ctrl+c押下]
あとはsudoつけずに起動すれば、コア数が表示され、さらに速度変更がすべてのコアに反映されるようになる。
しかし、こういうのが手軽にできるとするとpython便利だなぁ。gtkとシステムライブラリ組み合わせるといろいろできちゃうわけだ。

参考:
Change and Monitor CPU Frequency Scaling in Ubuntu 11.04 with Indicator-cpufreq

Boduch's Blog: Python CPUs

Bug #691721 in indicator-cpufreq: “indicator-cpufreq only shows one CPU core”

Comments

No comments yet

Add Comment

このアイテムは閲覧専用です。コメントの投稿、投票はできません。