커널 코드를 살펴보다보면 __read_mostly 라는 매크로를 볼 수 있게 된다. 

자주 읽지만, 쓰는 것은 드문 데이터들이 있을 수 있다. 이런 데이터들을 캐쉬에 올려 놓으면 read 할때 유리하게 된다. 

__read_mostly 라는 매크로를 붙여주면 그 데이터는 캐쉬에 올라가게 된다. 


SMP 환경에서 이런 특성(자주 읽지만, 쓰는 것은 드문)의 데이터들은 캐쉬에 올려놓고 사용하는 것이 유리하다고 하니 필요에 따라서 이 매크로를 사용하도록 하자. 



'development' 카테고리의 다른 글

[u-boot] RPC : sendmsg returned error 101  (0) 2013.07.19
[Kernel] Kbuild system  (0) 2013.07.12
[etc] Reglar expressions  (0) 2012.09.19
[kernel] initrd/initramfs 편집하기.  (0) 2012.05.29
[u-boot] u-boot 사용법  (0) 2012.03.08
블로그 이미지

김유석0

,

virtualbox 사용법

linux 2013. 3. 7. 11:09

Table of Contents

- 기본 환경

- virtual box 가 동작 안될때

- 가상 머신을 console 모드에서 실행시키는 방법


- 기본 환경

  OS : Ubuntu 12.10



- virtual box 가 동작 안될때

 dev/vboxdrv 어쩌구 저쩌구 하면서 동작 안될때가 많다. 

 이유는, 아래 순서로 설치해야 하는데,

    - linux kernel header

    - dkms

    - virtualbox-dkms 


  어처구니 없게도, ubuntu 12.10 첫 설치때부터 이 순서가 제대로 지켜지질 않는다. virtualbox-dkms, dkms 를 삭제하고 위 순서대로 다시 설치하면 된다. 


 삭제와 재설치는 아래와 같이 하면 된다. 


$ sudo aptitude remove virtualbox-dkms 

$ sudo aptitude remove dkms 


$ sudo aptitude install linux-headers-$(uname -r)

$ sudo aptitude install dkms

$ sudo aptitude install virtualbox-dkms



- 가상 머신을 console 모드에서 실행시키는 방법

  서버등에서 가상 머신을 돌리고 클라이언트에서 원격으로 접속하는 방식을 많이 사용하게 되는데, 이럴때 아래와 같이 실행시키면   된다. 

poplinux@poplinux:/usr/src$ vboxmanage startvm win7 








'linux' 카테고리의 다른 글

lxc 에 외부 IP 설정하여 직접 접속하는법  (0) 2019.01.24
cpu clock(속도) 조절  (2) 2013.03.04
opensource 정보  (0) 2012.05.18
IPv4 packet forwarding  (0) 2012.05.03
리눅스 콘솔내용을 시리얼로 출력해서 보려면  (0) 2012.04.03
블로그 이미지

김유석0

,

cpu clock(속도) 조절

linux 2013. 3. 4. 19:06

Table of contents

1. 환경

2. cpu 설정 확인

3. 설정법

4. 정리글



1. 환경

  CPU : Intel(R) Core(TM)2 Duo CPU     E7400  @ 2.80GHz

  RAM : 8GByte

  model : Samsung SENS SF511

  OS : ubuntu 12.04 64bit


2. cpu clock 설정 확인

2-1. cpu 정보 있는곳

  cpu 0 : /sys/devices/system/cpu/cpu0/cpufreq

  cpu 1 : /sys/devices/system/cpu/cpu1/cpufreq

  cpu 2 : /sys/devices/system/cpu/cpu2/cpufreq

  cpu 3 : /sys/devices/system/cpu/cpu3/cpufreq


poplinux@poplinux: ~$ (3.33) ls /sys/devices/system/cpu/cpu0/cpufreq/

affected_cpus

cpuinfo_max_freq = > 사용 가능한 최고 clock

related_cpus

scaling_cur_freq

scaling_max_freq

stats

bios_limit

cpuinfo_min_freq

scaling_available_frequencies => 설정 가능한 clock 목록

scaling_driver

scaling_min_freq

cpuinfo_cur_freq => 현재 동작중인 clock

cpuinfo_transition_latency

scaling_available_governors => 설정 가능한 동작 mode

