반응형

governor

CPU Frequency policy에 해아여 parameter 설정

Governor 타입

. OnDemand : 사용량에 따라 CPU Frequency를 변경 // <-- Default 인 경우 있음
. OnDemandX : 배터리 친화적인 OnDemand로서 I/O 스케쥴러에 따라 성능 변경
. Conservative : 느린 OnDemand. 가급적 최저 Frequence
. Interactive : OnDemand처럼 CPU에 위치한 부하 주파수에 따라 변경지만 빠르게 반응함
. Performance : CPU를 Maximum frequence로 고정 설정
. Powersave : CPU를 Minimum frequence로 고정 설정 // <-- Default 인 경우 있음

현재 설정 확인

 $ cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor 

현재 CPU의 설정 가능 리스트 확인

0번 cpu로 예를 들지만 다른 cpu#를 확인해도 된다.

 $ cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_available_governors

Governor 변경 설정

예제는 정규표현식으로 모든 CPU에 대해서 설정함. CPU#를 고정하여 설정해도 됨

 $ sudo echo performance | sudo tee /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor
반응형
반응형
반응형
반응형

Ubuntu GUI 영상 캡쳐 방법(22.04)

간단하게 PrintScreen 버튼으로 이미지/동영상 캡쳐 가능
동영상 캡쳐시 상단에 중지 버튼으로 중지시 까지 영상 캡쳐됨

mp4 변환

기본적으로 영상 캡쳐시 포멧은 webm 포멧임.
mp4로 ffmpeg를 이용해서 간단하게 converting 할 수 있음.

기본 변환 방법

 $ ffmpeg -i <INPUT FILE> -vcodec libx264 -acodec aac <OUTPUT FILE>

Scale 지정 converting 방법

 $ ffmpeg -i <INPUT FILE> -vf "scale=<WIDTH>:<HEIGHT>" -vcodec libx264 -acodec aac <OUTPUT FILE>

Scale 지정시 Width 고정(예.1280), Height 가변

 $ ffmpeg -i <INPUT FILE> -vf "scale=1280:trunc(720/2)*2" -vcodec libx264 -acodec aac <OUTPUT FILE>

FPS 지정

영상 캡쳐를 하면 원본 영상 화질과 상관없이 무겁다. FPS를 지정하고 싶을 경우

 $ ffmpeg -i <INPUT FILE> -vf "scale=1280:trunc(720/2)*2" -vcodec libx264 -acodec aac -r <FPS NUM> <OUTPUT FILE>
반응형
반응형

맥 키 맵핑

맥에서 커스텀 키보드를 사용하려고 할 때도 있고,
일반 윈도우 레이아웃의 키보드를 사용해야 될 수도 있고,
맥의 공식 키보드를 사용하더라도 한영키의 딜레이를 막기 위해서도 키 맵핑은 필요하다

Karabiner

맥 키보드 레이아웃 맵핑 프로그램으로 사용하기 유용하다.

https://karabiner-elements.pqrs.org/

구성

Karabiner elements 와 Karabiner event viewer 두개가 있다.

Karabiner event viewer

맵핑하고자 하는 키를 확인할 수 있다. 이게 유용한게, Custom keyboard는 거의 윈도우를 중점으로 만들어져 있는지, 맥의 fn키를 설정할 수 없거나 확인할 수 없는 경우가 있다(Via와 같은 경우 fn키를 확인할 방법도 적용할 방법도 없었다)

Karabiner elements

필자와 같은 경우 Via는 키보드의 Firmware에 설정이 가능하니 컴퓨터나 OS의 Dependency가 없으니, 맥과 개인적인 layout을 설정하고, 사용할 수 없는 fn키만 Karabiner로 설정을 했다.

장점

