hagio.org - 日記

Powered by PENS


Index

2009: 1月(1)(2) 2月(1)(2) 3月(1)(2) 4月(1)(2) 5月(1)(2) 6月(1)(2) 7月(1)(2) 8月(1)(2) 9月(1)(2) 10月(1)(2) 11月(1)(2) 12月(1)(2)
2010: 1月(1)(2) 2月(1)(2) 3月(1)(2) 4月(1)(2) 5月(1)(2) 6月(1)(2) 7月(1)(2) 8月(1)(2) 9月(1)(2) 10月(1)(2) 11月(1)(2) 12月(1)(2)
2011: 1月(1)(2) 2月(1)(2) 3月(1)(2) 4月(1)(2) 5月(1)(2) 6月(1)(2) 7月(1)(2) 8月(1)(2) 9月(1)(2) 10月(1)(2) 11月(1)(2) 12月(1)(2)
2012: 1月(1)(2) 2月(1)(2) 3月(1)(2) 4月(1)(2) 5月(1)(2) 6月(1)(2) 7月(1)(2) 8月(1)(2) 9月(1)(2) 10月(1)(2) 11月(1)(2) 12月(1)(2)
2013: 1月(1)(2) 2月(1)(2) 3月(1)(2) 4月(1)(2) 5月(1)(2) 6月(1)(2) 7月(1)(2) 8月(1)(2) 9月(1)(2) 10月(1)(2) 11月(1)(2) 12月(1)(2)
2014: 1月(1)(2) 2月(1)(2) 3月(1)(2) 4月(1)(2) 5月(1)(2) 6月(1)(2) 7月(1)(2) 8月(1)(2) 9月(1)(2) 10月(1)(2) 11月(1)(2) 12月(1)(2)
2015: 1月(1)(2) 2月(1)(2) 3月(1)(2) 4月(1)(2) 5月(1)(2) 6月(1)(2) 7月(1)(2) 8月(1)(2) 9月(1)(2) 10月(1)(2) 11月(1)(2) 12月(1)(2)
2016: 1月(1)(2) 2月(1)(2) 3月(1)(2) 4月(1)(2) 5月(1)(2) 6月(1)(2) 7月(1)(2) 8月(1)(2) 9月(1)(2) 10月(1)(2) 11月(1)(2) 12月(1)(2)
2017: 1月(1)(2) 2月(1)(2) 3月(1)(2) 4月(1)(2) 5月(1)(2) 6月(1)(2) 7月(1)(2) 8月(1)(2) 9月(1)(2) 10月(1)(2) 11月(1)(2) 12月(1)

今月のアルバム [ 投稿 | 編集 ]


編集

December 2009

Dec 29 (Tue)

08:17 @ 京都

京都に着いた。気分は最悪だが…。なにしろ、泥酔状態で新宿発の夜行バスに乗り、7時間も揺られていたのだ。軽く二日酔いでコーヒーも泥水にしか感じない。(ほんとうに泥水なのかもしれないが。)

これからニシコレと合流して福岡まで高速に乗って帰る。想像以上にしんどいかも…。

Dec 26 (Sat)

15:40

なんやかんやで時間が経ってしまったが、update_wall_time() の続き。 HPET の場合、clockclocksource_hpet となる。

