NAS & ODROID/NAS, ODROID

오드로이드 XU4 를 개인 클라우드 서버로 - IRQ Balancing

awesometic 2017. 5. 2. 18:59
반응형

Tweak 출처: https://obihoernchen.net/1416/odroid-xu4-tune-network-and-usb-speed/

 멀티 프로세서 시스템의 경우 하드웨어 인터럽트를 한 프로세서에서만 다룰 필요가 없습니다. 오드로이드 XU4의 AP도 멀티 프로세서이니, 각 USB에서 발생하는 인터럽트를 각기 다른 프로세서로 보내 성능을 올립시다.


170621

https://forum.odroid.com/viewtopic.php?f=146&t=26986&sid=3611efeb6c2314a807ba6eb688f56aba

4.9.27 버전부터 기본적으로 적용되어 있는 것으로 보입니다. 이전 버전 사용자들만 적용해주세요 :)




1. 현재 상태 확인

 오드로이드의 프로세서들을 봅시다.

awesometic@odroid:~$ lscpu -e
CPU SOCKET CORE ONLINE MAXMHZ    MINMHZ
0   0      0    yes    1300.0000 200.0000
1   0      1    yes    1300.0000 200.0000
2   0      2    yes    1300.0000 200.0000
3   0      3    yes    1300.0000 200.0000
4   1      4    yes    2000.0000 200.0000
5   1      5    yes    2000.0000 200.0000
6   1      6    yes    2000.0000 200.0000
7   1      7    yes    2000.0000 200.0000

 CPU 0~3은 최고 1.3Ghz로 돌 수 있지만, CPU 4~7은 2Ghz까지 올라갈 수 있네요. 엑시노스가 도입한 ARM의 big.Little 기술 뭐 그런 것 같습니다. 각 인터럽트는 동작 속도가 더 빠른 CPU 4~7이 처리하는 게 맞겠죠?

 각 인터럽트에 대해 어떤 프로세서가 활동하는진 명령어로 간단히 알아낼 수 있다고 합니다.

awesometic@odroid:~$ grep -E 'CPU0|usb' /proc/interrupts
           CPU0       CPU1       CPU2       CPU3       CPU4       CPU5       CPU6       CPU7       
 91:          1          0          0          0          0          0          0          0     GIC-0 103 Edge      ehci_hcd:usb1, ohci_hcd:usb2
143:      10335          0          0          0          0          0          0          0     GIC-0 104 Edge      xhci-hcd:usb3
144:     267886          0          0          0          0          0          0          0     GIC-0 105 Edge      xhci-hcd:usb5

 뜯어보면, usb1, usb2에 대한 작업은 91번으로 넘기고, 이는 CPU0이 처리합니다. 그리고 usb3에 대한 작업은 143번, usb5에 대한 작업은 144번인데 얘네도 CPU0에서 처리하네요.

 출처 블로그에 따르면 usb2 는 USB 2.0에 대한 인터럽트가 발생하는 곳이고, usb3는 USB 3.0 포트, usb5는 두 번째 USB 3.0 포트임과 동시에 기가비트 이더넷에도 연결되어 있다고 합니다.

 블로그에서 제안하는 대로 usb3과 usb5에 대한 인터럽트를 빠른 CPU4, CPU5로 넘기도록 수정하겠습니다.


2. IRQ 튜닝

 우분투가 부팅될 때, 부트 과정 마지막에 /etc/rc.local 파일이 항상 실행됩니다. 이 파일에 적당한 명령어를 넣어 줍시다.

sudo vi /etc/rc.local

 기본으로 적혀있는 주석 덩어리 바로 밑에 아래 내용을 추가합니다.

# Move USB and network irqs to A15 CPU cluster
# usb2
echo 6 > /proc/irq/91/smp_affinity_list
# usb3
echo 5 > /proc/irq/143/smp_affinity_list
# network (usb3)
echo 4 > /proc/irq/144/smp_affinity_list

 오드로이드를 재부팅합니다.

sudo reboot


3. 결과 확인

 잘 적용됐는 지 다시 한번 확인해 봅니다.

awesometic@odroid:~$ grep -E 'CPU0|usb' /proc/interrupts
           CPU0       CPU1       CPU2       CPU3       CPU4       CPU5       CPU6       CPU7       
 91:          1          0          0          0          0          0          0          0     GIC-0 103 Edge      ehci_hcd:usb1, ohci_hcd:usb2
143:       1065          0          0          0          0       3113          0          0     GIC-0 104 Edge      xhci-hcd:usb3
144:        569          0          0          0      18234          0          0          0     GIC-0 105 Edge      xhci-hcd:usb5

 보시다시피 CPU4와 CPU5도 일하고 있네요. 144번이 네트워크, 143번이 제 유전원 USB 3.0 허브가 꼽힌 USB 3.0에 대한 인터럽트를 담당하고 있었습니다.




 드디어 모든 과정이 끝났습니다.

 지금까지 다룬 것들 중, 좀 더 세세한 나머지 부분은 적당히 입맛대로 수정하셔서 사용하시면 될 것 같습니다.

 금방 끝날 거라 생각했는데.. 생각보다 너무 오래 걸렸네요. 보기 안 좋게 쓰인 것 같아 스스로 천천히 다듬어가겠습니다.

 이젠... 2019년 초까진 오드로이드 포맷할 일 없을 겁니다..... :)




전체 글 목록
2017/04/23 - [오드로이드 XU4] - 오드로이드 XU4 를 개인 클라우드 서버로 - 1. 우분투 설치
2017/04/24 - [오드로이드 XU4] - 오드로이드 XU4 를 개인 클라우드 서버로 - 2. Webmin 설치
2017/04/25 - [오드로이드 XU4] - 오드로이드 XU4 를 개인 클라우드 서버로 - 3. 외장하드 마운트
2017/04/25 - [오드로이드 XU4] - 오드로이드 XU4 를 개인 클라우드 서버로 - 4. Samba
2017/04/28 - [오드로이드 XU4] - 오드로이드 XU4 를 개인 클라우드 서버로 - 5. Plex
2017/04/30 - [오드로이드 XU4] - 오드로이드 XU4 를 개인 클라우드 서버로 - 6. Nginx, PHP, MariaDB
2017/05/02 - [오드로이드 XU4] - 오드로이드 XU4 를 개인 클라우드 서버로 - 7. h5ai
2017/05/02 - [오드로이드 XU4] - 오드로이드 XU4 를 개인 클라우드 서버로 - 8. Wordpress
2017/05/02 - [오드로이드 XU4] - 오드로이드 XU4 를 개인 클라우드 서버로 - 9. 무료 도메인
2017/05/02 - [오드로이드 XU4] - 오드로이드 XU4 를 개인 클라우드 서버로 - 10. 무료 SSL
2017/05/02 - [오드로이드 XU4] - 오드로이드 XU4 를 개인 클라우드 서버로 - IRQ Balancing
2017/05/08 - [오드로이드 XU4] - 오드로이드 XU4 를 개인 클라우드 서버로 - CPU Governor

반응형