17

現在変更されている別の(非常に一般的に使用されている)アプリケーションの特定の動作に依存するソフトウェアがいくつかあり、現在の実装は実行可能ですが、最適とは言えません。

この変更は、特にパフォーマンス監視の分野で、他の多くのアプリケーションに影響を与えた可能性があると考えており、他の多くの潜在的な問題を改善すると思われる解決策を見つけました。

残念ながら、この解決策はカーネルの変更であり(比較的単純ですが、詰め込むと影響が大きくなります)、レビューのためにカーネルパッチを提出した経験はありません。

SOの誰かが実際にパッチを提出しましたか(すべての回答に感謝しますが、プロセスを経て失敗したものから最高のものが得られると思います)?あなたはそれを受け入れましたか(アランコックスらがSOにぶら下がっている可能性は何ですか)?

従うべき正しいプロセスは何ですか?Linusには、あなたが彼に届く前に通過することになっている保護者の幹部がいることを知っているので、私はLinusに電子メールを送信するつもりはありません。カーネルの特定のセクションの責任者を見つけるにはどうすればよいですか。

カーネルの世界で聞いたことのない人が貢献できると思うのは楽観的すぎるかもしれませんが、知りたいと思います。


詳細を編集:

この変更は、実際にはパフォーマンスのバグによるものではなく、プロセスの終了時に書き込まれる(現在の)プロセスアカウンティングエントリの改善(私の見解では)です。

Websphere App Server(ああ、IBM、彼らの小さな心を祝福する)はそれが行うことを変えました。JVMは、エントリが書き込まれるように定期的に終了し、それをチャージバックに使用できました。これで、JVMが数か月間放置されます。つまり、定期的にWASを強制的に停止しない限り、データをタイムリーに利用できなくなります。どういうわけか、IBMのソフトウェアグループが私たちのためにソフトウェアを修正するつもりはないと思います:-)。いずれにせよ、他の長期的なプロセスに役立つ機能かもしれないと私は信じています。

現在、タイプ3プロセスアカウンティングレコードは、プロセスの終了時に書き込まれます。私たちが見ているのは、プロセスがまだアクティブである間にタイプNレコードを定期的に書き込むメカニズムであり、最後の書き込み以降の数値を示します(または、これが初めて)。チャージバックまたはパフォーマンス監視アプリケーションは、タイプ3レコード(完全に変更されていない)または暫定タイプNレコードのいずれかを使用することを選択できます。現在の回避策は、特定のプロセスについて/ proc / PID / statを監視することですが、実際のプロセスアカウンティングとうまく統合されていないため、これは恐ろしい問題です。

頻繁である必要はありませんが(24時間で満足です)、現在プロセスexit()でのみ実行されている作業は、プロセスコンテキストスイッチで時折実行する必要があるため、パフォーマンスに影響を与える可能性があります。Linus et alは、コードの影響が大きい領域である可能性があるため、そのアイデアを好まない可能性があります(最後の書き込みから24時間経過したかどうかを確認する場合でも、書き込みが遅すぎる可能性があります)。

それでも、これまでのすべての回答に感謝します。数日お待ちください。ベストアンサーを受け入れます。

4

6 に答える 6

14

何よりもまず、パフォーマンスのバグ レポートに集中し、(反復可能なベンチマークを使用して) 適切に処理することで、少なくとも人々に問題を解決してもらうのに役立ちます。また、テスト後にパッチを送信しますが、すばらしいパッチが間違ったアプローチを使用している可能性があり、より良いパッチを作成する可能性があることに注意してください。または、単に素晴らしいかもしれませんが、受け入れられるには修正が必要かもしれません。それは、超人でも起こります. 個人的に誰かに電子メールを送ることは考えず、LKML または適切なサブシステム ML を参照してください。

カーネル開発者に連絡する前に、他のすべての回答と該当するすべての資料を読むことをお勧めします。また、SubmittingPatches の参考文献も読んでください。やり方を間違えると厳しいかもしれません。kernelnewbies IRC チャットは開始するのに適した場所です。なぜなら、環境があまりにも初心者のようである場合がある場合でも、彼らは確かに歓迎してくれるからです (よくわかりませんが、私はそこにあまり行ったことがありません)。

カーネルの世界で聞いたことのない誰かが貢献できると考えるのは楽観的すぎるかもしれませんが、知りたいです。

過度に楽観的ではありません。少なくともそれ自体ではありません。あなたのスキルを私は知らないので、あなたの意見を要約すると、あなたのパッチが修正なしで受け入れられるか、または適切なスキルに従って書かれている可能性は低いです。しかし、実際には、あなたのパッチが小規模なコミュニティに向けられている場合は、はるかに簡単になる可能性があります。

経験のある人 (つまり私) から、パッチの提出を検討する前に、問題と、それが他のアプリケーションに影響を与える理由について説明してください。「これによりパフォーマンスが向上する」などの考慮事項は、特にベンダーとして (漠然と) 認定されている場合、カーネル開発者には魅力的ではありません。

特に、次のようなステートメントは省略してください。

現在の実装を実行可能にしていますが、最適ではありません。

これにより、ほとんどの読者からすぐに「コードを修正する」という推奨事項が得られるためです。

