こっちはたぶんこのまま放置します。
- 関連記事
-
- 引っ越しました (2015/12/30)
- Windows 再インストールした (2014/11/20)
- 一時帰国ログ (2014/06/04)
- 関連記事
-
- THPの記事にちょっと追記した (2015/09/10)
- Linuxカーネルの「TCP_TIMEWAIT_LEN」変更は無意味? の件について (2015/09/09)
- transparent hugepage considered harmful (2015/09/02)
きっかけは先月帰国したときに sonots がDeNAをはじめとして、Web企業では広く TCP_TIMEWAIT_LEN を変更してカーネルをリコンパイルして使っているという話を聞いたというもの。以下の様な議論を twitterで行い
Togetter: Linuxカーネルの「TCP_TIMEWAIT_LEN」変更は無意味?: http://togetter.com/li/871768
以下のように、スラドに転載されてしまったわけだ。
スラド: Linuxカーネルの「TCP_TIMEWAIT_LEN」変更は無意味?: http://linux.srad.jp/story/15/09/09/0648258/
いつものように、スラド民は元のスレッドなんかまるで読んでいないので、結論だけ書く。
tcp_tw_interval という TIME-WAIT を変更するsysctlが3年ほど前にupstreamで提案されたが却下されている。
http://thread.gmane.org/gmane.linux.network/244411/
その時の議論の抜粋
・AIXではtcp_timewait というパラメタで、HP-UXでは tcp_time_wait_interval というパラメタで同種の機能(TIME-WAIT変更)がサポートされている。Solarisにも同種の機能あり
・tcp_tw_reuse や tcp_tw_recycle がすでにあるのは知ってるが、NATでうまくいかない時もあるじゃないか
・SO_REUSEADDR使え
・tcp_tw_reuse 使え
・tcp_max_tw_buckets 使え
・early time-wait reuse は validだけど、TIME-WAITを短くするのはたんに危険なだけで意味がない
まだまだ知見を募集中なので、ユースケースとか意見とかありましたら教えて下さい
- 関連記事
-
- THPの記事にちょっと追記した (2015/09/10)
- Linuxカーネルの「TCP_TIMEWAIT_LEN」変更は無意味? の件について (2015/09/09)
- transparent hugepage considered harmful (2015/09/02)
現状、ありとあらゆるDBがTHPをdisableするよう推奨している。これはあんまり良い状況じゃないのでTHPを disabled by default に変えようという提案。
Ted Ts'o はデフォルトがenabledだから、パフォーマンスが良くなるケースが気づきにくいだけだろうと主張。まあ、そうだろうね。KVM hostとかだと anon ばっかりつかうし、guest OSでメモリ制限あるから、hostのreclaimは走らないしで、悪いケースになりにくそう。
Vlastimil Babka はそもそも page faultの延長で、コンパクション始めちゃうのがよくないので、デフォルトは今より less aggressiveであるべきという意見のようだ。
Googlerが今のままがいいと主張していて、エンタープライズ屋さんが変えたいという陣営なのかな。
http://www.spinics.net/lists/linux-mm/msg93357.html
As a general purpose sysadmin I've mostly struggled with its default being always, if it were never (or possibly madvise?) then I think all the very real performance problems would go away. Those who know they need it could turn it on. I have begun looking into asking the distros to change this (is it a distro choice?) but am not getting that far. Just to be clear the default of always causes noticeable pauses of operation on almost all databases, analogous to having a stop the world gc.
As for THP in APU type applications have you run into any JEMalloc defrag performance issues? My research into THP issues indicates this is part of the performance problem that manifests for databases.
Some more links to discussion about THP:
Postgresql https://lwn.net/Articles/591723/
Postgresql http://www.postgresql.org/message-id/[email protected]
Mysql (tokudb) https://dzone.com/articles/why-tokudb-hates-transparent
Redis http://redis.io/topics/latency http://antirez.com/news/84
Oracle https://blogs.oracle.com/linux/entry/performance_issues_with_transparent_huge
MongoDB http://docs.mongodb.org/master/tutorial/transparent-huge-pages/
Couchbase http://blog.couchbase.com/often-overlooked-linux-os-tweaks
Riak http://underthehood.meltwater.com/blog/2015/04/14/riak-elasticsearch-and-numad-walk-into-a-red-hat/
※ 追記
Hadoop界隈でもdisable必須らしい。shiumachiさん、ありがとう。
https://twitter.com/shiumachi/status/639265740713885696
※ このあとTHP作者の Andrea Arcangeli の反論が投稿されてて結構おもしろかったので抜粋
・OracleがTHPで性能かわるはずねーだろ。Oracle SGAは1GB hugetlbfsを使うようデザインされてるんだぞ。
Oracleがへんな推奨だしてるのはunbreakable Linuxがバグってるだけだろ
・redisではたしかにTHPは問題がある。redisはsnapshotを取るためにfork()を使うが、このスナップショットをとっている
最中に親(元々のプロセス)がメモリに書き込みを行うと2MBのアロケーション+2MBのメモリコピー(4MBのメモリアクセス)
が発生する。これは4KBのアロケーション+コピーよりペナルティがはるかに大きい。
しかし、これはredisが userfaultfd を使うようにすれば解決する(※ するわけねーだろ)
・いくつかのalternative malloc(※ jemallocのこと)は積極的にMADV_DONTNEEDを使うので、このタイミングでページが
4kにバラされてしまい、またallocateしたあとで、2MBにするためにコンパクション走るために遅くなる。これは
alternative mallocが明示的にMADV_NOHUGEPAGE を呼ぶことにより解決できる
(※ mallocでdisableしちゃったら、システムでdisableするのとあんまり変わらないと思うぞ。と心のなかでツッコミ)
・みながTHP問題という場合、たいていは実際にはcompactionの性能問題である。その場合
echo madvise >/sys/kernel/mm/transparent_hugepage/defrag
として、compactionを走らなくさせることにより劇的に改善する
- 関連記事
-
- Linuxカーネルの「TCP_TIMEWAIT_LEN」変更は無意味? の件について (2015/09/09)
- transparent hugepage considered harmful (2015/09/02)
- sosreportで OpenStackのログ (2015/07/20)
めも。
sosreportでOpenStackのログを収集できるが、
sosreport --enable-plugins=openstack_ceilometer,openstack_cinder,openstack_glance,openstack_heat,openstack_horizon,openstack_keystone,openstack_nova,openstack_sahara,openstack_swift
のようなクソ長いオプションが必要。
rhos-log-collector はもはや推奨ではない。
- 関連記事
-
- transparent hugepage considered harmful (2015/09/02)
- sosreportで OpenStackのログ (2015/07/20)
- RHELのO_SYNCって面白い事になってるんだなあという話 (2014/10/21)