タグ付けされた質問 「linux-kernel」

このタグは、Linuxカーネル自体の内部について、特にカーネルのコンテキスト内で実行されるコード(カーネルモジュールやドライバーなど)についての質問に使用します。Linuxでのユーザー空間コードの記述に関する質問は通常、代わりに[linux]とタグ付けする必要があります。Linuxカーネルの内部は常に変化しているため、関心のある正確なカーネルバージョンを含めると役立ちます。

5
とは ":-!!" Cコードで?
/usr/include/linux/kernel.hにあるこの奇妙なマクロコードにぶつかりました。 /* Force a compilation error if condition is true, but also produce a result (of value 0 and type size_t), so the expression can be used e.g. in a structure initializer (or where-ever else comma expressions aren't permitted). */ #define BUILD_BUG_ON_ZERO(e) (sizeof(struct { int:-!!(e); })) #define BUILD_BUG_ON_NULL(e) ((void *)sizeof(struct …
1665 c  linux  macros  linux-kernel 

10
Linuxカーネルの可能性のある/可能性の低いマクロはどのように機能し、それらの利点は何ですか?
私はLinuxカーネルのいくつかの部分を調べていて、次のような呼び出しを見つけました。 if (unlikely(fd < 0)) { /* Do something */ } または if (likely(!err)) { /* Do something */ } 私はそれらの定義を見つけました: #define likely(x) __builtin_expect((x),1) #define unlikely(x) __builtin_expect((x),0) 最適化のためのものであることは知っていますが、どのように機能しますか?そして、それらを使用することでどのくらいのパフォーマンス/サイズの減少が期待できますか?そして、少なくともボトルネックコード(もちろん、ユーザー空間では)の面倒(そしておそらく移植性を失うこと)に値します。



3
最近のLinuxボックスが持つことができるオープンTCP接続の理論上の最大数はいくつですか
ハードウェアからの無限のパフォーマンスを想定して、Linuxボックスは> 65536のオープンTCP接続をサポートできますか? エフェメラルポートの数(<65536)により、1つのローカルIPから1つのリモートIP上の1つのポートへの接続数が制限されることを理解しています。 タプル(ローカルIP、ローカルポート、リモートIP、リモートポート)は、TCP接続を一意に定義するものです。これは、これらのパラメータの1つ以上が空いている場合、65Kを超える接続をサポートできることを意味します。たとえば、複数のローカルIPから複数のリモートホスト上の単一のポート番号への接続。 システムに別の16ビット制限はありますか?おそらくファイル記述子の数は?

4
LinuxでのTCP / IP接続の最大数の増加
サーバーをプログラミングしていますが、接続数を「無制限」に設定しても帯域幅が飽和しないため、接続数が制限されているようです。 Ubuntu Linuxボックスが一度に開くことができる接続の最大数を増加または排除するにはどうすればよいですか?OSはこれを制限しますか、それともルーターまたはISPですか?それとも別のものですか?

6
Linuxが一体型カーネルと呼ばれるのはなぜですか?
Linuxは一体型のカーネルだと私は読んだ。モノリシックカーネルとは、完全なカーネルコードをコンパイルして実行可能ファイルにリンクすることを意味しますか? Linuxがモジュールをサポートできる場合、すべてのサブシステムをモジュールに分割し、必要に応じてそれらをロードしてみませんか?その場合、カーネルは最初にすべてのモジュールをロードする必要はなく、モジュール内の関数のインデックスを維持し、必要に応じてそれらをロードすることができます。

