お知らせ

  • 利用規約を守って投稿してください。また、よくある質問および投稿の手引きも参照してください。
  • メッセージの投稿にはアカウントが必要です。未登録の方は、ユーザ登録ページからアカウントを作成することができます。

#1 2010-11-04 20:13:21

koisan1949
メンバ
From: Hyogo, Japan
登録日: 2007-11-11

clocksourceについて、この仕組みはUbuntuではどの様な仕様ですか?

こちらからの派生です。表記のCPUの割り込み処理について、教えてください。
https://forums.ubuntulinux.jp/viewtopic … 708#p70708
私の保有しているcubeマシン(MEGA651  MS-6760:SiS651+Sis962)の場合、
Ubuntu10.04LTS
~$ cat /sys/devices/system/clocksource/clocksource0/available_clocksource
tsc acpi_pm
~$ dmesg | grep clocksource
[    0.168113] Switching to clocksource tsc
[    0.330514] Switching to clocksource acpi_pm
~$ dmesg | grep HPET
~$ dmesg | grep PIT
[    0.000000] Fast TSC calibration using PIT
となり、HPETが存在しません。
"コンシューマ機のマザーボードにはまだ HPET が搭載されていないことも多く、
従来の Programmable Interval Timer = PIT によってタイマ割り込みを発生させることが多いようです。"

そこで別の機種(ASUS P4V8X-MX)に導入したUbuntu10.04(Linux 2.6.32-25-generic-pae)
で検証してみました。このマザーボードはHPETが機能する仕組みがあるようです。
でも、こちらも最初は同様な結果でしたが、違う箇所は
~$ dmesg | grep HPET の結果です。
 boot optionに "hpet=force"を設定すればよいと表示されました。

そこで、~$ gksu gedit /etc/default/grub にて、オプションを追加してみました。
 ....
 GRUB_CMDLINE_LINUX_DEFAULT="quiet hpet=force"
 ....
grubに反映させるため
~$ gksudo update-grub を実行して、再起動しました。
その結果です。

コード:

~$ cat /sys/devices/system/clocksource/clocksource0/available_clocksource
tsc hpet acpi_pm
~$ dmesg | grep clocksource
[    0.240281] Switching to clocksource tsc
~$ dmesg | grep HPET
[    0.207521] pci 0000:00:11.0: Force enabled HPET at 0xfed00000
[    0.235235] HPET: 3 timers in total, 0 timers will be used for per-cpu timer
~$ dmesg | grep PIT
[    0.000000] Fast TSC calibration using PIT

clocksourceにhpetを指定する方法は、実際どのように行うのでしょうか。。。
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash"に、clocksource=hpet を追記で
支障ないのでしょうか。。。
また、HPETが機能した場合そのメリットは。。。

オフライン

 

#2 2010-11-05 08:44:49

funatogawa
メンバ
From: 関東
登録日: 2009-02-01

Re: clocksourceについて、この仕組みはUbuntuではどの様な仕様ですか?

詳しくはありませんが、http://www2.nict.go.jp/w/w114/tsp/resea … ttime.htmlを見つけました。
マルチコアCPUがこんなところまで影響し、HPETカウンタをチップセットの方へ作っているのかと、感心します。

オフライン

 

#3 2010-11-05 11:55:23

si
メンバ
From: hokkaido kitami, jp
登録日: 2007-01-15

Re: clocksourceについて、この仕組みはUbuntuではどの様な仕様ですか?

当方の状況
(Linux ubuntu 2.6.35-22-generic-paeJ , Gigabyte EP45-DS4, Bios HPET enable)

si@ubuntu:~$ cat /sys/devices/system/clocksource/clocksource0/available_clocksource
hpet acpi_pm
si@ubuntu:~$ dmesg | grep clocksource
[    0.392015] Switching to clocksource tsc
[    0.451124] Switching to clocksource hpet

オフライン

 

#4 2010-11-05 20:02:23

koisan1949
メンバ
From: Hyogo, Japan
登録日: 2007-11-11

Re: clocksourceについて、この仕組みはUbuntuではどの様な仕様ですか?

funatofawaさん 紹介されたURL(時刻取得関数の仕組みについて)の情報ありがとうございました。
tscからhpetへの推移背景が何となく理解できました。
hpetがtscに比較して格段に性能がよいとのこと。
ただし、チップセットにあるHPETのカウンタをI/O命令で参照するため、オーバヘッドが大きく、
マイクロ秒以下の計測には適していない。 このことから、CPUの性能も重要なことも判明しました。

siさん hpetがbiosレベルで採用されているマザーの情報ありがとうございます。
私の保有する機種(ASUS P4V8X-MX)は、biosではサポートされていないのですが、設定は可能なようです。

これらのことから、hpetが利用可能かはマザー・ボードに依存し、3種類あることが分かりました。
1. hpetが機能しないもの
2. 起動時にオプションとしてhpetを選択指定できるもの
3. biosレベルでhpetを指定できるもの

オフライン

 

