プロフィール

kosaki

Author:kosaki
連絡先はコチラ

ブログ検索
最近の記事
最近のコメント
最近のトラックバック
リンク
カテゴリー
月別アーカイブ
RSSフィード
FC2ブログランキング

スポンサーサイト このエントリーをはてなブックマークに追加

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。


スポンサー広告 | 【--------(--) --:--:--】 | Trackback(-) | Comments(-)

Ruby でsysfsのファイルが読めない件について このエントリーをはてなブックマークに追加

http://cvs.m17n.org/~akr/diary/2009-04.html#a2009_04_07_1

昨日ひろのぶさんに指摘されたのだが、GNU/Linux で /sys/devices/system/cpu/cpu0/cpufreq/scaling_available_frequencies がうまく読めないという。

% ruby -ve '
Thread.new { sleep }
File.read("/sys/devices/system/cpu/cpu0/cpufreq/scaling_available_frequencies")
'
ruby 1.9.2dev (2009-03-13 trunk 22936) [i686-linux]
(ここでブロックして終わらない)



ほほー。でコードをチェックしてみる

fs/sysfs/file.c の以下の部分が原因っぽげ。
内部データが変わって、以前と違うデータが読めるようになった時しか poll が値を返していない。


/* Sysfs attribute files are pollable.  The idea is that you read
* the content and then you use 'poll' or 'select' to wait for
* the content to change. When the content changes (assuming the
* manager for the kobject supports notification), poll will
* return POLLERR|POLLPRI, and select will return the fd whether
* it is waiting for read, write, or exceptions.
* Once poll/select indicates that the value has changed, you
* need to close and re-open the file, or seek to 0 and read again.
* Reminder: this only works for attributes which actively support
* it, and it is not possible to test an attribute from userspace
* to see if it supports poll (Neither 'poll' nor 'select' return
* an appropriate error code). When in doubt, set a suitable timeout value.
*/
static unsigned int sysfs_poll(struct file *filp, poll_table *wait)
{
struct sysfs_buffer * buffer = filp->private_data;
struct sysfs_dirent *attr_sd = filp->f_path.dentry->d_fsdata;
struct sysfs_open_dirent *od = attr_sd->s_attr.open;

/* need parent for the kobj, grab both */
if (!sysfs_get_active_two(attr_sd))
goto trigger;

poll_wait(filp, &od->poll, wait);

sysfs_put_active_two(attr_sd);

if (buffer->event != atomic_read(&od->event))
goto trigger;

return 0;

trigger:
buffer->needs_read_fill = 1;
return POLLERR|POLLPRI;
}



コメントを読むと意図した feature なんだと言っているようなので、Linux側を直すのは筋が悪そう。たぶん、既存のsysfs監視ツールが壊れる。
どうするのが一番害がすくない直し方なのか、後でまた考える

関連記事


linux | 【2009-04-07(Tue) 21:20:19】 | Trackback:(0) | Comments:(0)
  1. 無料アクセス解析
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。