상세하게 설정이 가능하다.
키보드 별로 설정을 해서 다른 레이아웃의 키보드에 영향이 없게끔 할 수 도 있다.
Special key도 설정할 수 있어서, 맥을 사용하는 사람들이 흔히 쓰는 F13키로 한/영키로 변경해서 사용하고 있는데, 딜레이도 없고 정말 편리하다.
전역 설정도 가능하다(근데 전역 설정을 할 경우 모든 키보드에 영향을 받기 때문에 맥의 기본 키보드에서는 정상적으로 쓸 수 없어서 잘 쓰지 않는다).

단점

이건 설치된 프로그램에서 Hooking해서 다른 키로 SW를 통해 인식하게 하는 것이기 때문에 다른 컴퓨터를 연결하거나 OS를 바꾸거나, Account를 바꾸게 되면 자신이 사용하고자 하는 환경에 Karabiner 를 설치하고, 해당 키보드에 설정을 다시 해야 할 필요가 있다.
필자와 같은 경우 재택 업무용 계정, 홈 계정, Window OS도 설치가 되어 있는데 모두 재 설치/설정을 해야 하는 부분은 불편하고, 만약에 컴퓨터를 바꾸게 될 경우 키보드에 대한 설정들을 다시 다 해줘야 하는 부분은 불편하다.

반응형
반응형

Docker container 내에서 GUi를 사용하기

Host의 XServer를 컨테이너와 공유해서 Container 내에서 GUI를 사용하는 방법.
X11 Forwarding을 사용하거나, Display를 통해서 사용 가능
다만 Forwarding을 하거나 Display에 대한 DISPLAY 환경 변수를 미리 정의를 하고 생성해야됨.

Host에서 Docker와 xserver 통신 설정

$ xhost +local:docker

Docker run parameter

 --volume /tmp/.X11-unix:/tmp/.X11-unix:ro -e DISPLAY=unix$DISPLAY

혹시 안될 경우

 --volume /tmp/.X11-unix:/tmp/.X11-unix:ro -e DISPLAY=$DISPLAY

혹시 안될 경우

 --volume /tmp/.X11-unix:/tmp/.X11-unix -e DISPLAY=$DISPLAY
반응형
반응형

Plugin 개발 할 때에 Memory Leak에 대해서 확인해보기 위해서 valgrind를 붙여보았는데, valgrind를 붙이면 launcher가 정상 동작 하지 않는다. 원인을 찾을 수 없어서 GStreamer에서 Memory leak에 대한 수단을 제공하지 않을까 해서 찾아보니 아래와 같이 Debugging을 할 수 있는 방법이 있다.

GST_DEBUG="GST_TRACER:7" GST_TRACERS="leaks" 

위와 같이 환경변수를 설정하고 동작시에 아래와 같이 종료 이후로 남아있는 메모리에 대해서 추적해준다.

0:00:33.676884568  6771 0x556451e88840 TRACE             GST_TRACER :0:: object-alive, type-name=(string)GstBuffer, address=(gpointer)0x7f835dc012c0, description=(string)buffer: 0x7f835dc012c0, pts 0:00:45.833522174, dts 99:99:99.999999999, dur 0:00:00.100000000, size 2764800, offset 458, offset_end 459, flags 0x0, ref-count=(uint)1, trace=(string);
0:00:33.676887333  6771 0x556451e88840 TRACE             GST_TRACER :0:: object-alive, type-name=(string)GstBuffer, address=(gpointer)0x7f834738a700, description=(string)buffer: 0x7f834738a700, pts 99:99:99.999999999, dts 99:99:99.999999999, dur 99:99:99.999999999, size 2764800, offset none, offset_end none, flags 0x0, ref-count=(uint)1, trace=(string);
0:00:33.676890357  6771 0x556451e88840 TRACE             GST_TRACER :0:: object-alive, type-name=(string)GstBuffer, address=(gpointer)0x7f86d44efe20, description=(string)buffer: 0x7f86d44efe20, pts 0:00:53.533522174, dts 99:99:99.999999999, dur 0:00:00.100000000, size 2764800, offset 535, offset_end 536, flags 0x0, ref-count=(uint)1, trace=(string);