#5 2010-11-05 20:53:08

koisan1949
メンバ
From: Hyogo, Japan
登録日: 2007-11-11

Re: clocksourceについて、この仕組みはUbuntuではどの様な仕様ですか?

追記
biosでは設定する機能はないが、私のサーバ機であるLinux ubuntu 2.6.32-25-generic-pae,
 MSI-865GM2, Pentium4 3.2GHz, 3GB, NVIDIA Geforce6600 AGP
について、
~$ cat /sys/devices/system/clocksource/clocksource0/available_clocksource
tsc hpet acpi_pm
~$ dmesg | grep clocksource
[    0.260099] Switching to clocksource tsc
の結果でした。

/etc/default/grub
GRUB_CMDLINE_LINUX_DEFAULT="quiet clocksource=hpet" と変更して、再起動すると。。。
~$ dmesg | grep clocksource
[    0.000000] Kernel command line: BOOT_IMAGE=/vmlinuz-2.6.32-25-generic-pae root=UUID=d3ecd877-6bdc-4771-b2d2-1c9a8f93e39d ro quiet clocksource=hpet
[    0.260099] Switching to clocksource hpet
~$ dmesg | grep HPET
[    0.237220] pci 0000:00:1f.0: Force enabled HPET at 0xfed00000
[    0.256378] HPET: 3 timers in total, 0 timers will be used for per-cpu timer
となり、hpetでの機能になったようです。

オフライン

 

#6 2010-11-07 12:29:05

tista
ゲスト

Re: clocksourceについて、この仕組みはUbuntuではどの様な仕様ですか?

koisan1949様

clocksourceに関してはlapicをハンドリングするであろうACPIにより動作が一様ではありません。
多くのIntel系CPU及びchipsetではACPI内部でlapic_timer_reliable_statesをcallし、起動初期は主にacpi_idleによって割込みを制御します。
その後、仮にintel_idleがヒットした場合はacpi_idleからintel_idleへswitchすることでhpetが有効になります
(まぁdmesgのタイムスタンプ通りの処理を解説しただけですが・・)。

serial等で外部からtiming triggerを入れてrealtime kernelを動作させるような場合でない限り、overhead on I/Oはさほど問題にはならないような気がします
(あくまで”気がする”というだけで、あまり明確な根拠はありませんです・・・)。

 

#7 2010-11-08 01:57:24

koisan1949
メンバ
From: Hyogo, Japan
登録日: 2007-11-11

Re: clocksourceについて、この仕組みはUbuntuではどの様な仕様ですか?

tistaさん コメントありがとうございます。
さて、#1 のつづきです。

koike による投稿:

clocksourceにhpetを指定する方法は、実際どのように行うのでしょうか。。。
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash"に、clocksource=hpet を追記で
支障ないのでしょうか。。。

cubeマシン(MEGA651) : ASUS-P4V8X-MX
 Pentiam4 2.6GHz, 1GB, NVIDIA Geforce6200 AGP
 Linux ubuntu 2.6.32-25-generic-pae

/etc/default/grub を編集
GRUB_CMDLINE_LINUX_DEFAULT="quiet hpet=force clocksource=hpet"
~$ gksudo update-grub を実行して、再起動した結果です。

コード:

~$ cat /sys/devices/system/clocksource/clocksource0/available_clocksource
tsc hpet acpi_pm
~$ dmesg | grep clocksource
[    0.000000] Kernel command line: BOOT_IMAGE=/boot/vmlinuz-2.6.32-25-generic-pae
root=UUID=0abead39-eb1c-436d-9b88-a2625ca499a2 ro quiet hpet=force clocksource=hpet
[    0.236106] Switching to clocksource hpet
~$ dmesg | grep HPET
[    0.203493] pci 0000:00:11.0: Force enabled HPET at 0xfed00000
[    0.231141] HPET: 3 timers in total, 0 timers will be used for per-cpu timer

オフライン

 

#8 2010-11-08 02:06:01

koisan1949
メンバ
From: Hyogo, Japan
登録日: 2007-11-11

Re: clocksourceについて、この仕組みはUbuntuではどの様な仕様ですか?

#7 の訂正
cubeマシン(MEGA651) : ASUS-P4V8X-MX → ASUS-P4V8X-MX
隣にあるマシンの仕様と一部が重なりました。すみません。

オフライン

 

#9 2010-11-08 19:50:14

koisan1949
メンバ
From: Hyogo, Japan
登録日: 2007-11-11

Re: clocksourceについて、この仕組みはUbuntuではどの様な仕様ですか?

#7 の続きです。
dmesgの内容を検索するのに、"HPET"ではなく "hpet"に指定してみました。

コード:

~$ dmesg | grep hpet
[    0.000000] Kernel command line: BOOT_IMAGE=/boot/vmlinuz-2.6.32-25-generic-pae root=UUID=0abead39-eb1c-436d-9b88-a2625ca499a2 ro quiet hpet=force clocksource=hpet
[    0.231514] hpet clockevent registered
[    0.231531] hpet0: at MMIO 0xfed00000, IRQs 2, 8, 0
[    0.231544] hpet0: 3 comparators, 32-bit 14.318180 MHz counter
[    0.236117] Switching to clocksource hpet
[    0.340422] rtc0: alarms up to one year, y3k, 114 bytes nvram, hpet irqs

