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

Linuxカーネルお​​よびLinuxカーネル関連のトピックに関する質問。システムコール、カーネルのカスタマイズなどの実装の詳細。カーネルの詳細を含まないLinuxユーザー空間のトピックには、[linux]または配布タグの方が適しています。

1
Linuxカーネル構築プロセスの各ステップで何が起こりますか?
カスタムカーネルを構築し、それらのカーネルを使用してUbuntuを起動する方法について多くのチュートリアルを読んで、ガイドに従って正常に起動し、カスタムカーネルを起動しましたが、ガイドの各コマンドが何をし、実際に何が起こっているのか理解できません各コマンド。 上で説明した手順Ubuntuのサイトが持つ多くの作業を行いfakeroot、dpkg、make-kpkg、いくつかのinitramfs、および他の恐ろしいものに動作することはなく、単に私は何が起こっているかを理解する助けにはなりません。 makeLinuxカーネルディレクトリでの出力は何ですか? 「圧縮カーネルイメージ」を作成しますか? 「圧縮されたカーネルイメージ」ファイルの名前とその場所はどこですか? 何をmake modulesするの? make modules前または後に行う必要がありmakeますか? makeモジュールは自動的にビルドされませんか? 新しくビルドされたカーネルをブート可能なカーネルのリストに追加するプロセスは(コマンドのリストだけでなく、英語で)何ですか? 何をmake installするの? ウィルmake install私はより多くの何もする必要はありませんように、ブート可能なカーネルの私のリストに追加? 同等のものはありmake modules_installますか?

3
Linux:カーネルスペースのスレッド/プロセスのみを表示できますか?
プログラムには、ユーザー空間とカーネル空間の2つの「レベル」があることを知っています。 私の質問は次のとおりです。カーネルプログラムのみを表示したい、またはもっと良いのはカーネルスペースのプログラムを表示したいです このアプローチは正しいですか? ps -ef|grep "\[" root 1 0 0 20:23 ? 00:00:00 init [4] root 2 0 0 20:23 ? 00:00:00 [kthreadd] root 3 2 0 20:23 ? 00:00:00 [ksoftirqd/0] root 5 2 0 20:23 ? 00:00:00 [kworker/0:0H] root 7 2 0 20:23 ? 00:00:06 [rcu_sched] root 8 2 …

1
SATAはどのような意味でSCSIと「対話」しますか?SCSIとATAの間でどれくらいの量が共有されますか?
これは少なくとも私にとって新しいことではありません。SATAは実際にSCSIと「通信」するため、これらのSATAデバイスがLinuxでSCSIデバイスとして表示されるのはなぜですか。 関連する質問が以前に尋ねられました。たとえば、/ proc / scsi / scsiの下にSATAデバイスが表示されるのはなぜですか? ただし、これまでに説明したところで言及しなかったのは、SATAがSCSIとどのような意味で、どのように異なるかということです。 互換性のあるケーブルを共有していないため、物理層で異なることは当然と考えられます。 しかし、スタックの上位はどうでしょうか?Linuxは、SATAおよびSCSIサブシステムへの単なるSCSIとしての最新のカーネル上のIDEディスクを表すことを認識しています。しかし、バスで使用される実際のプロトコルはどうでしょうか? ATAPIはSCSIのカプセル化であることも知っていますが、通常のATAはどうですか?NCQ、FUA、DPOなどのSCSIの機能(間違って覚えていない場合)がSCSIから採用されていることに気付きました。しかし、実際にどのくらいのSCSIコマンドセットが共有されているか、類似しているのかは不明です。 ATA仕様の最新のSATAデバイスは、SCSIコマンドセットのサブセットを実装していますが、カプセル化されています(ATAPIのように)。同じセット?スーパーセット?または、選択された機能のみが直接同一ではないバリアントとして実装されているのでしょうか? これに関する明確な情報、特にLinuxカーネルとの関係はどこで見つけることができますか?ドライバー開発のためのある種のチュートリアルはいいでしょうが、すべての詳細を完全にスキップしない概要だけでも十分でしょう。私は実際の仕様を読むことができることを知っていますが、それもまた非常に詳細であり、あなたが本当に探しているものを見つけるのは難しく、私やおそらく一時的な意味で他のほとんどのユーザーにとっては現実的ではありません。

