Google Open Source Blog 글

zopfli 프로젝트 홈


구글에서 몇 일 전에 zopfli (좁플라이)라는 새로운 압축 알고리즘을 공개했는데,

다들 오해하고 있는 부분이 있는듯 해서, 글 한번 남겨봅니다.


일단 중요한 부분, 실제 압축 효율이 다른 압축 알고리즘에 비해 좋은가?

==> 아닙니다. 실제 압축률은 rar 이라던가 7zip 이 더 좋습니다.


그럼 이게 무슨 의미가 있는가?

==> zlib 호환 압축 알고리즘이라는 것입니다.

     즉, 기존에 zlib 기술을 사용하던 분야에서 압축 해제 프로그램의 업데이트 없이 적용이 가능하다는 것이지요.

     위 블로그에 적힌 것 처럼 gzip, Zip, PNG, HTTP requests 등의 비트 스트림 압축부분에 적용한다면,

     인터넷 트래픽을 획기적으로 줄일 수도 있을 것입니다.


100배나 느리다는데?

==> zopfli 프로젝트 홈에 표시되어 있기로는 ~100x slower 라고 표시되어 있습니다만,

      블로그 글에 따르면 cpu 소요시간으로 따지면 zlib 최대 압축으로 했을 때 보다

      2-3 배 정도 차이난다고 되어 있습니다.

      사람들이 이것을 두고 누가 쓰겠냐? 라고 하는데...

      구글이 그 정도 테스트도 안하고 오픈했을까 싶네요.

      보통 압축은 한 번만 하면 되는 것이고 실제 트래픽의 5%만 줄일수 있다고 해도

      그 비용은 상당히 클테니깐요.


특별히 클라이언트가 해야 할 것이 없으니 알게 모르게 어느 순간 우리에게 다가와 있을것 같네요.

보이지 않는 영역에 까지 세상을 바꾸려는 노력을 하고,

그 노력을 공개한 구글에게 박수를 보내며 이만~

반응형

설정

트랙백

댓글

원래 Windows 환경에서 사용할 만한 컴파일러와 IDE 에 대한 이야기를 쓰려다가,

msys 에서 아래와 같은 에러가 발생하여, 여기에 대한 내용부터 기록에 남긴다.


*** Couldn't reserve space for cygwin's heap (0xXXXXXXXX <0xXXXXXXX>) in child, Win32 error 0


집에서는 잘 되는데, 회사에선 항상 저런 메시지를 내면서 msys 의 대부분의 실행 파일들이 동작하지 않는다.


간단하게 결론부터 말하면 child process 가 fork() 될 때,

dll 파일이 로드되는 메모리 주소가 서로 다르게 되어 fork() 가 실패하기 때문이다.

