ページサイズはなぜ4KiBになったのか?

2
鯉江 @koie

そういえば、なんでページサイズは4KiBなんだっけ?

2018-11-06 14:49:40
SODA Noriyuki @n_soda

@koie 80386の時代にはそれくらいが手ごろだったってだけでしょう。同じくらいの時期でも8KBのCPUとかありました。

2018-11-06 14:51:40
鯉江 @koie

@n_soda 64bitにするときにページサイズを大きくしなかったのはなんででしょう? メモリ空間がひろがるけどトランジスタも増えるし微細化で速度も上がるし4Kのままでバランスとれるって判断だったんだろうか?

2018-11-06 15:07:52
fjのYog教祖様 @fjs_kyousosama

@n_soda @koie 逆に VAX の頃は 512byte/page だったし、本当に「手頃」で決めてたんだと思う。 大雑把に言えるのは、その時の主力メモリ容量の sqrt ぐらいが1ページサイズとして都合が良い事が多い、と言う辺りでしょうか(それぐらいを想定するアプリ・周辺HWが多い、と言う意味で)

2018-11-06 15:09:45
中村 実 @nminoru_jp

@koie System/370は最初2KiBでしたが、その後4KiBに。この伝統が今も生きてます。8KiBにしたSparkとか、複数選択可能な中で16KiBを標準にしたIA-64はフェードアウト…

2018-11-06 15:31:34
SODA Noriyuki @n_soda

@koie よく分かりませんが、32bit時代のバイナリを動かそうと思うと仮想記憶システムは最低ページサイズ4Kで動かさなければいけないし、だったら、まいっかみたいな判断ですかねえ?

2018-11-06 17:39:00
たけ_Eva 猫化中🐱祝エヴァ28年⚠シン・エヴァンゲリオン劇場版:||公開 EVANGELION @take6

@koie ページング方式 ja.wikipedia.org/wiki/%E3%83%9A… >ページサイズは512バイトから8192バイトが一般的であり、特に4096バイトが最もよく使われるが、特殊用途として4Mバイトやそれ以上のサイズのページも使われることがある。 過去のシステムを引きついでいるからですね

2018-11-06 18:13:56
齊藤明紀 @a_saitoh

@koie @n_soda x86はオプションとして、大きいページサイズも選べるようにしてませんでしたっけ。

2018-11-06 18:44:58
とみながたけひろ @takehiro_t

@n_soda @koie 昔の整列制限のままmmapできないとつらいから、でしょうね。しがらみ少な目のiOSは16KBとか聞いた気がします

2018-11-06 19:04:38
SODA Noriyuki @n_soda

@takehiro_t @koie なるほど。32bitから64bitへの移行で問題が生じるのは避けたいですもんね。

2018-11-06 19:11:51
SODA Noriyuki @n_soda

@a_saitoh @koie x86を含め今のCPUでは、ハードウェア的には複数の異なるページサイズをサポートしているものの方が多いしLinuxもhugepagesなどでサポートしてますよね。@koie さんの疑問はハードウェア的にはサポートしているのに、なぜソフトウェアの側でデフォルトのページサイズを変更しなかったか?ではないかと。

2018-11-06 19:14:31
小崎 資広 (KOSAKI Motohiro) @kosaki55tea

@n_soda @takehiro_t @koie Linuxでも、もう32bit互換重要じゃないから16KBに変えようという議論、何回か出てるんですが、進みませんねえ、ほとんどのひとが出来るものならやってみろてきな冷笑的な態度で議論に参加するので

2018-11-06 19:48:07
SODA Noriyuki @n_soda

@kosaki55tea @takehiro_t @koie 基盤となるソフトウェアでは、互換性に関して懸念のある変更って嫌われますからねえ… 世の中にあるソフトウェアが、すべてきっちり書いてあるのであれば互換性の問題も出ないんでしょうけど…

2018-11-06 19:51:38
小崎 資広 (KOSAKI Motohiro) @kosaki55tea

@n_soda @takehiro_t @koie POWERはLinusの趣味により、CPUのページサイズが4KBでも、16KB単位でカーネルが管理するようになっており、そのため、/procなどでページサイズをみると、ハードウェアのページサイズと、カーネルページサイズの2つが表示されるが、なにが違うのか普通の人には意味不明である

2018-11-06 19:53:01
SODA Noriyuki @n_soda

@kosaki55tea @takehiro_t @koie VAX BSDも昔からハードウェアのページサイズ(512バイト)よりも大きなサイズで管理してますが、こっちは512バイトだとページングが遅すぎるせいだったような気がします。NetBSD/vaxだと4KBで昔からこうだった気がしてたんですが、4.2BSDのソース確認したらCLBYTES=2KBっぽいので記憶違いみたいorz

2018-11-06 20:19:25
Shirouzu Hiroaki(白水啓章) @shirouzu

64bit Linux では 16KBページが候補なのね。 x64は、4KBの次は2MBしか使えないのかと思い込んでいた… nminoru.jp/~nminoru/progr… twitter.com/kosaki55tea/st…

2018-11-06 20:26:49
K. Ishizaki @kiszk

@nminoru_jp @koie なぜSparkが、と思ったらSparcですね

2018-11-06 20:55:33
SODA Noriyuki @n_soda

@shirouzu あー。 16KBってのはハードウェア的には4KBのままで、ソフトウェア的に16KBにするって話なんでしょうか。その場合、ページテーブルが消費するメモリは節約できませんが…

2018-11-06 20:57:08
鯉江 @koie

@n_soda ページサイズが小さすぎるとdisk IOの速度が出ないというのはありそうですね。今だったらまとめ読み・先読みで克服できてそうだけど。

2018-11-07 10:10:22
鯉江 @koie

The SPARC Architecture Manual ver8 pic.twitter.com/vKlGUOi4av

2018-11-07 12:06:33
拡大
鯉江 @koie

SPARCはページサイズ4K固定だけど、線形マッピングという機能があってPTEにマッピングサイズを指定して4K,256K,16M,4Gを指定して大きなページをつくれるようだ。

2018-11-07 12:06:42