Translated message

A translation of this page exists in English.

Warning message

This translation is outdated. For the most up-to-date information, please refer to the English version.

リアルタイムスケジューリングを必要とするプロセスが "sched_setscheduler: Operation not permitted" エラーまたは同様のエラーで失敗する

Solution Verified - Updated -

Environment

  • Red Hat Enterprise Linux (RHEL) 7
  • Red Hat Enterprise Linux 8
    • systemd

Issue

  • リアルタイムスケジューリングを取得しようとするサービスが起動に失敗し、SCHED_RR パラメーターを指定して sched_setscheduler syscall を呼び出すと、サービス実行可能ファイルの straceEPERM (Operation not permitted) エラーを表示します。

    # strace <program> 2>&1 >/dev/null | grep sched_setscheduler
    sched_setscheduler(0, SCHED_RR, { 99 }) = -1 EPERM (Operation not permitted)
    
  • リアルタイムスケジューリングを取得するサービスは起動時に正常に開始されますが、再起動に失敗し、通常は上記のエラーメッセージが表示されます。

  • リアルタイムプロセススケジューリングを使用する Oracle RAC またはその他のアプリケーションは失敗しますが、cgclear の実行後に問題なく実行されます。

Resolution

  • 診断手順 セクションの指示に従い、これに一致する場合は先に進みます。

  • 詳細記事 How to configure a RHEL 7 system to be able to run programs requiring Real-Time Scheduling を読んで、提案されたソリューションのいずれかを要件に応じて選択してください。

  • Insights-client パッケージがインストールされていて、Red Hat Enterprise Linux 7 で問題が発生している場合は、yum、rpm などを使用して insights-client パッケージを削除してください。

Root Cause

  • リアルタイムスケジューリングを取得するサービスが起動時に正常に開始され、その後再起動に失敗した場合の原因は、以下のいずれかになります。

    • CPU Accounting が起動時に部分的に有効化されている (つまり、/etc/systemd/system.conf では有効化されているが、initramfs では有効化されていない)
    • サービスがリアルタイムスケジューリングを取得した後に開始されるサービスによって、実行時に CPU Accounting が有効化されている
  • システムの再起動後、リアルタイムスケジューリングを取得するサービスが起動時に開始されない場合の原因は、以下のいずれかになります。

    • 再起動前に CPU Accounting が起動時に明示的に有効化された
    • 再起動前に開始されなかったサービスが、暗黙的または明示的に CPU Accounting を有効化するようになった
  • insights-client の場合、アプリケーションのユニットファイルに CPUQuota=30% が含まれていたため、上記の記事で説明されている動作がトリガーされました。これはその後変更されました。

Diagnostic Steps

  • systemdcpu および cpuacct CGroup コントローラーを使用していることを確認します。

    # ls -d /sys/fs/cgroup/{cpu,cpuacct}/*.slice
    ls: cannot access /sys/fs/cgroup/cpu/*.slice: No such file or directory
    ls: cannot access /sys/fs/cgroup/cpuacct/*.slice: No such file or directory
    

    上記の例では、systemd は現在 cpu および cpuacct CGroup コントローラーを使用していません。
    このような場合、直面している問題はこのソリューションでは処理されません。

    # ls -d /sys/fs/cgroup/{cpu,cpuacct}/*.slice
    /sys/fs/cgroup/cpuacct/system.slice    /sys/fs/cgroup/cpu/system.slice
    /sys/fs/cgroup/cpuacct/user.slice      /sys/fs/cgroup/cpu/user.slice
    

    上記の例では、systemd は現在 cpu および cpuacct CGroup コントローラーを使用しています。
    これは、起動時または実行時に CPU Accounting が有効になっている場合に発生します。
    先に進んでください。

  • 起動時に CPU Accounting が有効となるように systemd が設定されているかどうかを確認します。

    # grep ^DefaultCPUAccounting= /etc/systemd/system.conf
    DefaultCPUAccounting=yes
    

    上記の例では、起動時に CPU Accounting が有効になっています。そうでない場合は、次の診断ステップに直接進みます。

    健全性テストとして、起動された initramfs が起動時に CPU Accounting も設定していることを確認します。そうしないと、予期しない動作が発生する可能性があります。

    # lsinitrd /boot/initramfs-$(uname -r).img /etc/systemd/system.conf | grep ^DefaultCPUAccounting=
    

    上記の例では、システム上と initramfs 内の /etc/systemd/system.conf ファイルが同期されていないため、予期しない動作が発生する可能性があります。
    そのような場合は、initramfs を再度ビルドしてください。

    # dracut -f /boot/initramfs-$(uname -r).img $(uname -r)
    

    CPU Accounting は起動時に有効になっているため、解決策 セクションに直接進んでください。

  • systemd が実行時に CPU Accounting を有効にした理由を調べます。

    起動時に CPU Accounting が無効になっている場合でも、起動中のユニットが CPU* プロパティー (CPUAccounting=yes または CPUQuota=<value> など) を使用すると、systemd が自動的に有効化することがあります (完全なリストについては、systemd.resource-control man ページを参照してください)。
    Delegate=yes を指定すると、CPU アカウンティングも有効になることに注意してください。

    どのユニットが systemd で CPU アカウンティングを有効にしたかを調べるには、次のコマンドを実行します。

    # egrep -ri "^(Startup)?CPU.*=(.*%|1|yes|true|on)" /usr/lib/systemd/system /etc/systemd/system
    /etc/systemd/system/mariadb.service.d/quota.conf
    CPUQuota=20%
    

    上記の例では、mariadb.service ユニットへのカスタムドロップインは、CPUQuota を使用するため、暗黙的に CPU Accounting を有効化しています。

    暗黙的または明示的に CPU Accounting を有効化するサービスを開始すると、実行時に CPU Accounting が有効になるため、解決策 セクションに進みます。

  • このステップに到達した場合、このソリューションでは対処できない何らかの不明な理由により、CPU Accounting が有効になっています。Red Hat サポート担当者にお問い合わせください。

This solution is part of Red Hat’s fast-track publication program, providing a huge library of solutions that Red Hat engineers have created while supporting our customers. To give you the knowledge you need the instant it becomes available, these articles may be presented in a raw and unedited form.

Comments