<?xml version="1.0" encoding="utf-8"?>
<feed xml:lang="en" xmlns="http://www.w3.org/2005/Atom"><title>Recent posts to Isolate CODESYS runtime to a single core</title><link href="https://forge.codesys.com/forge/talk/Runtime/thread/65a5a0651f/" rel="alternate"/><link href="https://forge.codesys.com/forge/talk/Runtime/thread/65a5a0651f/feed.atom" rel="self"/><id>https://forge.codesys.com/forge/talk/Runtime/thread/65a5a0651f/</id><updated>2021-10-17T22:29:36.306000Z</updated><subtitle>Recent posts to Isolate CODESYS runtime to a single core</subtitle><entry><title>Isolate CODESYS runtime to a single core</title><link href="https://forge.codesys.com/forge/talk/Runtime/thread/65a5a0651f/?limit=25#b195/9cf3/b0fc/651b" rel="alternate"/><published>2021-10-17T22:29:36.306000Z</published><updated>2021-10-17T22:29:36.306000Z</updated><author><name>autojay</name><uri>https://forge.codesys.com/u/autojay/</uri></author><id>https://forge.codesys.com672085a972428b8ee3600d9c9333e602f0019149</id><summary type="html">&lt;div class="markdown_content"&gt;&lt;p&gt;I'm using the single core CODESYS version. Doesn't that mean the interrupt will also occur in the same core?&lt;/p&gt;&lt;/div&gt;</summary></entry><entry><title>Isolate CODESYS runtime to a single core</title><link href="https://forge.codesys.com/forge/talk/Runtime/thread/65a5a0651f/?limit=25#b195/9cf3" rel="alternate"/><published>2021-10-15T03:04:28.659000Z</published><updated>2021-10-15T03:04:28.659000Z</updated><author><name>autojay</name><uri>https://forge.codesys.com/u/autojay/</uri></author><id>https://forge.codesys.comd1ca96568818d60470cfc36da0185a4c29b0b82d</id><summary type="html">&lt;div class="markdown_content"&gt;&lt;p&gt;Thanks😄! Does this mean that if you use IRQBALANCE_BANNED_CPUS command, CODESYS would not be able to handle any interrupt events of the controller?&lt;/p&gt;&lt;/div&gt;</summary></entry><entry><title>Isolate CODESYS runtime to a single core</title><link href="https://forge.codesys.com/forge/talk/Runtime/thread/65a5a0651f/?limit=25#b195" rel="alternate"/><published>2021-10-14T15:18:11.755000Z</published><updated>2021-10-14T15:18:11.755000Z</updated><author><name>mondinmr</name><uri>https://forge.codesys.com/u/mondinmr/</uri></author><id>https://forge.codesys.com04d86e07f7fd36c8ec921db30b3663d30452b72f</id><summary type="html">&lt;div class="markdown_content"&gt;&lt;p&gt;I make a little path to /etc/init.d/codesyscontrol&lt;/p&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="err"&gt;  ....&lt;/span&gt;
&lt;span class="err"&gt;    do_status&lt;/span&gt;
&lt;span class="err"&gt;    if [ $? -eq 0 ]; then&lt;/span&gt;
&lt;span class="err"&gt;        rm $PIDFILE&lt;/span&gt;
&lt;span class="err"&gt;        echo "Error: Failed to start codesyscontrol"&lt;/span&gt;
&lt;span class="err"&gt;        exit 1&lt;/span&gt;
&lt;span class="err"&gt;    else&lt;/span&gt;
&lt;span class="err"&gt;        PID=$(cat $PIDFILE)&lt;/span&gt;
&lt;span class="err"&gt;        taskset -p 1 $PID &amp;gt;&amp;gt;/root/codelog.txt&lt;/span&gt;
&lt;span class="err"&gt;        renice -n -20 -p $PID &amp;gt;&amp;gt;/root/codelog.txt&lt;/span&gt;
&lt;span class="err"&gt;        tuna --threads $PID --priority=RR:99&lt;/span&gt;
&lt;span class="err"&gt;        IRQBALANCE_BANNED_CPUS=3 irqbalance --foreground --oneshot&lt;/span&gt;
&lt;span class="err"&gt;        echo 0 &amp;gt; /proc/sys/kernel/numa_balancing&lt;/span&gt;
&lt;span class="err"&gt;        echo never &amp;gt; /sys/kernel/mm/transparent_hugepage/enabled&lt;/span&gt;
&lt;span class="err"&gt;        echo 0 &amp;gt; /sys/kernel/mm/ksm/run&lt;/span&gt;
&lt;span class="err"&gt;        echo "codesyscontrol started"&lt;/span&gt;
&lt;span class="err"&gt;    fi&lt;/span&gt;
&lt;span class="err"&gt;   ....&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;I use a RT preempt patched kernel. (Starting from 5.15 no more patch are needed, RT is merged in mainline and you need only configure and rebuild) &lt;br/&gt;
- taskset move codesys to core 1 (You can select core for runtime from Task Group in  Task configuration)&lt;br/&gt;
- renice set nice level to its maximum (-20)&lt;br/&gt;
- tuna set scheduler tipe RR and priority to 99 (Maximum on realtime kernel)&lt;br/&gt;
- IRQBALANCE_BANNED_CPUS=3 irqbalance --foreground --oneshot&lt;br/&gt;
  turn off interrupts from cores 0 and 1 (mask 0x03)&lt;br/&gt;