static void update_wall_time(void) { cycle_t offset; /* Make sure we're fully resumed: */ if (unlikely(timekeeping_suspended)) return; offset = (clocksource_read(clock) - clock->cycle_last) & clock->mask; /* clocksource のカウンタが前回からどれだけ進んだか。*/ clock->xtime_nsec += (s64)xtime.tv_nsec << clock->shift; /* この行が加算になっている気持ちは何? */ 追記:おそらく、xtime.tv_nsec の有効桁以下を考慮した処理をするため。*/ /* normally this loop will run just once, however in the * case of lost or late ticks, it will accumulate correctly. */ while (offset >= clock->cycle_interval) { /* accumulate one interval */ clock->xtime_nsec += clock->xtime_interval; clock->cycle_last += clock->cycle_interval; offset -= clock->cycle_interval; /* 1 tick 進める。xtime 更新はまだ。*/ /* nsec が 1 秒を超えた場合 */ if (clock->xtime_nsec >= (u64)NSEC_PER_SEC << clock->shift) { clock->xtime_nsec -= (u64)NSEC_PER_SEC << clock->shift; xtime.tv_sec++; second_overflow(); } /* interpolator bits (時刻補間処理) */ time_interpolator_update(clock->xtime_interval >> clock->shift); /* increment the NTP state machine */ /* tick 補正量を更新する。*/ update_ntp_one_tick(); /* accumulate error between NTP and clock interval */ clock->error += current_tick_length(); clock->error -= clock->xtime_interval << (TICK_LENGTH_SHIFT - clock->shift); } /* correct the clock when NTP error is too big */ /* tick 毎の nsec 値などを補正 */ clocksource_adjust(clock, offset); /* store full nanoseconds into xtime */ xtime.tv_nsec = (s64)clock->xtime_nsec >> clock->shift; clock->xtime_nsec -= (s64)xtime.tv_nsec << clock->shift; /* check to see if there is a new clocksource to use */ /* clocksource の切り替えがあったかどうか */ if (change_clocksource()) { clock->error = 0; clock->xtime_nsec = 0; clocksource_calculate_interval(clock, tick_nsec); } }

結局のところ、細かい補正ばかりやっているという印象だった。 RHEL4 から変わったのは clocksource の導入だけであり、 基本的な動作はほぼ同じで、正直あまり意味なかった…。

Dec 21 (Mon)

23:22

今日は、RHEL5 のタイマ割り込み周辺を見てみる。 RHEL4 は一通り見たのだけど、一部大きく変わっているようなので。

timer_interrupt() @ arch/i386/kernel/time.c あたりから。

  1. xtime_lock のロックを取る。
  2. do_timer_interrupt_hook() @ include/asm-i386/mach-default/do_timer.h
    いきなり tick_divider という謎のカーネルオプションあり。 tick_divider の回数だけ以下の処理を繰り返す。 デフォルトでは 1 のようなので、無視しても良いだろう。
    1. do_timer() @ kernel/timer.c
      1. jiffies_64 をインクリメント。
      2. update_times()
        1. ticks = jiffies - wall_jiffies
        2. wall_jiffies += ticks
        3. update_wall_time() ★ここが大きく変わっている
        4. calc_load(ticks) ロードアベレージの計算
    2. update_process_times() @ kernel/timer.c
      1. モードによって current のユーザー時間あるいはシステム時間を増加させる。 各 CPU 毎に用意されている cpustat の情報も更新する。
      2. run_local_timers()
        1. raise_softirq() ソフト割り込み
        2. softlockup_tick() soft lockup 検出処理
      3. scheduler_tick() tick 毎のスケジューラ処理
      4. run_posix_cpu_timers() タイマー処理
    3. profile_tick() @ kernel/profile.c プロファイリングのための処理やフックがある。
  3. xtime_lock をアンロック。

update_wall_time() が気になっていたので詳しく見ていこう。

まず、clocksource の概念があるのが RHEL4 とは大きく異なる。 clocksource とは、時間を進めるために使用するハードウェアや機構を抽象化したもののようで、 RHEL5 では使用する clocksource を動的に切り替えることもできるようだ。

[root@lab ~]# cat /sys/devices/system/clocksource/clocksource0/available_clocksource acpi_pm jiffies hpet tsc pit [root@lab ~]# cat /sys/devices/system/clocksource/clocksource0/current_clocksource hpet [root@lab ~]# echo tsc > /sys/devices/system/clocksource/clocksource0/current_clocksource [root@lab ~]# cat /sys/devices/system/clocksource/clocksource0/current_clocksource tsc [root@lab ~]# dmesg | grep clocksource Time: hpet clocksource has been installed. Time: tsc clocksource has been installed.

続く。

Dec 19 (Sat)

17:23

コーヒー豆をもらったのだが、名前がネタすぎる・・・ 「ウマ/プルプル」て・・・生まれたての子馬かい。

ちなみに味は酸味が強めな印象で、香りは・・・良いんだけど特に印象なし。まだ香りがわかるほどツウではないので。

Dec 16 (Wed)

07:40

新しく買った真っ白なシャツに、担々麺のスープが飛び散ってガックリ…

という夢を見たのだが、これは何を暗示しているのか。謎は深まるばかり。

12 月(1) へ


↑戻る