Kernel Page Compression(압축) 과 Decompression(압축해제) 에 관해 여쭤보고 싶습니다.
글쓴이: dn3108 / 작성시간: 수, 2014/07/30 - 11:30오후
안녕하세요?
현재 오드로이드 XU 에서 진행하고 있고 Swapping Policy 수정을 하며 공부하고 있는 학생입니다.
다름이 아니라 Kernel 에서 Writeback 할 Victim Page 선정후 swap_writepage() 를 호출하는 것으로 알고있습니다.
또한 Swap-in 과정에서는 swap_readpage() 를 호출하는 것으로 알고 있습니다.
Swap-out 시에 LZO 알고리즘을 통한 Compression 을 진행해 페이지를 압축해서 bio를 통해 write을 하게됩니다.
또한 Swap-in 시에는 LZO 알고리즘을 통해 Decompression 을 진행하고 있습니다.
단! 여기서 Decompression Fail이 나면 안되는 상황임에도 불구하고 Decompression Fail이 자꾸 뜨고있습니다.
생각에 동기화 문제인가 해서 spin_lock을 걸어보았지만 해결이 쉽지않네요..ㅠ_ㅠ
소스 올려드립니다.
답변 기다리겠습니다..감사합니다..
File attachments:
첨부 | 파일 크기 |
---|---|
![]() | 6.41 KB |
Forums:
생각
오드로이드 하드웨어 구성은 잘 모르겠습니다.
그런데 소스 코드를 고치지 않았다면, swap을 사용되는 storage 가령 (Nand, eMMC and NOR.)와 호스트 CPU 사이에 타이밍 문제가 생긴 것은 아닐까요?
Compress/Decompress 은 Intensive 한 memory operation이기에 종종 Memory timing에 적당한 값이 아니면 에러가 발생합니다.
예를 들면, 커널 부팅하다 커널 이미지 압축 풀면서 죽어 버리는 경우도 생깁니다.
자세히 살펴보지는 않았지만, LZO의 경우 압축 된
자세히 살펴보지는 않았지만, LZO의 경우 압축 된 크기가 압축 전 크기보다 큰 경우가 있습니다.
lzo worst로 검색해보시면 커널 소스에서 사용하는 경우를 찾을 수 있을겁니다.
댓글 달기