scaling_governor => 현재 설정되어 있는 동작 mode

scaling_setspeed


cpufreq 디렉토리에는 여러 파일이 있지만 위에 굵게 표시한 파일만 신경쓰면 된다.




3. 설정법

3-1. 준비

속도 설정은 직접 cpufreq/* 의 파일들을 수정해서 할 수도 있지만, cpufreq-set 바이너리를 사용하는 것이 편리하다. 

아래와 같이 설치한다. 


 sudo aptitude install cpufrequtils

 


3-2. 설정 방법

아래 명령을 수행하면, cpu0, cpu1, cpu2, cpu3 을 최대 성능을 내도록 설정하게 된다. 


 sudo cpufreq-set -c 0 -g performance
 sudo cpufreq-set -c 1 -g performance
 sudo cpufreq-set -c 2 -g performance
 sudo cpufreq-set -c 3 -g performance


  

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

  /sys/devices/system/cpu/cpu1/cpufreq/scaling_governor 

  /sys/devices/system/cpu/cpu2/cpufreq/scaling_governor 

  /sys/devices/system/cpu/cpu3/cpufreq/scaling_governor 


파일의 내용을 "performance" 로 변경하게 된다. 


3-3. 부팅시점에 자동 적용

 3-2 에서 설명한 방법은 부팅 이후에 사용자가 수동으로 변경하는 방법으로 부팅 시점에 자동으로 설정하려면 아래와 같이 하면 된다.


step 1. /etc/init.d/cpufrequtils 수정

poplinux@poplinux: cpufreq$ (3.33) vi /etc/init.d/cpufrequtils


GOVERNOR="performance"


 step 2. /etc/rc2.d/S19cpufrequtils 추가 ( 원래 있었으면 생략)

 poplinux@poplinux: rc2.d $ (3.33) ln -s ../init.d/S19cpufrequtils ./


step 3. /etc/rc2.c/S99ondemand 삭제

 ubuntu 에서는 CPU clock 를 상황에 따라 자동으로 변경하게 하는 것을 기본으로 하고 있는데 그걸 설정하는 스크립트가 S99ondemand 입니다. 


 이걸 삭제해야 합니다.   


  poplinux@poplinux: rc2.d $ (3.33) rm S99ondemand



 여기까지 작업하고 재부팅하면 사용 가능한 최대성능으로 동작하게 됩니다.(CPU 에 한해서) 



4. 정리글

 컴파일 할 때는 큰 영향은 없을 수도 있지만, 일상적인 사용시에는 버벅거림이 덜 하게 됩니다. 








'linux' 카테고리의 다른 글

lxc 에 외부 IP 설정하여 직접 접속하는법  (0) 2019.01.24
virtualbox 사용법  (0) 2013.03.07
opensource 정보  (0) 2012.05.18
IPv4 packet forwarding  (0) 2012.05.03
리눅스 콘솔내용을 시리얼로 출력해서 보려면  (0) 2012.04.03
블로그 이미지

김유석0

,

Table of contents

1. Regular expression?

2. 구성요소

  2-1 메타문자? 리터럴 문자?

  2-2 메타 문자

  2-3 리터럴 문자

예제




1. Regular expressions?

  텍스트를 표현하는 일종의 규칙입니다. 컴퓨터 세계에서는 분야 막론하고 다양하게 쓰이고 있으며 반드시 익혀 두어야 하는 기능입니다. 


2. 구성 요소

  2-1. 메타 문자? 리터럴 문자?

    메타 문자는 "*", "-" 등과 같은 특수 문자를 뜻한다. 

    리터럴 문자는 일반적인 문자를 뜻한다. 

  2-2 메타 문자

    메타 문자는 상황에 따라 메타 문자로 인식되기도 하고 리터럴 문자로 인식되기도 합니다. 


    '^' : 시작을 의미함. 예를 들어 "^cat" 이라고 표현하면 cat 으로 시작하는 문자열 검색해줌

    '$' : 끝을 의미함. 예를 들어 "cat$" 이라고 표현하면 cat 으로 끝나는 문자열 검색해줌

    '[...]' : 괄호 안에 있는 내용들은 or 이나 범위를 뜻함. 예를 들어 [aB] 는 a 나 B, [0-9] 는 0부터 9까지 를 의미함. 

    '[^...]' : '^' 를 괄호 안에 사용할 경우엔 NOT 의 의미가 된다. 예를 들어 [^0-9] 는 숫자가 아닌것 이라는 의미를 지닌다. 

    '|' : or 의 의미를 지니고 있다. 예를 들어 'Kay|Kim' 는 Kay 와 Kim 중에 하나만 일치해도 된다는 의미를 지닌다. 

    '.' : 아무 문자와 매칭 가능함. 예를 들어  "A.B" 라고 표현할 경우 AaB ACB AXB 모두 매칭됨. 

    '(..)' : 일반적인 괄호와 동일한 역활. 범위를 한정시킴. 예를 들어 "(ABC|DEF):XYZ" 라고 표현 할 경우 ABC:XYZ 나 DEF:XYZ  가  매칭됨

    '\<' : 단어가 시작되는 위치를 뜻하는데 줄바꿈되어 있는 경우에 유용함.

    '\>' : 단어가 끝나는 위치를 뜻하는데 줄바꿈되어 있는 경우에 유용함. 

    '\' : Escape 메타 문자. 위에서 사용한 것과 용도가 명확히 다릅니다. \ 다음에 연달아 나오는 문자는 메타 문자가 아니라 일단 문자로 인식하게 됩니다. '\.' 이라고 표현하면 메타 문자 '.' 의 역활은 사라지고 그냥 문자로 취급됩니다. "ega.att.com" 을 찾고 싶을 때 "ega.att.com" 이라고 표현하면 "megawatt computing" 같은 텍스트가 검색될 수도 있지만, "ega\.att\.com" 이라고 검색하면 원하는 결과를 얻을 수 있습니다.  

    '?' : 바로 앞의 문자가 있거나 혹은 없어도 매칭. 예를 들어 'colou?r" 로 표현할 경우, color, colour 모두 매칭됨.

    '+' : 바로 앞의 문자가 한개 이상 반복되는 경우 매칭됨. 예를 들어 'colo+r' 로 표현할 경우, color, coloor, colooor 이 매칭됨. 하지만 colr 은 'o' 가 하나도 없으므로 실패함.

    '*' : 바로 앞의 문자가 0 개 이상 반복되는 경우에 매칭됨. 예를 들어 'colo*r' 로 표현할 경우, color, coloor, colooor, colr 모두 매칭됨.


  2-3 리터럴 문자

    메타 문자가 뜻과 역활을 가진 문자라면 리터럴 문자는 특정한 뜻이 없는 문자입니다. 우리가 흔히 말하는 텍스트 입니다. 

정규 표현식을 사용하는 이유중의 하나가 텍스트를 편하게 다루기 위함이고 메타 문자도 그 목적을 위한 수단입니다. 




예제

  ^cat$ : cat 만 적혀 있는 문자열

  ^$ : 비어 있는 행

  ^ : 모든 행

  <H[12345]> : <H1>, <H2>, <H3>, <H4>, <H5> 태그 찾아줌



사이트

http://regexlib.com/

http://www.zytrax.com/


'development' 카테고리의 다른 글

[Kernel] Kbuild system  (0) 2013.07.12
[kernel] __read_mostly?????  (0) 2013.05.08
[kernel] initrd/initramfs 편집하기.  (0) 2012.05.29
[u-boot] u-boot 사용법  (0) 2012.03.08
[etc] 네트웍 용어 정리  (0) 2012.03.06
블로그 이미지

김유석0

,

면도기 샀음

일상사 2012. 7. 17. 14:54



질레트 5중날 하나로 4개월을 버티다가 드디어 면도기와 면도날을 셋트로 샀음. 


질레트에서 도루코로 바꾼 이유는?


1. 자게인이 추천해 줘서

2. 싸서


'일상사' 카테고리의 다른 글

[글로스브로] 버블밤 후기  (0) 2014.10.19
놀러 가는거  (0) 2014.08.12
애기 이름 공모중  (14) 2012.02.17
우리 제이 돌잔치  (0) 2011.11.06
관악산  (0) 2011.10.31
블로그 이미지

김유석0

,

Table of contents

  1. initrd ? initramfs ?

  2. initrd, initramfs 구분 방법

  3. initrd 편집하기

  4. initramfs 편집하기 



1. initrd ? initramfs ?

  압축 방법의 차이가 있다는 것은 알겠는데 정확한 차이점은 잘 모르겠음. 이건 나중에 업데이트 할 것임. 


2. initrd, initramfs 구분 방법

image name : initrd-2.4.19.img.gz


아래와 같이 입력시 


  gunzip -c /boot/initrd-2.4.19.img.gz | file -


아래와 같이 나오면 initrd


  "/dev/stdin: Linux rev 1.0 ext2 filesystem data"


아래와 같이 나오면 initramfs 임. 


"/dev/stdin: ASCII cpio archive (SVR4 with no CRC)"



3. initrd 편집하기

3-1. 압출 풀기 & 마운트

  step 1. mkdir temp

  step 2. gunzip -c /boot/initrd-2.4.19.img.gz > initrd.img

  step 3. mount -t ext2 -o loop initrd.img temp/


3-2. 다시 묶기

  step 1. umount temp

  step 2. gzip -9 -c initrd.img > /boot/initrd-2.4.19.img.gz-NEW


4. initramfs 편집하기

4-1. 압출 풀기 & 마운트

  step 1. mkdir temp

  step 2. cd temp

  step 3. gunzip -c /boot/initrd-2.4.19.img.gz | cpio -i


4-2. 다시 묶기

  step 1. pwd

            /root/temp

  step 2. find . | cpio -H newc -o | gzip -9 > /initrd-2.4.19.img.gz-NEW



이 내용은, http://backreference.org/2010/07/04/modifying-initrdinitramfs-files/  의 내용을 번역, 정리한 것임. 


'development' 카테고리의 다른 글

[kernel] __read_mostly?????  (0) 2013.05.08
[etc] Reglar expressions  (0) 2012.09.19
[u-boot] u-boot 사용법  (0) 2012.03.08
[etc] 네트웍 용어 정리  (0) 2012.03.06
[program] 2차원 배열 동적 할당  (0) 2012.02.10
블로그 이미지

김유석0

,

opensource 정보

linux 2012. 5. 18. 13:52

1. util-linux-ng

  - linux 의 각종 기본 util(fdisk, more, fask) 의 소스 코드입니다. 

  -  WEB PAGE : http://kernel.org/~kzak/util-linux-ng/

  - DOWNLOAD :  ftp://ftp.kernel.org/pub/linux/utils/util-linux-ng/


2. coreutils

  - linux 의 가장 기본적인 binary(cp, mv, tail) 의 소스 코드입니다.

  - WEB PAGE : http://gnu.org


3. netperf

  - 네트웍 성능 측정용 도구입니다.

 -  WEB PAGE :  http://www.netperf.org/netperf/NetperfPage.html

  - DOWNLOAD :  ftp://ftp.cup.hp.com/dist/networking/benchmarks/netperf/


4. bsdmainutils

  - col, hexdump, write 등의 소스입니다.





'linux' 카테고리의 다른 글

virtualbox 사용법  (0) 2013.03.07
cpu clock(속도) 조절  (2) 2013.03.04
IPv4 packet forwarding  (0) 2012.05.03
리눅스 콘솔내용을 시리얼로 출력해서 보려면  (0) 2012.04.03
iproute2  (0) 2012.02.07
블로그 이미지

김유석0

,

IPv4 packet forwarding

linux 2012. 5. 3. 11:10
아래와 같은 구성일 때, H1 <-> H2 의 통신을 위해, 

Router 1 의 eth0 과 eth1 사이에 패킷 포워딩,
Router 1 의 eth0 과 eth1 사이에 패킷 포워딩을 해야 한다. 

Router 1 

  eth0 : 1.1.1.1/24

  eth1 : 100.100.100.1/24


Router 2

  eth0 : 1.1.1.2/24

  eth1 : 200.200.200.1/24


Host 1 

  eth0 : 100.100.100.2/24

  default gateway : 100.100.100.1

  

Host 2

  eth0 : 200.200.200.2/24

  default gateway : 200.200.200.1



이때, 커널에서 패킷 포워딩을 하도록 설정해 놓았는지 확인해 보아야 하는데,


/proc/sys/net/ipv4/ip_forward 를 "1"로 설정하면 패킷 포워딩이 동작하고 "0" 으로 설정하면 동작하지 않는다. 



'linux' 카테고리의 다른 글

cpu clock(속도) 조절  (2) 2013.03.04
opensource 정보  (0) 2012.05.18
리눅스 콘솔내용을 시리얼로 출력해서 보려면  (0) 2012.04.03
iproute2  (0) 2012.02.07
ubuntu 에서 tftp server 설치하는법  (0) 2011.11.24
블로그 이미지

김유석0

,

Table of Content

1. Why?

2. BIOS 설정

3. GRUB 설정


1. Why?

 x86 기반에서 작업을 하다보면 시리얼 때문에 고생하게 되는 경우가 종종 있다. 

 예를 들어 네트웍 관련 장비(라우터, Firewall, server)에서 작업할 경우, 장비에 VGA, keyboard, mouse 없이 딸랑 시리얼 포트만 달려있는 경우가 많은데 이런 장비에서 작업 하려면 모든 입,출력을 serial port 를 통해서 해야 한다. 

 보통의 상용 장비는 이런 준비가 다 되어 있지만, 처음부터 시작할 경우엔 개발자가 환경 준비를 모두 해 주어야 한다. 


2. BIOS 설정

 일반적으로 이런 장비들은 BIOS 에서 "모든 출력을 serial(console) 로 보내라" 고 설정하는 옵션이 있다. 이 옵션을 enable 시켜야 한다. 

 이 옵션을 살려주면 보통 부트로더 전까지 시리얼로 input/output 할 수 있다. 


3. GRUB 설정

 BIOS 에서 설정해 주었다고 하여도 GRUB Bootloader 가 동작되면 serial 로 아무런 메시지도 볼 수 없게 된다. 

 그 이유는 GRUB 가 동작하면서 text 기반에서 graphic 기반으로 모드를 바꾸기 때문에 시리얼로는 아무것도 볼 수 없게 되는 것이다. 

우선 아래와 같이 graphic 관련 기능을 모두 주석 처리하자. 

#if loadfind /use/share/grub/unicode.pf2 ; then

#  set gfxmode=auto

#  load_video

#  insmod gfxterm

.

.

.

#fi

#terminal_output gfxterm

# text 모드로 설정 

linux_gfx_mode=text


위와 같이 설정하면 일단 GRUB 부트로더까지는 시리얼로 볼 수 있다. 하지만 부팅을 시작하면 시리얼로는 아무것도 볼 수 없다. 이제는 kernel 옵션을 바꿔 주어야 한다. 

그 다음엔 아래와 같이 kernel option 을 설정하면 부팅로그까지 시리얼로 볼 수 있다. 

 linux /boot/vmlinuz-3.0.0-15-generic root=UUID=865f57fe-30a8-4e6e-9bf8 ro console=tty0 console=ttyS0,115200


하지만 커널 부팅이 완료되고 나면 로그인 창을 볼 수가 없다. 

아래와 같이 /etc/init/ttyS0 파일을 생성해 주어야 한다. 


poplinux@test : $ cd /etc/init

poplinux@test : /etc/init $ cp tty1.conf ttyS0.conf

poplinux@test : /etc/init $ vi ttyS0.conf


# ttyS0 -getty


# This service maintains a getty on ttyS0 from the point the system is 

#started until it is shut down again.


start on stopped rc RUNLEVEL=[2345]

stop on runlevel [!2345]


respawn

exec /sbin/getty -L 115200 ttyS0 vt100




이렇게 하면 로그인 쉘이 동작할때 시리얼로 메시지를 볼 수 있다. 




'linux' 카테고리의 다른 글

opensource 정보  (0) 2012.05.18
IPv4 packet forwarding  (0) 2012.05.03
iproute2  (0) 2012.02.07
ubuntu 에서 tftp server 설치하는법  (0) 2011.11.24
GNOME 설정  (0) 2011.09.27
블로그 이미지

김유석0

,
1. Network
    - http://www.netfilter.org/ 
      iptables, libnfnetlink, libnetfilter_log, libnetfilter_queue, libnetfilter_contrack, contrack-tools, libmnl, ipset, nf-hipac, patch-o-matic-ng, ulogd, xtables-addons 프로젝트를 관리하고 있다. 







블로그 이미지

김유석0

,