~$ gksu gedit /etc/ntp.conf でNTP serverの箇所に追記しました。
 # You do need to talk to an NTP server or two (or three).
 server ntp.nict.jp
 server ntp.nict.jp
 server ntp.ubuntu.com

コード:

~$ ntpq -p
     remote           refid        st t      when   poll   reach    delay   offset  jitter
=================================================
 ntp-a2.nict.go. .INIT.          16 u    - 1024    0    0.000    0.000   0.000
 ntp-a3.nict.go. .INIT.          16 u    - 1024    0    0.000    0.000   0.000
*europium.canoni 193.79.237.14    2 u   39  128  377  296.714  -10.670   1.978

この結果から、ntp.nict.jp と同期してくれません。
どうしてダメなのでしょうか。。。 同期させるには、別に何か設定する必要があるのでしょうか。。。


~$ sudo apt-get remove --purge ntp
~$ sudo apt-get install ntp
とやって、~$ gksu gedit /etc/ntp.conf で
オリジナルのntp.confに NTPserver を同様に再度追加し、
~$ ntpq -p を実行しましたが、同様な結果です。

オフライン

 

#10 2010-11-10 07:59:30

ry
メンバ
登録日: 2008-07-30

Re: clocksourceについて、この仕組みはUbuntuではどの様な仕様ですか?

koisan1949 さんの投稿 (#9):

~$ gksu gedit /etc/ntp.conf でNTP serverの箇所に追記しました。
 # You do need to talk to an NTP server or two (or three).
 server ntp.nict.jp
 server ntp.nict.jp
 server ntp.ubuntu.com

コード:

~$ ntpq -p
     remote           refid        st t      when   poll   reach    delay   offset  jitter
=================================================
 ntp-a2.nict.go. .INIT.          16 u    - 1024    0    0.000    0.000   0.000
 ntp-a3.nict.go. .INIT.          16 u    - 1024    0    0.000    0.000   0.000
*europium.canoni 193.79.237.14    2 u   39  128  377  296.714  -10.670   1.978

この結果から、ntp.nict.jp と同期してくれません。

/etc/ntp.conf ファイルの server 行の記述を以下のようにしてみてはどうでしょう

コード:

server -4 ntp.nict.jp
server ntp.ubuntu.com

昨今の OS は IPv6 が有効になっています
ところが、インターネットに接続する回線は、未だに IPv4 しか使っていないことがほとんどです

ntp.conf ファイルの server の行で指定した ntp.nict.jp を名前解決すると、IPv6 と IPv4 の二種類のアドレスが得られます
この二種類のアドレスは IPv6 -> IPv4 の順に並んでいます
OS が IPv6 をサポートしていると、NTP はリストの先頭にある IPv6 の アドレスに接続を試みますが、インターネットに接続する回線は IPv4 しか使えないため、これは必ずエラーになります
ntp.ubuntu.com については、名前解決で IPv4 のアドレスしか得られないため、このようなことにはならず正常に接続できます

上のコードで追加した -4 オプションは、名前解決の際に IPv4 のアドレスだけを抽出するように強制するものです
これによって ntp.nict.jp を名前解決したときに IPv6 のアドレスを無視し、IPv4 のアドレスだけを対象にするようになり、接続が正常に行われるようになります

# 乱文容赦

オフライン

 

#11 2010-11-11 01:04:47

koisan1949
メンバ
From: Hyogo, Japan
登録日: 2007-11-11

Re: clocksourceについて、この仕組みはUbuntuではどの様な仕様ですか?

ryさん 懇切丁寧な説明ありがとうございました。 納得です。

ryさん による投稿:

ntp.conf ファイルの server の行で指定した ntp.nict.jp を名前解決すると、IPv6 と IPv4 の二種類のアドレスが得られます
この二種類のアドレスは IPv6 -> IPv4 の順に並んでいます
OS が IPv6 をサポートしていると、NTP はリストの先頭にある IPv6 の アドレスに接続を試みますが、インターネットに接続する回線は IPv4 しか使えないため、これは必ずエラーになります
ntp.ubuntu.com については、名前解決で IPv4 のアドレスしか得られないため、このようなことにはならず正常に接続できます

-4 を付加したら正常になりました。

コード:

~$ ntpq -p
     remote           refid      st t when poll reach   delay   offset  jitter
==============================================================================
 ntp-b3.nict.go. .NICT.           1 u   53   64    1   15.032  -137.49   0.001
 ntp-a3.nict.go. .NICT.           1 u   52   64    1   14.474  -136.64   0.001
 europium.canoni 193.79.237.14    2 u   51   64    1  281.892  -134.53   0.001

オフライン

 

Board footer

Powered by FluxBB