연구실 네트워크를 기가비트으로 구성하면서 맥 과 리눅스, 리눅스 대 리눅스, 맥 대 맥 연결은 모두 기가빗 속도 300메가 이상이 나와주는데 윈도우 XP, 윈도우 7녀석들은 100메가 속도 밖에 안나온다. 왜이럴까?
다음 사항을 모두 체크했다
1. 네트워크 연결 상태가 기가빗인가?
2. CPU점유율이 혹시 100프로인가?
3. 하드 속도문제? -> iperf로 테스트하면 이문제는 피할수 있다
4. 네트워크 드라이버 문제?
5. MTU 등 tcp/ip설정 문제?
6. 윈도우의 QOS기본 설정문제?(윈도우는 20% 대역폭을 기본으로 확보해놓는다)
7. 점보 프레임 설정여부?
전부,, 전부 아니였다. 원인은 Netcare라는 보안프로그램때문. 요즘 패킷을 감시하거나 이상동작하는 컴퓨터를 걸러내기위해서 네트워크 드라이버위에 감시툴을 설치하는데 이게 문제였다.
iperf 로 상대방에 연결을 한결과 100메가 처럼 동작한다. 원인은 아래 넷케어 커널 드라이버 같은 녀석 때문.(기본으로 설치되는것 이외에 네트워크에 영향을 주는 드라이버가 있을경우 이녀석이 원일일수 있다.)
제거후에 테스트 한 화면
VMWARE에서 테스트한것이라 124메가 밖에 안나왔지만 후배 XP에서는 700메가를 넘겨주시고 WIN7에서는 300메가를 넘겨주었다. 두녀석의 차이가 2배나 나는것은 아마 XP에서 위의 6가지에 해당하는 사항을 전부 옵티마이즈한 결과가 아닐까 싶다.
기가빗 네트워크 환경을 설정을 했는데 100메가 이상의 속도가 안나온다면 기가빗 네트워크 최적화를 찾아보지말고 100메가가 안나오게하는 방화벽, 네트워크 드라이버, PCI Express슬롯 사용여부를 체크하는게 좋을듯 하다. (PCI슬록의 기가빗은 대역폭 제한이 생겨서 느리다고한다.)
2. 콘솔에서 sudo tlmgr --location=http://ftp.ktug.or.kr/KTUG/texlive/2011 install collection-kotex 실행, 2011은 Ktug에서 현재 배포중인 년도 버전으로
3. 각자 맞는 툴사용 (Latexian추천)
세상이 참 살기 좋아진다. 명령어 각각 넣어서 기존 텍스라이브러리랑 병합했어야하는데
명령어 한줄로 끝나는 아름다운세상.
글도 뚝딱 만들어주는 툴은 없을까?...
영문 맞춤법 기능이 필요한분은 Latexian쓰시는게 좋을듯 합니다. TexLive에 있는 기본 편집기는 문법검사를 안해주고 표시고 안해줘서 좀 난감해요.
- 반듯이 콘솔에서 test파일을 만들어서 latin1으로 변경되어 깨진거을 확인해야합니다.
- 만약에 latin1변환으로 깨진것이아니라면 직접 찾아내서 스크립트를 변경해 주면 됩니다.
- 만약에 일부 테그만 깨진것이라면 name, artist album 같은 부분을 일부분만 적용해주어야합니다.
- XCode를 깐다.
- 아이폰과 개발툴을 연동시켜놓는다.
- Hello World 라는 버튼눌러서 label 변화시키는것 정도는 해본다.
- Object-C 란?
const size_t bytesPerRow = (bitPerPixel * width)/8;
CGBitmapInfo bi = kCGImageAlphaPremultipliedLast;
CGColorSpaceRef cs = CGColorSpaceCreateDeviceRGB();
CGContextRef context = CGBitmapContextCreate(scrbuff, width, height, bitsPerComponent, bytesPerRow, cs, bi);
CGImageRef imageRef = CGBitmapContextCreateImage(context);
이런 녀석들인데요. CGContextRef에 Ctrl + 마우스 오른쪽 버튼을 눌러서 Jump To Definition을 눌러봅니다. 정의를 보면 typedef struct CGContext *CGContextRef; 이렇게 되어있습니다. 포인터랍니다. 트레이스 툴로 쫓아가보시면 메모리 릭이 무한이 발생합니다. 한 2분 켜놔봤는데 메모리릭이 가비지 컬렉션에 의해서 사라지는것 같지는 않습니다. 개발자여러본 모르는 객체들은 delloc를 하시고 자신이 포인터 변수로 선언을 안했더라도 원형을 보시고 포인터면 제거해 주셔야합니다. 제거 함수가 따로 제공되는듯 하지만 모르신사면 free[context]; 로도 충분한것 같습니다. 저함수의 제거함수는 CGContextRelease() 입니다. 1장에서 말하고싶은것은 이겁니다. 모바일은 항상 메모리 릭이 큰 문제였고 어느 오브젝트 씨책이나 가비지컬렉션이 우수하다, 오브젝트씨는 매우 좋은언어다라고 찬사를 하지만 이전에 개발하신것과 다르지 않습니다. 개발자가 일일히 객체를 파악하고 있어야하고 포인터 변수면 항상 릴리즈 해야합니다. 또한 alloc 하면 해제 해야합니다. 대부분 opengl es를 사용하지 않는 개발자분들께서 화면 갱신속도에 문제가 생기십니다. 메모리 릭이 있는 코드 입니다. -
-(void)initImage
{
const size_t width = scr_width;
const size_t height = scr_height;
const size_t bitsPerComponent = 8;
const size_t bitPerPixel = 32;
const size_t bytesPerRow = (bitPerPixel * width)/8;
CGBitmapInfo bi = kCGImageAlphaPremultipliedLast;
CGColorSpaceRef cs = CGColorSpaceCreateDeviceRGB();
CGContextRef context = CGBitmapContextCreate(scrbuff, width, height, bitsPerComponent, bytesPerRow, cs, bi);
CGImageRef imageRef = CGBitmapContextCreateImage(context);
image2 = [UIImage imageWithCGImage:imageRef];
CGImageRelease(imageRef);
CGContextRelease(context);
CGColorSpaceRelease(cs);
}
static int a=0;
-(void)drawRect:(CGRect)rect
{
[self initImage];
imageView2 = [[UIImageView alloc]initWithImage:image2];
[imageView2 setFrame:CGRectMake(64, 0, scr_width, scr_height)];
[self addSubview:imageView2];
}
메모리 릭이 없는 코드 입니다.
-(void)initImage
{
const size_t width = scr_width;
const size_t height = scr_height;
const size_t bitsPerComponent = 8;
const size_t bitPerPixel = 32;
const size_t bytesPerRow = (bitPerPixel * width)/8;
CGBitmapInfo bi = kCGImageAlphaPremultipliedLast;
CGColorSpaceRef cs = CGColorSpaceCreateDeviceRGB();
CGContextRef context = CGBitmapContextCreate(scrbuff, width, height, bitsPerComponent, bytesPerRow, cs, bi);
CGImageRef imageRef = CGBitmapContextCreateImage(context);
image2 = [UIImage imageWithCGImage:imageRef];
CGImageRelease(imageRef);
CGContextRelease(context);
CGColorSpaceRelease(cs);
}
static int a=0;
-(void)drawRect:(CGRect)rect
{
if(a==0){
[self initImage];
imageView2 = [[UIImageView alloc]initWithImage:image2];
[imageView2 setFrame:CGRectMake(64, 0, scr_width, scr_height)];
[self addSubview:imageView2];
a=1;
}
else {
[self initImage];
imageView2.image= image2;
[imageView2 setFrame:CGRectMake(64, 0, scr_width, scr_height)];
}
}
메모리 릭은 어디서 발생할까요 ?
imageView2 = [[UIImageViewalloc]initWithImage:image2];
이부분이 문제입니다. imageView를 계속 할당하기때문에 계속 메모리에 쌓이게 됩니다. 그러자고 dealloc를 하면 속도에 손해를 보게 됩니다. 이렇게 할당을 한번해야하는 코드는 임의로 한번하게 정해주세요 코드가 지져분 해지더라도. 그리고 ImageView 지역으로 선언되어있더라도 메모리 해제가 안되므로 꼭 해제를 해주셔야합니다. 자, 여기서 우리는 Object-C를 너무 심도있게 나갈필요가 없다는것을 알게됩니다. 걍 쓸모있는 객체는 가져다 쓰면되고 나머지는 C/C++모듈로 외부에서 호출하면됩니다. 속도는 C/C++이 더 빠릅니다. 왜냐면 OBject-C 는 객체가 객체를 물고가기때문에 느려집니다. C/C++에서 C 로 함수하나짠거랑 C++ 클레스 화해서 짠거랑 어느것이 빠를까요? 를 생각해보시면 됩니다.
- C/C++ 개발
- 정리
- FREENAS 홈페이지에서 설치 파일을 다운받습니다.
- VMWARE를 열어서 디스크를 리눅스용으로 1기가 만드십니다.
- FREENAS 이미지로 부팅을 수행한뒤 디스크로 FREENAS를 설치합니다.(기타 FREENAS설정 문서참고하세요)
- VMWARE를 종료하고 물리적디스크(실제 백업용으로 쓸 디스크) 또는 백업용 가상 디스크를 생성합니다.
- FREENAS에서 새로 추가한 디스크를 마운트하고 AFP공유옵션을 켜주고 공유디스크를 설정합니다.
- 맥으로 와서 다음과같이 명령을 처줍니다.
- defaults write com.apple.systempreferences TMShowUnsupportedNetworkVolumes 1
- 공유란에 freenas공유 폴더가 있는것을 확인합니다. 또는 커맨드 + K 를 눌러서 afp://서버주소 를 쳐서 공유가 제대로 이루어졌는지 확인합니다.
- 타이머신을 켜서 디스크를 공유된 폴더를 선택하고 백업을 수행합니다.
qmail 설정편들을 살펴보면 qmail + mysql + courier + qmailadmin + vpopmail 까지 설치를 하는데(qmail.kldp.org나 googling하면 많이 나옴, 자세한 내용 생략).
courier이 구버전이기 때문에 vpopmail의 계정확인 기능(vchkpw)을 사용할 수 없다. 그렇다고 SSL(암호화)기능을 포기하고 서버가 위험에 노출되는것을 감수하자니 마음에 들지 않는다.
삽질을 하던중 에러로그를 살피면서 다음과 같은 설정만 변경해주면 된다는것을 알았다.
1. /etc/courier/authlib/authdaemonrc의 내용중
authmodulelist="authmysql authpam"로 설정
2. /etc/courier/authlib/authmysqlrc의 내용중
MYSQL_SERVER localhost
MYSQL_USERNAME vpopmail
MYSQL_PASSWORD ######암호
MYSQL_SSL_KEY /path/to/file
MYSQL_SSL_CERT /path/to/file
MYSQL_SSL_CACERT /path/to/file
MYSQL_SSL_CAPATH /path/to/file
MYSQL_SSL_CIPHERS ALL:!DES
MYSQL_SOCKET /var/run/mysqld/mysqld.sock # 사용자마다 다름
MYSQL_PORT 3306 #사용자마다 다름
MYSQL_OPT 0 # 기능없음
MYSQL_DATABASE vpopmail # vpopmail 데이터베이스 이름
MYSQL_USER_TABLE vpopmail # vpopmail 데이터베이스 이름
MYSQL_CRYPT_PWFIELD pw_passwd # 데이터베이르 레코드
MYSQL_UID_FIELD pw_uid #데이터베이스 레코드
MYSQL_GID_FIELD pw_gid #데이터베이스 레코드
MYSQL_LOGIN_FIELD pw_name #데이터베이스 레코드
MYSQL_HOME_FIELD pw_dir #데이터베이스 레코드
데이터 베이스 레코드의 원본은 다음과 같다
pw_name | pw_domain | pw_passwd | pw_uid | pw_gid | pw_gecos | pw_dir | pw_shell | pw_clear_passwd |
해당 데이터베이스는 qmailadmin에서 사용하고 vpopmail 에서 만들어주는것이다.
SSL포기하고 다른 imap이나 pop3알아 보시던 분들은 위의 내용만 패치하시고 쓰시면 될것 같습니다.
- 소스 출처는 밝혀주세요-.
정액제를 사용하지 않는경우 필히 3G네트워크 접근을 막아야하는데 설정방법은 다음과 같다.
시작 -> 설정 -> 연결 -> 연결 -> 고급 -> 네트워크 선택
인터넷에 자동으로 연결된는 프로그램은 다음과 같습니다 항목에
SKT 3G를 -> 회사 내부 네트워크로 변경
정액제를 사용하더라도 나와같이 사무실과 집에서 주로 있는 사람의 경우 불필요하게 3G네트워크를 사용하여 패킷을 낭비하는경우가 있는데 Activesync나 WiFi를 이용하면 이러한 불필요한 패킷을 절약할 수있다.
1.Activesync
파일 -> 연결설정 -> 연결대상
을 인터넷 탭으로 변경
2. WIFI의 경우도 WIFI검색 -> AP선택 -> 무선네트워크구성 -> 연결대상
을 기본 인터넷 설정
이와같이 설정을 하게되면 3G접속보다 우선시되어 연결이 된다.
요금의 과금 여부는 안테나 탭이 3G혹은 H로 접속이 되느냐 마냐 하는것이다.
나의 경우엔 RSS피드 2개와 이메일을 1시간 단위로 업데이트 하고 있는데 10000원 정액제로 쓸만한것 같다.







Prev