# Julia script running on Linux is slow

**URL:** https://discourse.julialang.org/t/julia-script-running-on-linux-is-slow/30002
**Category:** General Usage
**Created:** [October 16, 2019, 10:06pm UTC](https://discourse.julialang.org/t/julia-script-running-on-linux-is-slow/30002 "2019-10-16T22:06:51Z")
**Posts on this page:** 10
**Page:** 1

<div class="post-metadata">

### Author: ![alka](https://avatars.discourse-cdn.com/v4/letter/a/8dc957/32.png) [@alka](https://discourse.julialang.org/u/alka)
#### Post date: [October 16, 2019, 10:06pm UTC](https://discourse.julialang.org/t/julia-script-running-on-linux-is-slow/30002/1 "2019-10-16T22:06:51Z")

</div>

I am trying to run julia code in linux machine. But it takes around 4-5 mins to execute. How can I make it faster?

---

<div class="post-metadata">

### Author: ![Oscar\_Smith](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/oscar_smith/32/25343_2.png) [@Oscar\_Smith](https://discourse.julialang.org/u/Oscar_Smith)
#### Post date: [October 16, 2019, 10:12pm UTC](https://discourse.julialang.org/t/julia-script-running-on-linux-is-slow/30002/2 "2019-10-16T22:12:04Z")

</div>

What is the script? Hard to debug something you can’t see. Also, when you say slow on linux, is that compared to Windows/mac or just how you think they should perform?

---

<div class="post-metadata">

### Author: ![alka](https://avatars.discourse-cdn.com/v4/letter/a/8dc957/32.png) [@alka](https://discourse.julialang.org/u/alka)
#### Post date: [October 16, 2019, 10:16pm UTC](https://discourse.julialang.org/t/julia-script-running-on-linux-is-slow/30002/3 "2019-10-16T22:16:44Z")

</div>

# workspace();

include(“OControllerProx.jl”)  
using .OControllerProx;  
#include(“Process.jl”)  
#using .Process;

using MathProgBase;  
using LinearAlgebra;  
using MAT;  
using DataFrames;  
using CSV;  
using JuMP;  
using ProxSDP;  
using Dates;

# get the calculated switches status

path = “/Applications/projects/cLEAN/pnnl\_control”;

file = matopen(“$(path)/input/one-time-input/switch.mat”);  
switches\_status = read(file,“switches\_status”);

case=CSV.read(“$(path)/input/one-time-input/case.csv”);

#case = parse(Float64,CSV.read(“$(path)/input/one-time-input/case.csv”));

#LoadInformation = CSV.File(“(path)/input/one-time-input/LoadInformation.xls"; normalizenames=true, types=[String, String, String, String, String, String, String, String]); #Loads=CSV.read("(path)/input/one-time-input/LoadInformation.xls”; normalizenames=true)

#using DataFrames  
#using StringEncodings  
#f=open(“$(path)/input/one-time-input/LoadInformation.xls”,“r”);  
#s=StringDecoder(f,“LATIN1”, “UTF-8”);  
#LoadInformation=CSV.read(s; normalizenames=true, comment=“#”);  
#close(s)  
#close(f)

#printf(Loads[2,2])

#(Bbus\_processed,Gbus\_processed) = Process.GBbus(Ybus, NodeIDs, NumberOfElements);  
#Bbus\_energizing=switches\_status.\*Bbus\_processed;  
#Gbus\_energizing=switches\_status.\*Gbus\_processed;

# get 5-minute actions

actions = CSV.read(“$(path)/input/5-min-input/actions.csv”; comment=“#”);  
optimal\_injections=zeros(ComplexF64,8,1);  
for i=1:8  
optimal\_injections[i]=parse(ComplexF64, actions[1,4\*i+3]); # convert from string to complex number  
end  
number\_of\_energizing\_segment=length(actions[:,1]);

# pnnl\_actions csv file

global df = DataFrame(Dict(“datatime” =\>“”, “generator.proposed\_diesel\_1.1”=\> “”, “generator.proposed\_diesel\_1.2” =\> “”, “generator.proposed\_diesel\_1.3” =\> “”, “generator.ouc\_solar.1” =\> “”,“generator.ouc\_solar.2” =\> “”,“generator.ouc\_solar.3” =\> “”,“generator.gen\_none\_-60027406210.1” =\> “”,“generator.gen\_none\_-60027406210.2” =\> “”, “generator.gen\_none\_-60027406210.3” =\> “”,“generator.proposed\_solarpv\_1.1” =\> “”,“generator.proposed\_solarpv\_1.2” =\> “”,“generator.proposed\_solarpv\_1.3” =\> “”,“generator.gen\_none\_6002693162.1” =\> “”,“generator.gen\_none\_6002693162.2” =\> “”,“generator.gen\_none\_6002693162.3” =\> “”,“storage.proposed\_storage\_1.1” =\> “”,“storage.proposed\_storage\_1.2” =\> “”,“storage.proposed\_storage\_1.3” =\> “”,“storage.proposed\_fuelcell\_1.1” =\> “”,“storage.proposed\_fuelcell\_1.2” =\> “”,“storage.proposed\_fuelcell\_1.3” =\> “”,“storage.proposed\_fuelcell\_2.1” =\> “”,“storage.proposed\_fuelcell\_2.2” =\> “”,“storage.proposed\_fuelcell\_2.3” =\> “”));

# save pnnl dynamic actions to the output folder

CSV.write(“$(path)/output/pnnl\_actions.csv”, df);

nx=24; # 3 x number of (gen+storage)  
mx=16; # number of control actions  
px=4; # number of usable measurements  
A=-Matrix{Float64}(I, 24,24);  
B=[Matrix{Float64}(I, 16,16);zeros(8,16)];  
C=zeros(4,24);C[1,3]=1;C[2,6]=1;C[3,9]=1;C[4,12]=1;

# finding controller and observer gains

Ax=A;  
Bx=B;  
Cx=C;

Delta1=1;  
Delta2=1;  
gamma = (Delta1+Delta2)/5;  
OptCtr = OControllerProx.solveControllerObserver(Ax,Bx,Cx,gamma, Delta1, Delta2,nx,mx,px);  
P\_out=OptCtr[1]; # Lyapunov matrix  
K\_out=OptCtr[2];  
Q\_out=OptCtr[3]; # Lyapunov matrix  
L\_out=OptCtr[4]; # output control gain  
##############################

# getting control signals to apply to control nodes in every 1 second for 5 minutes

current\_observer=zeros(24,1);

global sensor\_Mtr\_382883  
if case==1

for times = 1:number\_of\_energizing\_segment  
for i=1:300

```
# remember to update actions when running for > 5 minute

```

# Step1: Get measurement data from measurement input folder

#sensor\_Mtr\_382883 =readtable(“/Applications/projects/cLEAN/pnnl control/measurement input/sensor\_Mtr\_-382883.csv”)  
#df1 = CSV.File(“/Applications/projects/cLEAN/pnnl control/measurement input/sensor\_Mtr\_-382883.csv”, datarow=10);  
#sensor\_Mtr\_382883 =CSV.read(df1)

current\_measurement=zeros(4,1);  
if isfile(“(path)/input/measurement-input/sensor\_Mtr\_-382883.csv")==false current\_measurement[1]=0; elseif isfile("(path)/input/measurement-input/sensor\_Mtr\_1695832.csv”)==false  
current\_measurement[2]=0;  
elseif isfile(“(path)/input/measurement-input/sensor\_Mtr\_118122225.csv")==false current\_measurement[3]=0; elseif isfile("(path)/input/measurement-input/sensor\_Mtr\_119123112.csv”)==false  
current\_measurement[4]=0;  
else

sensor\_Mtr\_382883 =CSV.read(“(path)/input/measurement-input/sensor\_Mtr\_-382883.csv"; comment="#"); sensor\_Mtr\_1695832 =CSV.read("(path)/input/measurement-input/sensor\_Mtr\_1695832.csv”; comment=“#”);  
sensor\_Mtr\_118122225 =CSV.read(“(path)/input/measurement-input/sensor\_Mtr\_118122225.csv"; comment="#"); sensor\_Mtr\_119123112 =CSV.read("(path)/input/measurement-input/sensor\_Mtr\_119123112.csv”; comment=“#”);

# check if data at i-second instant is available; if not then wait until it is available

while (length(sensor\_Mtr\_382883[:,1])\<(i+300\*(times-1))) & (length(sensor\_Mtr\_1695832[:,1])\<(i+300\*(times-1))) & (length(sensor\_Mtr\_118122225[:,1])\<(i+300\*(times-1))) & (length(sensor\_Mtr\_119123112[:,1])\<(i+300\*(times-1)))  
sleep(0.001);  
end

# calculate control input based on measurement at i-second instant

if typeof(sensor\_Mtr\_382883[2,2])==string

# convert from string to complex number measurement data

imcurrent\_measurement=zeros(ComplexF64,4,1);  
imcurrent\_measurement[1]= (parse(ComplexF64, sensor\_Mtr\_382883[(i+300\*(times-1)),2])+parse(ComplexF64, sensor\_Mtr\_382883[(i+300\*(times-1)),3])+parse(ComplexF64, sensor\_Mtr\_382883[(i+300\*(times-1)),4]))/3;  
imcurrent\_measurement[2]= (parse(ComplexF64, sensor\_Mtr\_1695832[(i+300\*(times-1)),2])+parse(ComplexF64, sensor\_Mtr\_1695832[(i+300\*(times-1)),3])+parse(ComplexF64, sensor\_Mtr\_1695832[(i+300\*(times-1)),4]))/3;  
imcurrent\_measurement[3]= (parse(ComplexF64, sensor\_Mtr\_118122225[(i+300\*(times-1)),2])+parse(ComplexF64, sensor\_Mtr\_118122225[(i+300\*(times-1)),3])+parse(ComplexF64, sensor\_Mtr\_118122225[(i+300\*(times-1)),4]))/3;  
imcurrent\_measurement[4]= (parse(ComplexF64, sensor\_Mtr\_119123112[(i+300\*(times-1)),2])+parse(ComplexF64, sensor\_Mtr\_119123112[(i+300\*(times-1)),3])+parse(ComplexF64, sensor\_Mtr\_119123112[(i+300\*(times-1)),4]))/3;  
for j=1:4  
current\_measurement[j]= abs(imcurrent\_measurement[j]);  
end

elseif typeof(sensor\_Mtr\_382883[2,2])==Int64  
current\_measurement[1]= sqrt(sensor\_Mtr\_382883[(i+300\*(times-1)),8]^2+sensor\_Mtr\_382883[(i+300\*(times-1)),9]^2);  
current\_measurement[2]= sqrt(sensor\_Mtr\_1695832[(i+300\*(times-1)),8]^2+sensor\_Mtr\_1695832[i(i+300\*(times-1)),9]^2);  
current\_measurement[3]= sqrt(sensor\_Mtr\_118122225[(i+300\*(times-1)),8]^2+sensor\_Mtr\_118122225[(i+300\*(times-1)),9]^2);  
current\_measurement[4]= sqrt(sensor\_Mtr\_119123112[(i+300\*(times-1)),8]^2+sensor\_Mtr\_119123112[(i+300\*(times-1)),9]^2);  
end  
end

###############################

# find the next observer state

global current\_observer  
next\_observer = current\_observer + (A+B_K\_out)current\_observer + L\_out(current\_measurement-C_current\_observer);

current\_observer =next\_observer;

################################

# Step 3: return PQ control signals bn

current\_control = K\_out_current\_observer;  
PQcurrent\_control=zeros(ComplexF64,8,1);  
for k=1:8  
PQcurrent\_control[k] = current\_control[2_k-1] + current\_control[2\*k]\*im;  
end  
################################

# Step 4: calculate the changes to apply to control nodes

dynamic\_injections = optimal\_injections + PQcurrent\_control;

# write the file with the stringdata variable information

global df = DataFrame(Dict(“datatime” =\> DateTime(2000,1,1,0,floor((i+300\*(times-1))/60),(i+300\*(times-1))-60_floor((i+300_(times-1))/60)), “generator.proposed\_diesel\_1.1” =\> [dynamic\_injections[1]], “generator.proposed\_diesel\_1.2” =\> [dynamic\_injections[1]], “generator.proposed\_diesel\_1.3” =\> [dynamic\_injections[1]], “generator.ouc\_solar.1” =\> [dynamic\_injections[2]],“generator.ouc\_solar.2” =\> [dynamic\_injections[2]],“generator.ouc\_solar.3” =\> [dynamic\_injections[2]],“generator.gen\_none\_-60027406210.1” =\> [dynamic\_injections[3]],“generator.gen\_none\_-60027406210.2” =\> [dynamic\_injections[3]], “generator.gen\_none\_-60027406210.3” =\> [dynamic\_injections[3]],“generator.proposed\_solarpv\_1.1” =\> [dynamic\_injections[4]],“generator.proposed\_solarpv\_1.2” =\> [dynamic\_injections[4]],“generator.proposed\_solarpv\_1.3” =\> [dynamic\_injections[4]],“generator.gen\_none\_6002693162.1” =\> [dynamic\_injections[5]],“generator.gen\_none\_6002693162.2” =\> [dynamic\_injections[5]],“generator.gen\_none\_6002693162.3” =\> [dynamic\_injections[5]],“storage.proposed\_storage\_1.1” =\> [dynamic\_injections[6]],“storage.proposed\_storage\_1.2” =\> [dynamic\_injections[6]],“storage.proposed\_storage\_1.3” =\> [dynamic\_injections[6]],“storage.proposed\_fuelcell\_1.1” =\> [dynamic\_injections[7]],“storage.proposed\_fuelcell\_1.2” =\> [dynamic\_injections[7]],“storage.proposed\_fuelcell\_1.3” =\> [dynamic\_injections[7]],“storage.proposed\_fuelcell\_2.1” =\> [dynamic\_injections[8]],“storage.proposed\_fuelcell\_2.2” =\> [dynamic\_injections[8]],“storage.proposed\_fuelcell\_2.3” =\> [dynamic\_injections[8]]));

# save pnnl dynamic actions to the output folder

CSV.write(“$(path)/output/pnnl\_actions.csv”, df,append=true);

end  
end

elseif case==2 #incorrect measurement data  
for times = 1:number\_of\_energizing\_segment  
for i=1:300

```
  # remember to update actions when running for > 5 minute

```

# Step1: Get measurement data from measurement input folder

#sensor\_Mtr\_382883 =readtable(“/Applications/projects/cLEAN/pnnl control/measurement input/sensor\_Mtr\_-382883.csv”)  
#df1 = CSV.File(“/Applications/projects/cLEAN/pnnl control/measurement input/sensor\_Mtr\_-382883.csv”, datarow=10);  
#sensor\_Mtr\_382883 =CSV.read(df1)  
current\_measurement=zeros(4,1);  
if isfile(“(path)/input/measurement-input/sensor\_Mtr\_-382883.csv")==false current\_measurement[1]=0; elseif isfile("(path)/input/measurement-input/sensor\_Mtr\_1695832.csv”)==false  
current\_measurement[2]=0;  
elseif isfile(“(path)/input/measurement-input/sensor\_Mtr\_118122225.csv")==false current\_measurement[3]=0; elseif isfile("(path)/input/measurement-input/sensor\_Mtr\_119123112.csv”)==false  
current\_measurement[4]=0;  
else

sensor\_Mtr\_382883 =CSV.read(“(path)/input/measurement-input/sensor\_Mtr\_-382883.csv"; comment="#"); sensor\_Mtr\_1695832 =CSV.read("(path)/input/measurement-input/sensor\_Mtr\_1695832.csv”; comment=“#”);  
sensor\_Mtr\_118122225 =CSV.read(“(path)/input/measurement-input/sensor\_Mtr\_118122225.csv"; comment="#"); sensor\_Mtr\_119123112 =CSV.read("(path)/input/measurement-input/sensor\_Mtr\_119123112.csv”; comment=“#”);

# check if data at i-second instant is available; if not then wait until it is available

while (length(sensor\_Mtr\_382883[:,1])\<(i+300\*(times-1))) & (length(sensor\_Mtr\_1695832[:,1])\<(i+300\*(times-1))) & (length(sensor\_Mtr\_118122225[:,1])\<(i+300\*(times-1))) & (length(sensor\_Mtr\_119123112[:,1])\<(i+300\*(times-1)))  
sleep(0.001);  
end

# calculate control input based on measurement at i-second instant

if typeof(sensor\_Mtr\_382883[2,2])==string

# convert from string to complex number measurement data

imcurrent\_measurement=zeros(ComplexF64,4,1);  
imcurrent\_measurement[1]= (parse(ComplexF64, sensor\_Mtr\_382883[(i+300\*(times-1)),2])+parse(ComplexF64, sensor\_Mtr\_382883[(i+300\*(times-1)),3])+parse(ComplexF64, sensor\_Mtr\_382883[(i+300\*(times-1)),4]))/3;  
imcurrent\_measurement[2]= (parse(ComplexF64, sensor\_Mtr\_1695832[(i+300\*(times-1)),2])+parse(ComplexF64, sensor\_Mtr\_1695832[(i+300\*(times-1)),3])+parse(ComplexF64, sensor\_Mtr\_1695832[(i+300\*(times-1)),4]))/3;  
imcurrent\_measurement[3]= (parse(ComplexF64, sensor\_Mtr\_118122225[(i+300\*(times-1)),2])+parse(ComplexF64, sensor\_Mtr\_118122225[(i+300\*(times-1)),3])+parse(ComplexF64, sensor\_Mtr\_118122225[(i+300\*(times-1)),4]))/3;  
imcurrent\_measurement[4]= (parse(ComplexF64, sensor\_Mtr\_119123112[(i+300\*(times-1)),2])+parse(ComplexF64, sensor\_Mtr\_119123112[(i+300\*(times-1)),3])+parse(ComplexF64, sensor\_Mtr\_119123112[(i+300\*(times-1)),4]))/3;  
current\_measurement[1]=(1.05-0.1\*rand(Float64))\*abs(imcurrent\_measurement[1]);  
for j=2:4  
current\_measurement[j]= abs(imcurrent\_measurement[j]);  
end

elseif typeof(sensor\_Mtr\_382883[2,2])==Int64  
current\_measurement[1]= (1.05-0.1_rand(Float64))sqrt(sensor\_Mtr\_382883[(i+300(times-1)),8]^2+sensor\_Mtr\_382883[(i+300_(times-1)),9]^2);  
current\_measurement[2]= sqrt(sensor\_Mtr\_1695832[(i+300\*(times-1)),8]^2+sensor\_Mtr\_1695832[i(i+300\*(times-1)),9]^2);  
current\_measurement[3]= sqrt(sensor\_Mtr\_118122225[(i+300\*(times-1)),8]^2+sensor\_Mtr\_118122225[(i+300\*(times-1)),9]^2);  
current\_measurement[4]= sqrt(sensor\_Mtr\_119123112[(i+300\*(times-1)),8]^2+sensor\_Mtr\_119123112[(i+300\*(times-1)),9]^2);  
end  
end

###############################

# find the next observer state

global current\_observer  
next\_observer = current\_observer + (A+B_K\_out)current\_observer + L\_out(current\_measurement-C_current\_observer);

current\_observer =next\_observer;

################################

# Step 3: return PQ control signals bn

current\_control = K\_out_current\_observer;  
PQcurrent\_control=zeros(ComplexF64,8,1);  
for k=1:8  
PQcurrent\_control[k] = current\_control[2_k-1] + current\_control[2\*k]\*im;  
end  
################################

# Step 4: calculate the changes to apply to control nodes

dynamic\_injections = optimal\_injections + PQcurrent\_control;

# write the file with the stringdata variable information

global df = DataFrame(Dict(“datatime” =\> DateTime(2000,1,1,0,floor((i+300\*(times-1))/60),(i+300\*(times-1))-60_floor((i+300_(times-1))/60)), “generator.proposed\_diesel\_1.1” =\> [dynamic\_injections[1]], “generator.proposed\_diesel\_1.2” =\> [dynamic\_injections[1]], “generator.proposed\_diesel\_1.3” =\> [dynamic\_injections[1]], “generator.ouc\_solar.1” =\> [dynamic\_injections[2]],“generator.ouc\_solar.2” =\> [dynamic\_injections[2]],“generator.ouc\_solar.3” =\> [dynamic\_injections[2]],“generator.gen\_none\_-60027406210.1” =\> [dynamic\_injections[3]],“generator.gen\_none\_-60027406210.2” =\> [dynamic\_injections[3]], “generator.gen\_none\_-60027406210.3” =\> [dynamic\_injections[3]],“generator.proposed\_solarpv\_1.1” =\> [dynamic\_injections[4]],“generator.proposed\_solarpv\_1.2” =\> [dynamic\_injections[4]],“generator.proposed\_solarpv\_1.3” =\> [dynamic\_injections[4]],“generator.gen\_none\_6002693162.1” =\> [dynamic\_injections[5]],“generator.gen\_none\_6002693162.2” =\> [dynamic\_injections[5]],“generator.gen\_none\_6002693162.3” =\> [dynamic\_injections[5]],“storage.proposed\_storage\_1.1” =\> [dynamic\_injections[6]],“storage.proposed\_storage\_1.2” =\> [dynamic\_injections[6]],“storage.proposed\_storage\_1.3” =\> [dynamic\_injections[6]],“storage.proposed\_fuelcell\_1.1” =\> [dynamic\_injections[7]],“storage.proposed\_fuelcell\_1.2” =\> [dynamic\_injections[7]],“storage.proposed\_fuelcell\_1.3” =\> [dynamic\_injections[7]],“storage.proposed\_fuelcell\_2.1” =\> [dynamic\_injections[8]],“storage.proposed\_fuelcell\_2.2” =\> [dynamic\_injections[8]],“storage.proposed\_fuelcell\_2.3” =\> [dynamic\_injections[8]]));

# save pnnl dynamic actions to the output folder

CSV.write(“$(path)/output/pnnl\_actions.csv”, df,append=true);

end  
end

elseif case==3 #failure actuator

for times = 1:number\_of\_energizing\_segment  
for i=1:300

```
  # remember to update actions when running for > 5 minute

```

# Step1: Get measurement data from measurement input folder

#sensor\_Mtr\_382883 =readtable(“/Applications/projects/cLEAN/pnnl control/measurement input/sensor\_Mtr\_-382883.csv”)  
#df1 = CSV.File(“/Applications/projects/cLEAN/pnnl control/measurement input/sensor\_Mtr\_-382883.csv”, datarow=10);  
#sensor\_Mtr\_382883 =CSV.read(df1)  
current\_measurement=zeros(4,1);  
if isfile(“(path)/input/measurement-input/sensor\_Mtr\_-382883.csv")==false current\_measurement[1]=0; elseif isfile("(path)/input/measurement-input/sensor\_Mtr\_1695832.csv”)==false  
current\_measurement[2]=0;  
elseif isfile(“(path)/input/measurement-input/sensor\_Mtr\_118122225.csv")==false current\_measurement[3]=0; elseif isfile("(path)/input/measurement-input/sensor\_Mtr\_119123112.csv”)==false  
current\_measurement[4]=0;  
else

sensor\_Mtr\_382883 =CSV.read(“(path)/input/measurement-input/sensor\_Mtr\_-382883.csv"; comment="#"); sensor\_Mtr\_1695832 =CSV.read("(path)/input/measurement-input/sensor\_Mtr\_1695832.csv”; comment=“#”);  
sensor\_Mtr\_118122225 =CSV.read(“(path)/input/measurement-input/sensor\_Mtr\_118122225.csv"; comment="#"); sensor\_Mtr\_119123112 =CSV.read("(path)/input/measurement-input/sensor\_Mtr\_119123112.csv”; comment=“#”);

# check if data at i-second instant is available; if not then wait until it is available

while (length(sensor\_Mtr\_382883[:,1])\<(i+300\*(times-1))) & (length(sensor\_Mtr\_1695832[:,1])\<(i+300\*(times-1))) & (length(sensor\_Mtr\_118122225[:,1])\<(i+300\*(times-1))) & (length(sensor\_Mtr\_119123112[:,1])\<(i+300\*(times-1)))  
sleep(0.001);  
end

# calculate control input based on measurement at i-second instant

if typeof(sensor\_Mtr\_382883[2,2])==string

# convert from string to complex number measurement data

imcurrent\_measurement=zeros(ComplexF64,4,1);  
imcurrent\_measurement[1]= (parse(ComplexF64, sensor\_Mtr\_382883[(i+300\*(times-1)),2])+parse(ComplexF64, sensor\_Mtr\_382883[(i+300\*(times-1)),3])+parse(ComplexF64, sensor\_Mtr\_382883[(i+300\*(times-1)),4]))/3;  
imcurrent\_measurement[2]= (parse(ComplexF64, sensor\_Mtr\_1695832[(i+300\*(times-1)),2])+parse(ComplexF64, sensor\_Mtr\_1695832[(i+300\*(times-1)),3])+parse(ComplexF64, sensor\_Mtr\_1695832[(i+300\*(times-1)),4]))/3;  
imcurrent\_measurement[3]= (parse(ComplexF64, sensor\_Mtr\_118122225[(i+300\*(times-1)),2])+parse(ComplexF64, sensor\_Mtr\_118122225[(i+300\*(times-1)),3])+parse(ComplexF64, sensor\_Mtr\_118122225[(i+300\*(times-1)),4]))/3;  
imcurrent\_measurement[4]= (parse(ComplexF64, sensor\_Mtr\_119123112[(i+300\*(times-1)),2])+parse(ComplexF64, sensor\_Mtr\_119123112[(i+300\*(times-1)),3])+parse(ComplexF64, sensor\_Mtr\_119123112[(i+300\*(times-1)),4]))/3;  
for j=1:4  
current\_measurement[j]= abs(imcurrent\_measurement[j]);  
end

elseif typeof(sensor\_Mtr\_382883[2,2])==Int64  
current\_measurement[1]= sqrt(sensor\_Mtr\_382883[(i+300\*(times-1)),8]^2+sensor\_Mtr\_382883[(i+300\*(times-1)),9]^2);  
current\_measurement[2]= sqrt(sensor\_Mtr\_1695832[(i+300\*(times-1)),8]^2+sensor\_Mtr\_1695832[i(i+300\*(times-1)),9]^2);  
current\_measurement[3]= sqrt(sensor\_Mtr\_118122225[(i+300\*(times-1)),8]^2+sensor\_Mtr\_118122225[(i+300\*(times-1)),9]^2);  
current\_measurement[4]= sqrt(sensor\_Mtr\_119123112[(i+300\*(times-1)),8]^2+sensor\_Mtr\_119123112[(i+300\*(times-1)),9]^2);  
end  
end

###############################

# find the next observer state

global current\_observer;  
next\_observer = current\_observer + (A+B_K\_out)current\_observer + L\_out(current\_measurement-C_current\_observer);

current\_observer =next\_observer;

################################

# Step 3: return PQ control signals bn

current\_control = K\_out_current\_observer;  
PQcurrent\_control=zeros(ComplexF64,8,1);  
for k=1:8  
PQcurrent\_control[k] = current\_control[2_k-1] + current\_control[2\*k]\*im;  
end

PQcurrent\_control[1]=0; #actuators at generator 1 fail

################################

# Step 4: calculate the changes to apply to control nodes

dynamic\_injections = optimal\_injections + PQcurrent\_control;

# write the file with the stringdata variable information

global df = DataFrame(Dict(“datatime” =\> DateTime(2000,1,1,0,floor((i+300\*(times-1))/60),(i+300\*(times-1))-60_floor((i+300_(times-1))/60)), “generator.proposed\_diesel\_1.1” =\> [dynamic\_injections[1]], “generator.proposed\_diesel\_1.2” =\> [dynamic\_injections[1]], “generator.proposed\_diesel\_1.3” =\> [dynamic\_injections[1]], “generator.ouc\_solar.1” =\> [dynamic\_injections[2]],“generator.ouc\_solar.2” =\> [dynamic\_injections[2]],“generator.ouc\_solar.3” =\> [dynamic\_injections[2]],“generator.gen\_none\_-60027406210.1” =\> [dynamic\_injections[3]],“generator.gen\_none\_-60027406210.2” =\> [dynamic\_injections[3]], “generator.gen\_none\_-60027406210.3” =\> [dynamic\_injections[3]],“generator.proposed\_solarpv\_1.1” =\> [dynamic\_injections[4]],“generator.proposed\_solarpv\_1.2” =\> [dynamic\_injections[4]],“generator.proposed\_solarpv\_1.3” =\> [dynamic\_injections[4]],“generator.gen\_none\_6002693162.1” =\> [dynamic\_injections[5]],“generator.gen\_none\_6002693162.2” =\> [dynamic\_injections[5]],“generator.gen\_none\_6002693162.3” =\> [dynamic\_injections[5]],“storage.proposed\_storage\_1.1” =\> [dynamic\_injections[6]],“storage.proposed\_storage\_1.2” =\> [dynamic\_injections[6]],“storage.proposed\_storage\_1.3” =\> [dynamic\_injections[6]],“storage.proposed\_fuelcell\_1.1” =\> [dynamic\_injections[7]],“storage.proposed\_fuelcell\_1.2” =\> [dynamic\_injections[7]],“storage.proposed\_fuelcell\_1.3” =\> [dynamic\_injections[7]],“storage.proposed\_fuelcell\_2.1” =\> [dynamic\_injections[8]],“storage.proposed\_fuelcell\_2.2” =\> [dynamic\_injections[8]],“storage.proposed\_fuelcell\_2.3” =\> [dynamic\_injections[8]]));

# save pnnl dynamic actions to the output folder

CSV.write(“$(path)/output/pnnl\_actions.csv”, df,append=true);

end  
end

end

---

<div class="post-metadata">

### Author: ![alka](https://avatars.discourse-cdn.com/v4/letter/a/8dc957/32.png) [@alka](https://discourse.julialang.org/u/alka)
#### Post date: [October 16, 2019, 10:18pm UTC](https://discourse.julialang.org/t/julia-script-running-on-linux-is-slow/30002/4 "2019-10-16T22:18:00Z")

</div>

When I run the same in Atom it takes few seconds but in linux VM with julia takes 4-5 minutes

---

<div class="post-metadata">

### Author: ![aaowens](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/aaowens/32/12101_2.png) [@aaowens](https://discourse.julialang.org/u/aaowens)
#### Post date: [October 16, 2019, 10:37pm UTC](https://discourse.julialang.org/t/julia-script-running-on-linux-is-slow/30002/5 "2019-10-16T22:37:55Z")

</div>

Is the linux VM reset before you run it? Maybe you’re precompiling all the packages on the VM, which might take a few minutes. In Atom they might already be precompiled.

What happens if you run the script twice in the VM?

---

<div class="post-metadata">

### Author: ![alka](https://avatars.discourse-cdn.com/v4/letter/a/8dc957/32.png) [@alka](https://discourse.julialang.org/u/alka)
#### Post date: [October 16, 2019, 10:42pm UTC](https://discourse.julialang.org/t/julia-script-running-on-linux-is-slow/30002/6 "2019-10-16T22:42:05Z")

</div>

I tried running it twice but same speed. 3 minutes both the times. I also get this

sing994@eioc-tdc-02:~/csderms/csderms-docker/scripts$ docker exec csv1 julia StabilizingControl.jl  
┌ Warning: Package ProxSDP does not have Random in its dependencies:  
│ - If you have ProxSDP checked out for development and have  
│ added Random as a dependency but haven’t updated your primary  
│ environment’s manifest file, try `Pkg.resolve()`.  
│ - Otherwise you may need to report an issue with ProxSDP  
└ Loading Random into ProxSDP from project dependency, future warnings for ProxSDP are suppressed.

Is this causing an issue?

---

<div class="post-metadata">

### Author: ![jling](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/jling/32/212909_2.png) [@jling](https://discourse.julialang.org/u/jling)
#### Post date: [October 16, 2019, 11:01pm UTC](https://discourse.julialang.org/t/julia-script-running-on-linux-is-slow/30002/7 "2019-10-16T23:01:44Z")

</div>

in atom, your kernel doesn’t shut down between runs, on linux, if you run it by `julia script.jl`, every time a new Julia kernel needs to start.

Also, please wrap your code between ``` for readability.

---

<div class="post-metadata">

### Author: ![alka](https://avatars.discourse-cdn.com/v4/letter/a/8dc957/32.png) [@alka](https://discourse.julialang.org/u/alka)
#### Post date: [October 16, 2019, 11:09pm UTC](https://discourse.julialang.org/t/julia-script-running-on-linux-is-slow/30002/8 "2019-10-16T23:09:18Z")

</div>

I have to use docker to excecute this Julia script. I use this command -  
docker exec csv1 julia StabilizingControl.jl

So, do you have any suggestions to make it faster?

---

<div class="post-metadata">

### Author: ![jling](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/jling/32/212909_2.png) [@jling](https://discourse.julialang.org/u/jling)
#### Post date: [October 16, 2019, 11:13pm UTC](https://discourse.julialang.org/t/julia-script-running-on-linux-is-slow/30002/9 "2019-10-16T23:13:38Z")

</div>

because Julia is not a good candidate for “scripting language” (think of Bash, Python, Perl), you either can just make your “script” a module, so you can pre-compile most of the things away, or you can set up a Jupyter notebook and forward a port out from docker.

Ideally there should be a way to run a Julia kernel in the background, but I’m not sure what’s the easiest way to do this. (maybe `Distributed.jl`)

---

<div class="post-metadata">

### Author: ![johnh](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/johnh/32/3615_2.png) [@johnh](https://discourse.julialang.org/u/johnh)
#### Post date: [October 17, 2019, 8:51am UTC](https://discourse.julialang.org/t/julia-script-running-on-linux-is-slow/30002/10 "2019-10-17T08:51:54Z")

</div>

Please could you tell us what your exact environment is?  
The approximate specs of the base server or laptop and the operating system.  
Are you runnign docker on this base system, or are you running a Linxu VM then docker?

As an aside has anyone used docker pause with a Julia docker container?

> **[docker pause](https://docs.docker.com/engine/reference/commandline/pause/)**