Typename과 Address, ref-count 등을 남겨준다.
다만 이 메모리가 어떤것인지 자세히 나오지 않아서 이 방법에 대해서도 검토가 필요할 것 같다.

반응형
반응형
  1. CMakeLists.txt에 아래와 같이 FLAG를 추가해준다.
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fsanitize=address -fno-omit-frame-pointer")
set(CMAKE_LINKER_FLAGS "${CMAKE_LINKER_FLAGS} -fsanitize=address")
  1. 실행시 환경 변수값을 포함하여 실행해준다.

    LD_PRELOAD=/usr/lib/x86_64-linux-gnu/libasan.so.5 {EXECUTABLE BINARY}
  2. expor를 하는 방법도 있다.
    하지만 추천하지 않는다. 커맨드도 sanitizer에 물려서 제대로 실행이 안된다;

    $ export LD_PRELOAD=/usr/lib/x86_64-linux-gnu/libasan.so.5
반응형
반응형

EOG

원격 서버에서 개발/테스트를 진행할때에 Dump Image를 보기 위해서는 모니터를 연결하거나 파일을 압축해서 가져와서 봐야 하는 귀찮음이 있는데, 이미지 뷰어를 사용하면 X.11 환경에서는 커맨드로 이용하기도 좋고 귀찮음이 덜하다.

EOG라는 프로그램이 있어서 찾아보니 대충 사용하기 용이하다.

EOG Homepage

https://manpages.ubuntu.com/manpages/trusty/man1/eog.1.html

How to install

$ sudo apt install eog

How to run

$ eog ${PATH or FILENAME}
반응형
반응형

User list

$ sudo ipmitool user list 
혹은
$ sudo ipmitool user list 1

위에서 빈 slot number를 이용하거나 추가하고자 하는 number로 id를 보통 추가한다.

User add

$ sudo ipmitool user set name <ID> <USERNAME>

User Password set

$ sudo ipmitool user set password <ID>
Password for user <ID> : 

위와 같이 User를 추가했을 때에 Web에서 접근을 할경우 로그인 오류가 발생한다.
이와 같을 경우 해당 User가 Enable되지 않았을 경우이므로 Enable 해준다.

User enable list 확인

$ sudo ipmitool user summary <CH>
Maximum IDs        : 16
Enabled User Count  : 0
Fixed Name Count    : 0

위에서 "Enabled User Count가 0일 경우 Enable이 되지 않은 상태로 Enable 시켜준다.

Added user ID enable

$ sudo ipmitool user enable <ID>

그 다음 웹에 접근할 경우 정상적으로 접근되는 것이 확인되었다.

반응형
반응형

목적

ONNX Model의 검증이 필요할 때에 간략하게 테스트 하는 방법

Dependency package

Pillow가 없을 경우 pip 설치가 필요함

출력

해당 모델은 customized된 Resnet 모델로 Output이 10개 이하임.
그래서 수치의 결과물을 보기 위한 것으로, 모든 값을 한 행에 출력을 하게끔 작성함.
필요에 따라 적절한 수정이 필요함.

Python Code

import os
import onnxruntime as rt
from PIL import Image
import numpy as np

model_path = 'model path str'
image_dir = 'image path str'
width = 224
height = 224

sess = rt.InferenceSession(model_path)

for filename in os.listdir(image_dir):
    if filename.endswith('.jpg') or filename.endswith('.jpeg'):
        img = Image.open(os.path.join(image_dir, filename))

        img = img.resize((width, height))
        img = np.array(img).astype('float32')

        img = np.expand_dims(img, axis=0)
        img = np.transpose(img, (0, 3, 2, 1))

        input_name = sess.get_inputs()[0].name
        result = sess.run(None, {input_name: img})

        result = np.reshape(result, (-1))
        print("{}: {}".format(filename, ', '.join(np.array2string(r.flatten(), separator=', ', max_line_width=np.inf) for r in result)))
반응형

+ Recent posts