4
Linux OOMキラーによって強制終了されたプロセスを見つける
Linuxがメモリ不足(OOM)になると、OOMキラーはいくつかのヒューリスティックに基づいて強制終了するプロセスを選択します(興味深い記事です:http : //lwn.net/Articles/317814/)。 OOMキラーによって最近強制終了されたプロセスをプログラムで判別するにはどうすればよいですか?

2
Linuxで時間を測定する-時間vsクロックvs getrusage vs clock_gettime vs gettimeofday vs timespec_get?
タイミング機能のうち、time、clock getrusage、clock_gettime、gettimeofdayとtimespec_get、私は彼らが実装されている方法を明確に理解したいとどのような状況で、私はそれらを使用する必要があります知っているために、その戻り値がどのようなもの。 まず、壁時計の値を返す関数を、プロセスまたはスレッドの値を返す関数と比較して分類する必要があります。渡されたパラメーターに応じて、壁gettimeofday時計の値をclock_gettime返し、壁時計の値、プロセスまたはスレッドの値を返しますClock。プロセス値getrusageをclock返します。 次に、2番目の質問は、これらの関数の実装と、その結果としての正確さに関するものです。これらの関数が使用するハードウェアまたはソフトウェアのメカニズム。 getrusageカーネルティック(通常は1ミリ秒の長さ)のみを使用しているようです。その結果、ミリ秒よりも正確になることはありません。正しいですか?次に、getimeofday関数は利用可能な最も正確な基盤ハードウェアを使用しているようです。結果として、最近のハードウェアでは、その精度は通常マイクロ秒です(APIのためにそれ以上になることはありません)。何をclock、「近似」についてのmanページを話すが、それは何を意味するのでしょうか?何をclock_gettime、APIはナノ秒である、それは基礎となるハードウェアで許可されていれば、それはとても正確であることが可能だということを意味していますか?単調性はどうですか? 他の機能はありますか?
148 c  linux  time  linux-kernel 


5
Linuxで書き込みが失われる原因となるI / Oエラーに対処するプログラムを作成する
TL; DR:LinuxカーネルがバッファリングされたI / O書き込みを失った場合、アプリケーションがそれを見つける方法はありますか? fsync()耐久性のためにファイル(およびその親ディレクトリ)を使用する必要があることを知っています。問題は、I / Oエラーが原因で書き込み保留中のダーティバッファーがカーネルで失われた場合、アプリケーションはこれをどのように検出して回復または中止できるでしょうか。 書き込みの順序と書き込みの持続性が重要になるデータベースアプリケーションなどを考えてください。 書き込みを忘れましたか?どうやって? Linuxカーネルのブロックレイヤーは、状況によっては、などによって正常に送信されたバッファリングされたI / O要求を失う可能性があり、次のようなエラーが発生します。write()pwrite() Buffer I/O error on device dm-0, logical block 12345 lost page write due to I/O error on dm-0 (end_buffer_write_sync(...)およびend_buffer_async_write(...)をfs/buffer.c参照)。 新しいカーネルでは、エラーには代わりに「失われた非同期ページ書き込み」が含まれます。 Buffer I/O error on dev dm-0, logical block 12345, lost async page write アプリケーションwrite()は既にエラーなしで返されているので、アプリケーションにエラーを報告する方法はないようです。 それらを検出しますか? 私はカーネルソースにそれほど精通していませんが、非同期書き込みを行っている場合、書き出されなかったバッファーに設定されると思いますAS_EIO。 set_bit(AS_EIO, &page->mapping->flags); …
138 c  linux  linux-kernel  posix 

2
IOCTL Linuxデバイスドライバー[終了]
休業。この質問はもっと集中する必要があります。現在、回答を受け付けていません。 この質問を改善してみませんか?質問を更新して、この投稿を編集するだけで1つの問題に焦点を当てます。 昨年休業。 この質問を改善する 誰かが私を説明できますか、 なにIOCTL? 何に使うの? どうすれば使用できますか? と同じように機能する新しい関数を定義できないのはなぜIOCTLですか?

7
vmallocとkmallocの違いは何ですか?
kmallocメモリの連続した物理ブロックを取得することが保証されているので、私はググったところ、ほとんどの人がの使用を提唱していることがわかりました。ただし、kmalloc必要な連続した物理ブロックが見つからない場合、失敗する可能性もあります。 メモリの連続したブロックを持つことの利点は何ですか?具体的には、システムコールに連続した物理メモリブロックが必要なのはなぜですか?使用できない理由はありますか? 最後に、システムコールの処理中にメモリを割り当てる場合、指定する必要がありますか?システムコールはアトミックコンテキストで実行されますか?vmallocGFP_ATOMIC GFP_ATOMIC 割り当ては優先度が高く、スリープしません。これは、割り込みハンドラー、下半分、およびスリープできないその他の状況で使用するフラグです。 GFP_KERNEL これは通常の割り当てであり、ブロックされる可能性があります。これは、スリープしても安全なときにプロセスコンテキストコードで使用するフラグです。

3
カーネルスタックとユーザー空間スタック
カーネルスタックとユーザースタックの違いは何ですか?カーネルスタックを使用する理由 ローカル変数がISRで宣言されている場合、それはどこに格納されますか?各プロセスには独自のカーネルスタックがありますか?次に、プロセスはこれらの両方のスタック間でどのように調整しますか?

7
指摘されたファイルが移動または削除された場合、Linuxで開いているファイルハンドルはどうなりますか
指摘されたファイルがその間に取得されると、Linuxで開いているファイルハンドルはどうなりますか。 移動->ファイルハンドルは有効なままですか? 削除->これにより、無効なファイルハンドルを示すEBADFが発生しますか? 新しいファイルに置き換えられました->ファイルはこの新しいファイルをポイントしていますか? 新しいファイルへのハードリンクに置き換えられました->ファイルはこのリンクを「フォロー」しますか? 新しいファイルへのソフトリンクに置き換えられました->ファイルハンドルはこのソフトリンクファイルにヒットしますか? なぜ私はそのような質問をしているのですか?私はホットプラグされたハードウェア(USBデバイスなど)を使用しています。デバイス(および/ dev / file)がユーザーまたは別のGremlinによって再接続される可能性があります。 これに対処するためのベストプラクティスは何ですか?

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.