Clock_nanosleep выдает непостоянную задержку во время пробуждения в системе RT, а также некоторые всплески до 1 мсLinux

Ответить Пред. темаСлед. тема
Anonymous
 Clock_nanosleep выдает непостоянную задержку во время пробуждения в системе RT, а также некоторые всплески до 1 мс

Сообщение Anonymous »

Я новичок в разработке rt C++ и прошу прощения, если упускаю что-то основное.
Я испытываю непостоянную задержку в системе реального времени, использующей clock_nanosleep для точного пробуждения. . Ожидается, что период пробуждения будет соответствовать интервалу 250 мкс, но фактическое время пробуждения колеблется в диапазоне +/- 10 мкс, а в некоторых случаях резко возрастает до 1 мс. Это происходит в системе с ядром Linux версии 5.14.0-533.el9.x86_64+rt.
Вот соответствующие подробности:

Код: Выделить всё

OS: Linux localhost.localdomain 5.14.0-533.el9.x86_64+rt #1 SMP PREEMPT_RT (RT patches enabled)
Thread Priority: 99 (real-time priority)
Hardware: x86_64 architecture
Треб создается с помощью следующего кода:

Код: Выделить всё

int thread_create_rt(std::thread &thandle, int stacksize, void *(*func)(void *), void *param)
{
int ret;
pthread_attr_t attr;
struct sched_param schparam;
pthread_t thread_id;
pthread_attr_init(&attr);
pthread_attr_setstacksize(&attr, stacksize);

cpu_set_t cpuset;
CPU_ZERO(&cpuset);
CPU_SET(0, &cpuset); // Assigning to core 0
pthread_attr_setaffinity_np(&attr, sizeof(cpu_set_t), &cpuset);

ret = pthread_create(&thread_id, &attr, func, param);
pthread_attr_destroy(&attr);

if (ret != 0) return 0;

memset(&schparam, 0, sizeof(schparam));
schparam.sched_priority = 99;
ret = pthread_setschedparam(thread_id, SCHED_FIFO, &schparam);

if (ret != 0) return 0;

thandle = std::thread([thread_id]() {
pthread_join(thread_id, nullptr); // Ensures the thread runs to completion
});

return 1; // Success
}

Цикл потока выглядит следующим образом:

Код: Выделить всё

while(1){
while(i < 240000){
clock_gettime(CLOCK_MONOTONIC, &startTime);
if (i == 0) {
clock_gettime(CLOCK_MONOTONIC, &tm);
std::cout 

Подробнее здесь: [url]https://stackoverflow.com/questions/79247855/clock-nanosleep-is-giving-out-inconsistent-latency-during-wakeup-in-rt-system-al[/url]
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Mock Instant.now() без использования Clock в конструкторе или без объекта Clock
    Anonymous » » в форуме JAVA
    0 Ответы
    46 Просмотры
    Последнее сообщение Anonymous
  • Как предотвратить непостоянную толщину и пробелы в линиях SVG?
    Anonymous » » в форуме CSS
    0 Ответы
    19 Просмотры
    Последнее сообщение Anonymous
  • Как правильно настроить LSTM с линейным слоем для обнаружения слов пробуждения
    Anonymous » » в форуме Python
    0 Ответы
    38 Просмотры
    Последнее сообщение Anonymous
  • Как заставить пул задач Python ждать события пробуждения
    Anonymous » » в форуме Python
    0 Ответы
    33 Просмотры
    Последнее сообщение Anonymous
  • Мысли об использовании пробуждения и брось для обычного потока [закрыто]
    Anonymous » » в форуме C#
    0 Ответы
    81 Просмотры
    Последнее сообщение Anonymous

Вернуться в «Linux»