2

以下のコード (-lpthread でコンパイル) をマルチコア システム (Ubuntu 11.04 x86-32) で実行すると、単に SCHED_FIFO スレッドが生成されてスリープ状態になるだけで、奇妙な動作が表示されます。キーを押すと、うまくエコーアウトします。ただし、キーを押したままにするとプロセスがハングし、ハード リブートが必要になります (ソフト リブートは kill -9 と同様にハングします)。telnet セッションを介して同じことを行うと、問題なく動作します。

#include <sched.h>
#include <pthread.h>
#include <assert.h>

void* schedtest_busy_wait_thread_entry(void *arg)
{
    struct sched_param sp;

    sp.__sched_priority = sched_get_priority_min(SCHED_FIFO);
    assert(sched_setscheduler(0, SCHED_FIFO, &sp) == 0);
    while (1);
    return NULL;
}

int main(int argc, char **argv)
{
    pthread_t thread_id;

    assert(pthread_create(&thread_id, NULL, schedtest_busy_wait_thread_entry, NULL) == 0);
    while (1) sleep(1);
    return 0;
}

明らかに、これは非常に大規模で複雑なシステムの抜粋にすぎません。このシステムでは、SCHED_FIFO スレッドをハードコーディングしてビジー状態で待機する必要がありますが、これと同じ動作を示します。/proc/sys/kernel/sched_rt_runtime_us はデフォルトの 950000 です。

ポインタはありますか?

4

0 に答える 0