- the other options may change between various distros, and could improve jitter.&lt;/p&gt;
&lt;p&gt;On a rpi4 on native ethernet I reached a jitter &amp;lt; 100us (In last test &amp;lt; 68us in one hour), on a rpi3 is not possible due ethernet via USB.&lt;/p&gt;&lt;/div&gt;</summary></entry><entry><title>Isolate CODESYS runtime to a single core</title><link href="https://forge.codesys.com/forge/talk/Runtime/thread/65a5a0651f/?limit=25#fe88" rel="alternate"/><published>2021-10-14T06:07:56.325000Z</published><updated>2021-10-14T06:07:56.325000Z</updated><author><name>autojay</name><uri>https://forge.codesys.com/u/autojay/</uri></author><id>https://forge.codesys.com953276950837b31609127b365113c963f565230c</id><summary type="html">&lt;div class="markdown_content"&gt;&lt;p&gt;Thanks. Would this have the same effect as using the taskset command on the CODESYS runtime?&lt;/p&gt;
&lt;p&gt;And how do I set the CODESYS runtime to run at high priority?&lt;/p&gt;&lt;/div&gt;</summary></entry><entry><title>Isolate CODESYS runtime to a single core</title><link href="https://forge.codesys.com/forge/talk/Runtime/thread/65a5a0651f/?limit=25#f869" rel="alternate"/><published>2021-10-11T18:42:27.596000Z</published><updated>2021-10-11T18:42:27.596000Z</updated><author><name>eschwellinger</name><uri>https://forge.codesys.com/u/eschwellinger/</uri></author><id>https://forge.codesys.com5bee82d055cac8da955775b64978268f10bcd987</id><summary type="html">&lt;div class="markdown_content"&gt;&lt;p&gt;if you use:&lt;br/&gt;
&lt;a href="https://store.codesys.com/de/catalogsearch/result/?q=Raspberry+PI" rel="nofollow"&gt;https://store.codesys.com/de/catalogsearch/result/?q=Raspberry+PI&lt;/a&gt;&lt;br/&gt;
everything / runtime / IEC tasks all is on one core.&lt;br/&gt;
If you use:&lt;br/&gt;
&lt;a href="https://store.codesys.com/de/catalogsearch/result/?q=Raspberry+PI+MC" rel="nofollow"&gt;https://store.codesys.com/de/catalogsearch/result/?q=Raspberry+PI+MC&lt;/a&gt;&lt;br/&gt;
You could specify in CODESYS what should run on which core - &lt;/p&gt;&lt;/div&gt;</summary></entry><entry><title>Isolate CODESYS runtime to a single core</title><link href="https://forge.codesys.com/forge/talk/Runtime/thread/65a5a0651f/?limit=25#6ada" rel="alternate"/><published>2021-10-09T22:11:12.853000Z</published><updated>2021-10-09T22:11:12.853000Z</updated><author><name>autojay</name><uri>https://forge.codesys.com/u/autojay/</uri></author><id>https://forge.codesys.com37c0123d29b5858abdd512f2bd203503c5d02f0a</id><summary type="html">&lt;div class="markdown_content"&gt;&lt;p&gt;Hi everyone&lt;/p&gt;
&lt;p&gt;I have applied an RT kernel on my raspberry pi. Now I would like to isolate the CODESYS runtime to run on one core. How do I do that? I checked running processes using the htop command and found multiple instances of CODESYS runtime. How do I isolate them all into a single core?&lt;/p&gt;
&lt;p&gt;I've been following this guide here but couldn't it working: &lt;a href="http://www.comfilewiki.co.kr/en/doku.php?id=comfilepi:improving_real-time_performance:index" rel="nofollow"&gt;http://www.comfilewiki.co.kr/en/doku.php?id=comfilepi:improving_real-time_performance:index&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;</summary></entry></feed>