質問: linux i / oスケジューラーの選択 / sys/block/[disk]/queue/schedulerに書き込むことで、実行中のカーネル上の特定のデバイスのi/oスケジューラーを変更できると思われます。たとえば、私は自分のシステムで見ることができます:anon@anon:~$ cat /sys/block/sda/queue/scheduler noop anticipatory deadline [cfq] デフォルトは完全に公平なキューイングスケジューラです。私が思っているのは、カスタムカーネルに4つすべてのスケジューラを含めることに用途があるかどうかです。カーネルが適切なハードウェア用の適切なスケジューラー、特にフラッシュベースのドライブ用の「noop」スケジューラー、および従来のハードドライブ。これは事実ですか?
回答: これは、ブート時に「elevator」パラメータをカーネルコマンドラインに追加することで設定できます(grub.cfgなど)。例:elevator=deadline これにより、すべてのブロックデバイスの「期限」がデフォルトのi/oスケジューラになります。システムの起動後にスケジューラをクエリまたは変更する場合、または特定のブロックデバイスに対して別のスケジューラを使用する場合は、ツールioschedsetこれを簡単にします。 https://github.com/kata198/ioschedset archlinuxを使用している場合は、aurで入手できます。 https://aur.archlinux.org/packages/ioschedset 使用例:# get i/o scheduler for all block devices [username@hostname ~]$ io-get-sched sda: bfq sr0: bfq # query available i/o schedulers [username@hostname ~]$ io-set-sched --list mq-deadline kyber bfq none # set sda to use "kyber" [username@hostname ~]$ io-set-sched kyber /dev/sda must be root to set io scheduler. rerunning under sudo... [sudo] password for username: + successfully set sda to 'kyber'! # get i/o scheduler for all block devices to assert change [username@hostname ~]$ io-get-sched sda: kyber sr0: bfq # set all block devices to use 'deadline' i/o scheduler [username@hostname ~]$ io-set-sched deadline must be root to set io scheduler. rerunning under sudo... + successfully set sda to 'deadline'! + successfully set sr0 to 'deadline'! # get the current block scheduler just for sda [username@hostname ~]$ io-get-sched sda sda: mq-deadline 使い方は一目瞭然です。ツールはスタンドアロンであり、bashのみが必要です。お役に立てれば!編集:免責事項、これらは私が書いたスクリプトです。