( 이게 무슨 말이냐 라고 묻는다면, 납득할 만하게 설명할 자신은 없다. -_-;;

  좀 더 자세한 설명을 원한다면 아래 포스트를 읽어보라.

  http://old.nabble.com/Re%3A-fork-problem-on-Windows-XP-64-bit-p31154393.html )

( 예전에는 cygwin 에서도 이러한 에러 메시지를 본 기억이 있는데,

  최근에는 cygwin setup 시에 dll 파일들의 base address 를 재설정 한다고 하는 듯하다. )


이리저리 구글링 좀 해 본 결과, 아직까지 근본적인 해결방법은 없는듯 한데,

실제로 msys 의 릴리즈 노트를 봐도 저 문제를 해결하지는 못하고

다만 rebase 되는 상황을 최소화 하기 위해 msys-1.0.dll 파일의 base address 를 바꾸었다고 되어있다.

( 분명 Windows 는 dll 파일을 로드할 때, 주소 충돌이 생기면 base address 를 알아서 조정한다고 했던거 같은데, 

 왜 msys 에서는 안되는지 잘 모르겠다. dll 파일 자체에 해당 기능을 enable 하는 플래그가 있다고 본 거 같다.

 하지만 더 구체적인 근거를 찾기엔 시간도 부족하고... 해서 패스 )


어쨌든 저러한 문제가 생기면 msys 에 포함된 dll 파일들의 base address 를 바꾸어 주어야 하는데,

이 때 사용하는 프로그램이 rebase 프로그램이다.

문제는 msys 에 포함된 rebase 를 실행하기 위해서는 msys-1.0.dll 이 필요하다는 거.

그래서 msys-1.0.dll 이 의존적이지 않는, Win32 native binary 가 필요한데,

직접 빌드하려 소스를 열어보니 익숙치 않은 autoconf, automake 조합으로 빌드되도록 되어있다.

하지만 나와 같은 (그리고 이런 문제를 만난 다른 많은 사람들과 같은) 생각을 가진 분이

이미 빌드해 놓은 파일이 있었다.


소스: http://repo.or.cz/w/msysgit.git/tree/322c42c780833a52bd7cd0358a562ab243ecfbce:/src/rebase

바이너리: http://repo.or.cz/w/msysgit.git/history/76920dc49da361257cbccb02ea63b3e5357fe353:/bin/rebase.exe


위 툴을 받아, msys 의 bin 디렉토리에 복사를 한다. (보통 C:\MinGW\msys\1.0\bin 일 것이다.)

그리고 해당 디렉토리에서 cmd 창을 열고 아래와 같이 입력한다.

C:\MinGW\msys\1.0\bin>rebase -b 0x30000000 msys-1.0.dll

새로운 Base 주소는 각자 적당히 찾아서 적으면 될듯 하다.

그리고 이제 다른 dll 파일들에 대하여 rebase 작업을 한다.

이제 MinGW Shell 을 열어도 에러가 뜨지 않으니, MinGW Shell 을 열고,

$ mingw-get install msys-rebase

를 실행한다. 위 명령을 성공적으로 실행되면, MinGW Shell 을 닫고,

탐색기에서 msys 의 bin 디렉토리로 이동하여 dash 를 실행한다.

그리고 아래와 같이 입력한다.

/bin/rebaseall

만약 에러 메시지가 출력된다면, (예를 들면 read-only 속성이 걸려 있다던가...)

에러 메시지를 보고 적절한 조치를 취해 준 뒤 다시 실행한다.


마지막으로

/bin/peflagsall

을 해주면,

(위에서 이야기 했던) dll 파일에 dynamicbase flag 를 set 한다고 되어 있다.

dash 에서는 현재 환경을 MinGW32 로 인식하고 있어서 별 다른 작업을 하지는 않는데,

실제 문제가 되는 건 msys 기 때문에 스크립트 파일의 Platform 환경변수를

강제로 바꾸어 주어야 되는지는 잘 모르겠다.

써 보다가 문제가 생긴다면 고려해 봐야할 듯.


P.S

아무래도 생각해도 이 에러가 발생한 건,

회사의 보안 프로그램이 해당 영역을 이미 차지하고 있기 때문이라는 생각이 든다.


반응형

설정

트랙백

댓글

In Code::Blocks can set programs arguments in IDE ("Project > Set programs' arguments...")

But in windows version, the redirection is not working.


How to make it enable?


The problem is the 'cb_console_runner.exe'.

That use CreateProcess() function to start the child process.

Unfortunately, CreateProcess() CAN'T handle redirections.

Why does 'cb_console_runner.exe' use this function?


It is written in source code.

    //Windows's system() seems to not be able to handle parentheses in
    //the path, so we have to launch the program a different way.

( See this svn log. )


So I complied the 'cb_console_runner.exe' using system() instead of CreateProcess().

In my windows7, It works well and it seems that there is no problem about parentheses.

( That was modified in 2006. Now does it fixed?. I don't know. )


Anyway I replaced the 'cb_console_runner.exe' with my own build.

If anyone having a redirection problem in windows version of Code::Blocks, try this one.

cb_console_runner.exe

(Just copy to where Code::Blocks installs and replace original file with this)


Or you can build it easely with just a few modification. (That's why I didn't attach soruce code.)

I modified and built this in Code::Block. ;)


P.S

영어로 쓰고 나니 진에 빠져서, 한글로 내용을 다시 쓰는건 패스.

도대체 구글링 해도 시원하게 답해주는 사람이 없어서,

직접 원인을 찾아서 수정한 버전을 사용하기로 함.

반응형

설정

트랙백

댓글