1
このglibc問題を回避する最良の方法は何でしょうか?
私は、ファイル機能を使用して、setuid-rootバイナリ(たとえば/bin/ping、CAP_NET_RAWなど)の必要性のほとんどを排除するGentoo Hardenedボックスを管理しています。 実際、私が残した唯一のバイナリはこれです: abraxas ~ # find / -xdev -type f -perm -u=s /usr/lib64/misc/glibc/pt_chown abraxas ~ # setuidビットを削除するか、ルートファイルシステムを再マウントするnosuidと、sshdとGNU Screenが動作を停止しますgrantpt(3)。これらはマスターの擬似端末を呼び出し、glibcはこのプログラムを実行してスレーブの擬似端末をchownおよびchmodする/dev/pts/ためです。失敗します。 問題は、grantpt(3)Linuxの場合、devptsファイルシステムがマウントされていると、そのようなヘルパーバイナリは不要であると明示的に記載されているマンページです。カーネルは、スレーブのUIDとGIDを、/dev/ptmx(呼び出しによりgetpt(3))開いたプロセスの実際のUIDとGIDに自動的に設定します。 これを示すために、小さなサンプルプログラムを作成しました。 #include <string.h> #include <sys/types.h> #include <sys/stat.h> #include <stdlib.h> #include <stdio.h> #include <unistd.h> int main(void) { int master; char slave[16]; struct stat slavestat; if ((master = getpt()) < 0) { …

4
システムの残りをそのままにしてLinuxカーネルを更新する
私はOpenBSDユーザーです。ではOpenBSDのよくある質問、それは言います: OpenBSDは完全なシステムであり、同期を保つことを目的としています。カーネルとユーティリティを別々にアップグレードすることはできません。 システムをアップグレードすると、一度にアップグレードできます。カーネルとベースシステムが置き換えられます。次に、サードパーティのパッケージを更新します。sourceからコンパイルする場合は、カーネルを再コンパイルして起動します。次に、ベースシステムを再構築してから、インストールしたパッケージを再構築します。すべてを最後に再構築してから数週間/月以上経過している場合、最初にスナップショットをインストールしてそこから再構築します(最新のCVSブランチをフォローしている場合)。 同期していないカーネル、ベースシステム、サードパーティのパッケージがあると、潜在的な問題の原因になり、公式メーリングリストからの真剣なヘルプを得ることができなくなります。 これで大丈夫です。実際、これがOpenBSDを使用する理由の1つです。これにより、システムが一貫したユニットになり、精神的な概要を簡単に形成できます。 Linux上ではどんな感じですか?私が知っているほとんどのLinuxには、BSDと同じ意味での「ベースシステム」はありませんが、ディストリビューションプロバイダーによってアセンブルされたパッケージのコレクションがあります。その後、ローカル管理者によって追加のソフトウェアが追加され、最初から存在していたものと後で追加されたものとの境界がせいぜいぼやけているようになります。 Linux(一般的に)は、ユーザー空間への強力なカーネル結合を持っていませんか? カーネルは、私が知る限り、他のソフトウェアパッケージと同様に更新されますが、これが可能であることを少し混乱させます。さらに、カスタムカーネル(OpenBSDでは推奨されていません)をコンパイルし、ブートメニューにさまざまなカーネルバージョンがリストされていることもあります。 Linuxシステムのさまざまなサブシステムが互いに独立して更新されている場合でも、だれが、またはどのようなサブシステムが互いに協力できることを保証しますか? 私が尋ねている理由は、このサイトの別のユーザーが、自分のLinuxシステムのカーネルを新しいバージョンに置き換えることができるかどうかを尋ねたからです。物事のOpenBSD側から来ると、はい、これがシステムを壊さないことが保証されるとは言えませんでした。 上記の「Linux」は、「Linuxディストリビューション」、カーネル+ユーティリティの省略形として使用しています。

2
LinuxはWindowsと比較してデフォルトでバッテリー寿命が短いのはなぜですか?
Linuxオペレーティングシステムに固有の何かがあり、デフォルトでバッテリー電力の管理者を貧弱にしますか?Lubuntuのような軽いディストリビューションは、Windowsよりもバッテリー寿命の面で明らかに有利であると思っていましたが、そうではないようです。ハードウェアベンダーの問題ですか?ラップトップはWindows OSでより効率的に動作するように設計されていますか? たとえば、同じラップトップでの私の経験では、特定のLinuxディストリビューションは常にWindowsと比較してバッテリー寿命が短いようです。私の古いラップトップ(Thinkpad X61)は、Lubuntuを起動したときの長さがWindows XPを使用したときの約半分になりました。新しいモデルでは、Fedora 20とWindows 8.1を使用した場合、同様のパフォーマンスが低下します。