既存のアプリケーション (あなたが作成したものではない) のパフォーマンスが影響を受ける場合、それは異なります。たとえば、Linus は、自分が書いたコードと自分がする必要がないという事実を誇りに思っていたとしても、そのコードは make の一部だったので、失敗したコードのカーネル パフォーマンスの修正にすぐに注意を払いました。その正確な修正。つまり、誰もが気にかけているアプリケーション、または欠点のないソリューションが必要です。だから、次のようなもの:

別の (非常に一般的に使用される) アプリケーションからの動作

そのアプリケーションの使用が不合理と見なされない限り、それは良いことです。

最後に、ソース コードを参照すると、関心のあるセクションを表示するように求められる可能性があります。コードに問題がある場合はライセンスの問題を検討し、迅速に回答したい場合は事前に解決してください。

ところで、これはそこでの私の経験の部分的な説明です: https://www.ohloh.net/accounts/Blaisorblade

必要に応じて、提案されたメールで直接支援するために私に連絡し、ディスカッションで私を CC で送ることができます。お忙しいとは思いますが、もう少しお時間を頂ければと思います:-)。

于 2009-01-12T08:43:33.820 に答える
13

LinuxカーネルのソースツリーでDocumentation/SubmittingPatchesを読んでみてください。

于 2009-01-12T07:44:46.293 に答える
4

大規模なプロジェクトでは、メイン ツリーにパッチを適用する最善の方法は、特定のコードを保守している担当者に連絡することです。そのため、Linux MAINTAINERS ファイルを調べて、変更したコードの正式なメンテナーが誰であるかを確認し、Linux カーネル SCM リポジトリを調べて、そのコードに最近取り組んだ開発者を見つけます。パッチが承認される可能性を高めるには:

  • パッチが理解しやすく、既存のコードとドキュメントの標準に従っていることを確認します。
  • あなたのパッチが何を達成するかを明確に説明してください。
  • 変更を適切な形式 (Linux の場合は diff -up の出力) で送信します。
  • パッチが最新のソフトウェア (Linux カーネル) バージョンに問題なく適用できる (そして機能する) ことを確認します。
  • 対処している問題と、パッチがそれを解決する方法の両方を示すテスト ケースを含めます。
  • 関係のない変更 (書式設定など) をコードに含めないでください。

既知のバグに対する小さな修正は、限界的または疑わしいユーティリティの新機能を導入する大規模なコード変更よりも、プロジェクトに組み込まれる可能性が高くなります。場合によっては、最初にプロジェクトの問題追跡データベースを通じてバグ レポートを提出し、次に特定の問題に対処するパッチを送信することをお勧めします。失望を避けるために、大きな変更を考えている場合は、コードを書く前に変更と提案された実装についてメンテナーと話し合うことをお勧めします。

于 2009-01-12T07:54:57.163 に答える
2

Documentation/SubmittingPatches を読んで、適切な MAINTAINER を見つけ、最も重要なこととして、すべての議論が実際にどこで行われているかを発見してください。カーネルのメーリング リスト自体には含まれていない可能性がありますが、サブシステム ML には含まれている可能性があります。

次に、この ML にサブスクライブし、パッチを RFC として送信します。

あなたのパッチが侵略的かどうかはわかりませんが、それぞれに独自の説明を付けて、論理的な変更の列に分割してみてください。

于 2009-01-12T08:41:33.887 に答える
1

自分でカーネルパッチを送信しようとしたことはありませんが、この領域にドキュメントがありません。

しかし、このページはあなたを正しい方向に向けることができるように見えます。

于 2009-01-12T07:41:48.017 に答える
1

EDITでは、例として答えが興味深いかもしれません。あなたの要件は完全に合理的だと思いますが、コンテキスト スイッチのテストでさえコストがかかりすぎる可能性があることは間違いありません。しかし、カーネルにはタイマーの実装があるため、それを使用してそれを回避できない理由がわかりません。したがって、確かに、機能強化のリクエストを提案するのが最も安全な方法です。パッチの代わりにバグレポートを送信するよう提案することが非常に適切だったことに驚いています。パッチを提出したい場合は、タイマーを自分で使用するようにパッチを自分で変更することもできますが、それでも議論の準備ができています :-) 「ローカルの修正がありますが、コンテキストスイッチの高速パスにいくつかのテストが追加されます」と追加することもできます。 、そのため、参照用にパッチが添付されていますが、適用しないでください。」自分のコードが悪いことがわかっている場合は、そのコードを断ります。

別の方法は、いくつかのベンチマークを実行して影響がないことを証明することですが、タイマーが実行可能である場合はコードがとにかく拒否されるか、自分でタイマー ソリューションを試すことです (より良い方法が存在する可能性があります)。カーネル スケジューラに使用するベンチマークを見つけます。CFS Ingo (または Kolivas の?) パッチに関する「最近の」スレッドを見て、それらのベンチマークを取得してください。

サポートについて言えば、カーネル開発者は、「Websphere App Server」自体が理不尽なことをするのであれば、たとえ IBM が資金を提供したものであっても気にしません。しかし、状況に関する私の限られた知識では、JVM を定期的にシャットダウンすることは意味がありません。これは、メモリ リークや不安定性を書き留める方法にすぎないため、現在の動作をサポートする必要があります。

于 2009-01-13T18:33:47.280 に答える