1
CFSのCPU使用率が高いですか?
私は尋ねた前の質問を、私はそれはそれは、カーネル内のCFSによって引き起こされていることを示していると思われるためにしたことを分析はRHEL 6にRHEL 5からアプリケーションを移動するときに試してみて、CPUの使用率の増加の原因を隔離します。これが事実かどうかを確認するためのテストアプリケーションを作成しました(元のテストアプリケーションはサイズ制限に合わせて削除されましたが、まだgit repoで利用可能です)。 RHEL 5で次のコマンドを使用してコンパイルしました。 cc test_select_work.c -O2 -DSLEEP_TYPE=0 -Wall -Wextra -lm -lpthread -o test_select_work その後、Dell Precision m6500で、反復あたりの実行時間が約1ミリ秒になるまでパラメーターを試しました。 RHEL 5で次の結果が得られました。 ./test_select_work 1000 10000 300 4 time_per_iteration: min: 911.5 us avg: 913.7 us max: 917.1 us stddev: 2.4 us ./test_select_work 1000 10000 300 8 time_per_iteration: min: 1802.6 us avg: 1803.9 …

5
Linuxのバッファキャッシュのサイズを制限する
Linuxカーネルにバッファキャッシュに特定の割合のメモリのみを使用するように指示する方法はありますか?私/proc/sys/vm/drop_cachesは一時的にキャッシュをクリアするために使用できることを知っていますが、例えばメインメモリの50%以上に成長するのを防ぐ永続的な設定はありますか? これを行う理由は、ディスクからのデータを常に提供し、数時間以内に物理メモリ全体をバッファキャッシュとして使い果たすCeph OSDを実行しているサーバーがあるためです。同時に、大量(数十GB)の物理メモリを割り当てるアプリケーションを実行する必要があります。一般的な信念に反して(バッファキャッシュに関するほぼすべての質問に与えられたアドバイスを参照)、クリーンキャッシュエントリを破棄してメモリを自動的に解放することは瞬時ではありません:バッファキャッシュがいっぱいになると、アプリケーションの起動に最大1分かかることがあります( *)キャッシュをクリアした後(を使用echo 3 > /proc/sys/vm/drop_caches)、同じアプリケーションがほぼ瞬時に起動します。 (*)この1分間の起動時間中、アプリケーションは新しいメモリに障害が発生しますが、Vtuneによると呼ばれる関数によると、その時間の100%がカーネルで費やされますpageblock_pfn_to_page。この機能は、巨大なページを見つけるために必要なメモリ圧縮に関連しているようで、実際に断片化が問題であると考えさせられます。

4
eth0という名前の仮想イーサネットインターフェイスを作成できますか?
Linux 3.10.5-1カーネルに基づいてArchを実行しています。システムは、イーサネットインターフェースenp * s *やwlp *などの新しい事実上の命名規則を使用します。しかし、私の教育機関はMaple 17と呼ばれるプログラムを使用しているため、これは問題です。Mapleのライセンスシステムは、ライセンスを検証するためにMACアドレスを取得する必要があるため、eth0という名前のインターフェイスの存在に依存しています。それは悪い解決策ですが、私はそれを回避する必要があります。 つまり、必ずしも動作する必要のないMACアドレス(新しいMACアドレスの新しいライセンスファイルを取得できるため)を持つeth0インターフェイスが必要になります。実際、常にダウンしている必要があります。この問題を解決する方法はいくつかあると思いますが、アイデアについては何も見つかりませんでした。 接続なしでアダプターを作成する eth0という名前のenp3s0のエイリアスの作成 enp3s0またはループバックインターフェイスの名前を変更します。 私が見つけることができたものは、新しい規約への変更と古いバージョンのudevでの変更のみをカバーしていました。とにかく、RHELとSuSeでしか機能しませんでした。私は運なしでそれを試しました。(persistent-net-names.rulesとnet-name-slot.rules、どちらも実際のインターフェイスが機能しなくなり、WLANインターフェイスが消えただけです)

1
/ devにdevtmpfsを使用する
カーネルに次のオプションがあることに気付きました:CONFIG_DEVTMPFS Device Drivers -> Generic Driver Options -> Maintain devtmpfs to mount at /dev そして、Debianディストリビューションカーネルでデフォルトで有効になっていることがわかります 3.2.0-4-amd64 このオプションがもたらす違いを理解しようとしています。このオプションを指定しないと、/devとして実装されているtmpfsこのオプションを指定して、それは次のように実装されています、devtmpfs。それ以外は、違いは見当たりません。 helpいずれかの私のためにそれを明確にしませんでした。 これにより、起動時に早い段階でtmpfs / ramfsファイルシステムインスタンスが作成されます。このファイルシステムでは、カーネルドライバーコアは、割り当てられたメジャー/マイナー番号を持つすべての登録済みデバイスのデフォルト名とアクセス許可でデバイスノードを維持します。 完全に機能する/ devディレクトリを提供します。通常は、udevが最上位で実行され、権限を管理し、意味のあるシンボリックリンクを追加します。 非常に限られた環境では、それ以上のヘルプなしで十分な機能/ devを提供する場合があります。また、シンプルなレスキューシステムが可能になり、動的なメジャー/マイナー番号を確実に処理します。 誰かが使用CONFIG_DEVTMPFSと標準の違いを説明してもらえ/devますか?


4
Gitコミットハッシュが与えられた場合、どのカーネルリリースに含まれているかを調べる方法は?
公式のLinux gitリポジトリへの最近のパッチによって修正された問題があると仮定します。回避策はありますが、修正が含まれているリリースが発生したときに元に戻したいと思います。正確なgitコミットハッシュ、たとえばf3a1ef9cee4812e2d08c855eb373f0d83433e34cを知っています。 質問に答える最も簡単な方法は何ですか:これまでにどのカーネルリリースがこのパッチを含んでいますか?ローカルLinux gitリポジトリが必要ない場合のボーナスポイント。 (LWMではいくつかのアイデアについて説明していますが、これらにはローカルリポジトリが必要です。)

4
Linux Kernel> 3.0に障害のあるディスクを完全に無視するように指示する方法は?
私は、バス上の一台のSATAハードディスクと三星ラップトップ(クロノスS7)を有するata:1として検出され、/dev/sda上に8G SSDをata:2、/dev/sdbSATAインターフェースの残りの部分に、および様々な他のデバイス。 問題は、SSDディスクが メインボードにはんだ付け(移動不可) 破壊された(すべての操作でI / Oエラーが発生する) BIOSには表示されません(おそらく壊れているため) 今、このディスク: 障害のあるディスクの調査を試みるブートを3〜5分遅らせますが、これは迷惑です。 しかし、最も厄介なのは、システムが失敗したために中断/dev/sdbできないことです。 起動時の遅延に耐えることができることに注意してください---私が心配しているのは、再開/一時停止のことです。 質問は次のとおりです: ata:2でデバイスをプローブすることさえ避けるようにカーネルに指示できますか? 古いカーネル(<3.0)では、まだソースを少し掘り下げることができたが、hdb=ignoreそのトリックを実行するスタイルのコマンドラインパラメーターがありました。 私はすべてして以下に提案トリックしようとしているudevとlibata:force無駄に、カーネルパラメータを。具体的には、以下は機能しません。 次/etc/udev/rules.d/のファイルの1つに追加する(初期実行のように、00-ignoredisk.rulesまたは後期99-ignoredisk.rulesまたはその両方で) SUBSYSTEMS=="scsi", DRIVERS=="sd", ATTRS{rev}=="SSD ", ATTRS{model}=="SanDisk iSSD P4 ", ENV{UDISKS_IGNORE}="1" また KERNEL=="sdb", ENV{UDISKS_IGNORE}="1" また、多くの中間ソリューション---これにより、ブート後にディスクにアクセスできなくなりますが、ブート時にプローブされ、サスペンド時にチェックされます---サスペンドが失敗します。 システムファイルを編集する/lib/udev/rules.d/60-persistent-storage.rules(そしてudisks、udisks2)変更 KERNEL=="ram*|loop*|fd*|nbd*|gnbd*|dm-|md", GOTO="persistent_storage_end" に KERNEL=="ram*|loop*|fd*|nbd*|gnbd*|dm-|md|sdb*", GOTO="persistent_storage_end" 繰り返しになりますが、これはユーザー空間からディスクをマスクする何らかの効果がありますが、ディスクはまだカーネルに見えます。 すべての可能な組み合わせでのブート(だけでなく、それらの多く)のlibata:force(例えば見つけパラメータここ無効DMA、低速または任意の障害が発生したディスクについて---動作しないために)。パラメーターは使用されますが、ディスクは引き続きプローブされ、失敗します。 http://paste.ubuntu.com/6186145/に完全udevadm info -a -n /dev/sdb貼り付け smartctl -i /dev/sdb -T permissive 与える: root@samsung-romano:/home/romano# …

3
Debian Linuxがプロセスごとに最大128TiBの仮想アドレス空間を許可するのに64TiBの物理メモリしか許可しないのはなぜですか?
私はちょうどここを読んでください: プロセスあたり最大128TiBの仮想アドレス空間(2GiBではなく) 4GiB(またはPAE拡張を備えた64GiB)の代わりに64TiB物理メモリをサポート 何故ですか?つまり、物理メモリのサポートはカーネルまたは現在のハードウェアによって制限されていますか? 実際にアドレス指定できる物理メモリの2倍の仮想メモリ空​​間が必要なのはなぜですか?

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