오버클러킹이 불가능한 인텔 CPU에서 MCHBAR를 이용한 TDP 수정

시리즈

이 글은 이 글 에서 이어집니다. 이쪽도 참고하세요.

면책조항

  • MCHBAR 수정은 CPU (혹은 시스템 보드) 의 보증을 무효화 시킬 수 있습니다. 조심해서 진행하세요. 전 이 글로 인해 발생한 어떠한 피해에 대해 책임을 지지 않습니다.
  • MCHBAR 주소는 시스템마다 다를 수 있습니다. 인텔의 문서를 참고하세요.
  • 인텔 i7-8550U (카비레이크 리프레시) 에서만 테스트 되었습니다.

시작

MSR을 수정하여 TDP 제한을 풀었지만, 여전히 기존 설정값대로 TDP가 계속 내려가서 클럭 제한이 걸리는 경우엔 시스템의 다른 부분에도 제한이 있다는 것을 의심해볼 수 있습니다. 여기에서는 가능성이 높은 선택지인 MCHBAR를 공략해 봅니다.

필요한 도구들

저번 글에서 필요한 내용

MSR_RAPL_POWER_UNIT에 존재하는 전력 단위 값이 이번 글에서 사용됩니다. 제 CPU의 경우엔 다음과 같습니다:

본격적인 작업

패키지 전력 제한 1은 FED159A0h, 패키지 전력 제한 2는 FED159A4h에 존재합니다.

레지스터 값 뒤의 3자리를 10진수로 변환한 뒤 전력 단위 값을 곱하면 현재 TDP가 됩니다. 이 값이 맞는지 다시 한번 확인하세요.

값을 알맞게 수정합니다.

수정한 값을 레지스터에 다시 씁니다.

결과

열 스로틀링의 영향을 받지 않는 환경에서 CPU가 지속적으로 15W 초과의 TDP로 동작하는 것을 확인할 수 있었습니다. XPS 13의 쿨링 설계의 한계로 인해 25W로 지속적으로 동작하지는 못했습니다.

Dell XPS 13 (9360, Kaby Lake-R) 에 해킨토시를 설치 (했던 기록)

왜죠..?

평소와 같이 장난아니게 한가하던 토요일 밤, 마유와 이야기 하다가 이런 이야기가 나오게 되었고…

stringByAddingPercentEncodingWithAllowedCharacters:
– Apple, 2018

이런 직관성을 보니, 평소 기-인 이름을 애용하는 사람으로서 ‘하지’ 않을 수 없었습니다..<

어떻게..?

10년 전, 호랑이가 아직 산으로 올라가지 못했던 시절 (OS X Tiger) 에는 흔히 미리 수정된 이미지를 가지고 설치를 했지만, 이젠 아주 간단한 부트로더 만으로 기본적인 설치는 가능합니다. 세상이 참 좋아졌죠<

Clover EFI Bootloader
FakeSMC

물론 이것만 깔면 대부분의 경우엔 그래픽 가속도 되지 않으면서 버벅거리고 소리도 안 나고 인터넷도 안 되는 맥 os의 메인 화면을 만날 수 있기 때문에, 추가적으로 여기에 흑마법을 부리기 시작하게 되죠<

우선 고칠 수 없는 것과 고칠 수는 있는 것 골라내기

우선 XPS13에 달려있는 무선 랜카드1)퀄컴 혹은 인텔는 도저히 고칠 수 없어요, 맥에서 네이티브로 쓰는 무선랜 칩셋은 브로드컴이기 때문에 브로드컴 카드를 써야 해요2)본격적인 무선랜 부자가 되어갑니다…….
하이버네이션 기능은 일반적인 PC랑 이 애들이 좀 다른 구조로 전원 관리를 하기 때문에 고치기가 많이 힘들어요, 어차피 켜고 끄는데 15초면 될테니 그냥 재우기3)다행히 호환이 잘 되는만 쓰도록 해요.
아이메세지 라거나 페이스타임 등은 유효한 기기 시리얼 번호를 필요로 하기도 하고, 미노리는 어차피 애플 기기를 안 쓰기 때문에 안 고치기로 해요.
3-4점 터치 멀티터치 트랙패드도 고치고 싶지만, 고칠 수 없기 때문에..< 그냥 기본적인 트랙패드 기능만 동작하도록 할래요.
SD 카드 리더기도 드라이버가 없으니 고칠 수 없어요, 켜두면 전원만 먹을테니 바이오스에서 꺼버리기로 해요.
지문 인식 센서는 당연히 맥북거랑 제조사가 달라요, 저긴 자체 센서를 쓸테니 포기해요<

그래픽 가속은 어차피 CPU 내장 그래픽카드니까 이건 생각보단 쉽게 고칠 수 있을거에요<
사운드카드도 Intel HDA 호환이니 정 안되면 VoodooHDA를 사용하면 붙을거에요.
키보드 레이아웃은 아주 쉽게 고칠 수 있어요.
웹캠은 어차피 USB 인터페이스로 연결될거라 아마 OOB로 동작할거에요.
배터리 관리도 어차피 표준적인 ACPI 인터페이스를 사용하니 간단하게 고칠 수 있을거에요.
USB 버스는 예전 6시리즈 보드에선 서드파티 3.0을 써서 좀 귀찮았지만, 이젠 인텔의 루트버스를 사용하기 때문에 아마도 OOB로 동작할거에요.
썬더볼트도 인텔 컨트롤러를 쓰고 있기 때문에 아마 OOB로 동작할거에요.
NVMe는 최근 맥에서도 네이티브 지원이 생겼을거에요, 4k 섹터를 지원하는 물건이라면 적어도 동작은 무리없이 잘 할거에요.

기초공사 시작

우선 좀 편하게 그럭저럭 바닐라인 시스템을 인스톨 하기 위해서 Unibeast를 사용하기로 해요, 부팅 디스크를 적절하게 만들고 평범하게 macOS를 설치<

그리고 Unibeast USB에 따라오는 Clover를 이용해서 우선은 설치된 macOS로 부팅을 하면, 앞에서 언급한 것 처럼 많이 불편한 데스크탑이 뜨죠..<
원래대로라면 Multibeast를 써서 설정하는 사람이 많겠지만, 미노리는 미니멀한 것을 좋아하기 때문에 직접 수동으로 설정하도록 합니다<

계속 Unibeast를 사용해서 부팅할 순 없으니, Clover를 내려받아서 설치하도록 해요, 기본 설정은 맥의 루트 파티션에다가 설치하게 되어있지만, 보통 해킨토시를 쓰는 사람의 바이오스는 HFS 등에서 EFI 바이너리를 불러올 수 없으므로 EFS에 설치하도록 합시다<

그리고 희망을 가지고 -v 옵션을 주고 재부팅을 하면… 그래픽카드때문에 패닉이 나면서 부팅이 안되죠, 다시 Unibeast로 부팅<

흑마법 시작

흑마법은 보통 커널 모듈 (kext)를 사용해서 부리게 돼요, 기본적으론 동작하지 않는 하드웨어의 드라이버를 붙여서 돌아가게 하는거랑 비슷하죠<

흑마법을 부려야 할 항목 해당하는 kext들 (아마)
그래픽 CoreDisplayFixup, IntelGraphicsFixup, Lilu, FakePCIID_Intel_HD_Graphics
사운드 AppleHDA_ALC256 (패치), CodecCommander
배터리 ACPIBatteryManager
무선랜 (Broadcom) BrcmFirmwareRepo, BrcmPatchRAM2, FakePCIID_Broadcom_WiFi
화면 백라이트 AppleBacklightInjector
터치패드 VoodooPS2Controller

의존성 면에서 빠진게 좀 있을 수 있지만, 대충 이런 느낌으로…

그리고 맥은 그래픽카드를 아주 활발하게 사용하기 때문에, 그리고 그래픽 프레임버퍼의 크기가 어느정도 이상 되는걸 항상 생각하고 만들었기 때문에 DVMT minimum size를 64M 정도로 수정해야 해요< 안그러면 역시 패닉이 납니다< 바이오스에 저 설정이 있으면 다행인데, 없으면 바이오스를 뜯어보면서 efivar의 offset을 찾아서 수동으로 설정해야 해요, 바이오스에서 안 막았다면..<

이런 흑마법을 다 하고 나서 부팅을 한다면… 아마도 부팅이 잘 될거에요<

신나게 다 깔고 나서 알아차린 문제 – 프리징

설정하고 수시로 재부팅 할 땐 모르던 문젠데, 다 설정하고 나서 왠지 모르게 5-10분, 혹은 30분정도로 랜덤으로 프리징이 발생하던 문제가 있었어요.
관련해서 C-state라거나 그래픽카드 id 스푸핑이라거나 다 해봤지만 도저히 고칠 수 없었기 때문에, IO 장치쪽을 의심하고 한번 APFS가 아닌 HFS로4)설치 과정에서 변환되지 않도록 수동으로 설정하고 macOS를 다시 설치했는데…
잘…되네요…

결국 삭제하게 된 이유

Filevault를 활성화 할 수 없어서 결국 삭제했어요, 데이터 암호화는 무지 소중하기 때문에..< Clovar EFI가 분명 (일부 필요한 드라이버들을 넣으면) filevault를 지원해야 하지만, 왠지 모르게 그냥 검은 화면에 커서만 깜박거리면서 멈춰버리더라구요… 한 이틀 정도 OS를 계속 밀면서 시도를 해봤지만, 더 이상 시도할 필요가 없다는 생각이 들었고, 그냥 다시 리눅스로 돌아왔어요<

Sn   [ + ]

TDP and turbo parameter modification with MSR on non-overclockable CPU

Disclaimer

  • MSR modification may void your CPU’s (or system board’s) warranty. Proceed with care. I’m not responsible for any destruction caused by this article.
  • MSR address (greatly) differs from CPU to CPU. Check your own CPU’s MSR address using Intel’s documentation.
  • Only tested on Intel i7-8550U (Kaby Lake R).
  • This article is translation of this article. If you can understand Korean, I recommend reading that article, not this.

Start

On Windows, Intel XTU can be used for modifying turbo-boost parameter and TDP related settings. But on other OSes, there are no specific (user friendly) tools available. In this article, I will directly modify MSR (Model-Specific Registers) to achieve similar effect.

Know about your CPU

There are many CPU models. We call them by their friendly names – such as ‘Core i7’ – but this is not enough in this article. In fact, some CPUs are very different even if they are named after same friendly name. Some CPUs are named different, but they are actually same varient of other CPU. In Intel, they distinguish between CPU using CPU family and model. For example,

Note that /proc/cpuinfo returns CPU family and model by decimal.

Some dependencies

In Linux, you will need msr-tools, and msr kernel module. You may want to insert kernel module automatically by adding appropriate configuration. (e.g., echo msr > /etc/modules-load.d/msr.conf in Arch Linux)

You can read from MSR with rdmsr 0x(address) and write to MSR with wrmsr 0x(address) 0x(value). When reading, you can specify bitmasks by -f 15:0 (from bit 0 to bit 15, in reverse).

Power/Energy/Time units

My CPU has MSR_RAPL_POWER_UNIT at address 606h.

These units are needed to modify existing values.

Package power limits

Now the fun part begins, MSR_PKG_POWER_LIMIT has package power limit variables.

If bit 63 is 0, those values can be changed by writing to 0x610 register. You may change package power limit to higher TDP, and prolong limit time window to increase your processor’s performance (if you are not throttled by thermal throttling).

Turbo boost ratio limit

If MSR_PLATFORM_INFO[28] is 1, you can also change turbo boost limit variable.

Real life example, tune i7-8550U processor

Using above information, I could change MSR on my processor – i7-8550U.

Since this processor is limited to 37 boost ratio when all 4 cores are being used, I changed limitation to 40. Also, I changed 23W limit to 25W with longer (1073741824 seconds) boost duration.

From

To

Result

turbostat reported updated TDP limit and duration, and changed turbo boost ratio. I could not test real life performance difference, since my processor is heavily throttled by thermal throttling even at 15W TDP.

오버클러킹이 불가능한 인텔 CPU에서 MSR을 이용한 TDP와 터보 파라미터 수정

면책조항

  • MSR 수정은 CPU (혹은 시스템 보드) 의 보증을 무효화 시킬 수 있습니다. 조심해서 진행하세요. 전 이 글로 인해 발생한 어떠한 피해에 대해 책임을 지지 않습니다.
  • MSR 주소는 CPU 마다 (아주 많이) 다릅니다. 인텔의 문서를 참고하여 직접 사용하고 있는 CPU의 MSR 주소를 확인하세요.
  • 인텔 i7-8550U (카비레이크 리프레시) 에서만 테스트 되었습니다.
  • 이 글의 영어 번역본이 존재합니다. 영어를 모국어로 사용하는 분이라면 이쪽을 읽는걸 고려해보세요.

시작

윈도우 에선 Intel XTU 를 사용하여 터보 파라미터와 TDP 관련 설정을 변경할 수 있습니다. 하지만 다른 운영체제에선 (유저 친화적인) 도구가 존재하지 않습니다. 이 글에서 저는 MSR (Model-Specific Registers) 를 직접 수정하여 비슷한 결과를 만들어 낼 것입니다.

당신의 CPU에 대해 더 자세히 알아보세요

우리 주변엔 많은 CPU들이 존재하고, 우리는 그들을 흔히 불리는 이름 – 예를 들어서 ‘Core i7’ – 으로 부릅니다. 하지만 이 정도론 충분하지 않습니다. 사실, 어떤 CPU는 우리가 같은 흔히 불리는 이름으로 불러도 내부적으론 너무 다릅니다. 그리고 어떤 CPU는 다른 이름으로 불리지만 내부적으로는 다른 CPU과 같게 동작하기도 합니다. 인텔에서는 CPU를 CPU familymodel로 분류합니다. 예를 들어,

/proc/cpuinfo 가 CPU family와 model을 10진수로 반환하는 것에 유의하세요.

일부 의존성

리눅스에선 msr-toolsmsr 커널 모듈이 필요합니다. 적합한 설정을 사용하여 커널 모듈을 자동으로 삽입하게 할 수도 있습니다. (예를 들어서 아치리눅스에서 echo msr > /etc/modules-load.d/msr.conf)

위의 도구를 사용하여 MSR에서 데이터를 rdmsr 0x(주소) 의 형식으로 읽을 수 있고, MSR에 데이터를 wrmsr 0x(주소) 0x(값) 형식으로 쓸 수 있습니다. 데이터를 읽을 때, 특정 비트마스크를 -f 15:0 (비트 0에서 비트 15까지, 역순으로) 의 형식으로 적용할 수 있습니다.

전력/에너지/시간 단위

제 CPU는 MSR_RAPL_POWER_UNIT 레지스터가 606h 에 존재합니다.

이 단위들은 앞으로 다룰 레지스터에 이미 존재하는 값을 수정하는데에 필요합니다.

패키지 전력 제한

이제 재미있는 부분이 시작됩니다, MSR_PKG_POWER_LIMIT 레지스터는 프로세서 패키지의 전력 제한 변수를 가지고 있습니다.

만약 비트 63이 0이라면, 저 값들은 0x610 레지스터에 기록하는 방법으로 바꿀 수 있습니다. 패키지 전력 제한을 더 높은 값으로 바꾸고, 전력 제한 시간을 더 늘려서 (만약 온도 스로틀링에 영향을 받지 않는다는 가정 아래에) 프로세서의 성능을 향상시킬 수 있습니다.

터보 부스트 배율 제한

MSR_PLATFORM_INFO[28] 레지스터의 값이 1 이라면, 터보 부스트 배율 제한 변수도 바꿀 수 있습니다.

실제 예제 – i7-8550U 프로세서를 튜닝

위의 정보를 사용하여 제 프로세서인 i7-8550U의 MSR을 수정할 수 있었습니다.

이 프로세서가 전체 코어 로드 시 37 배율로 제한되어 있기 때문에, 이 제한을 40 배율로 바꿨습니다. 또한 23와트 제한을 25와트로, 그리고 부스트 시간을 1073741824로 바꿨습니다.

원래 값

수정한 값

결과

turbostat 을 사용하여 TDP 제한과 시간, 그리고 터보 부스트 배율이 바뀐 걸 확인할 수 있었습니다. 이미 제 프로세서가 15W TDP에서도 열 스로틀링의 영향을 받기 때문에 실제 성능 향상에 대해선 테스트 할 수 없었습니다.

만약 이 작업을 실행해도 실제로 성능이 향상되지 않는다면 이 글도 보세요.

CTL-472/672 를 리눅스에서도 사용

English TL;DR – Apply this patch(Linux kernel), or this patch(input-wacom), or use this repository to install modified wacom kernel module for your CTL-472/672. No need to modify xf86-input-wacom (at least in Arch). Patch credits to Jason Gerecke.


최근 (이라곤 해도 몇 달 되었지만) 꽤 저렴한 와콤 디지타이저1)WACOM One by WACOM – CTL-472가 나와서, 한번 그림을 그려볼까 하고 샀는데, 사고 나서 보니 드라이버 지원이 되는지 체크하는 걸 깜빡했더라구요..<

아니나 다를까 집에 디지타이저가 도착해서 컴퓨터에 연결해보니 역시 지원이 제대로 되지 않았어요<

(뭔가 흐름이 이상하지만) 그래서 한번 되게 만들어 보았습니다<


리눅스 시스템의 와콤 디지타이저 동작 구조

뭘 해야 하는지에 대해서 들어가기 전에, 우선 와콤 디지타이저가 리눅스에서 어떻게 동작하는지 간단하게 쓸래요<

와콤 커널 모듈이 우선 있고, 이 장치가 있어야 와콤 디지타이저가 xinput 장치로 잡히게 되어요< 이 상태에선 절대 좌표 포인팅 장치론 작동하게 되죠<
그리고 xinput 드라이버가 있어서 이 xinput 장치에 대한 확장 기능들 – 필압이라거나… 가 지원되게 되어요<

그런데 당연하지만 이 디지타이저는 출시된 지 그렇게 오래 되지 않았고, 그렇게 인기가 많은 장치도 아니기 때문에 메인라인 커널에 있는 모듈이 아직 이 장치의 지원을 하지 않아요, 그래서 커널 소스를 수정하거나, 와콤의 메인라인 커널모듈인 input-wacom 소스를 수정해야 해요<

당연하지만 후자가 더 편한 일이고 (전자는 커널이 새로 나올때마다 매번 커널을 통째로 다시 컴파일을 해야 하니…) 그래서 후자로 해 보았습니다<


패치!

수동으로 이 장치가 어떤 필압 단계를 지원하고, 어떤 감지 영역을 지원하는지 입력해서 장치를 인식하도록 할 수도 있겠지만2)어차피 바닥부터 새로 만들어진 장치가 아니고, 기존 장치랑 거의 똑같이 동작하니까요< 다행스럽게도 이미 패치가 있어요<

여기

저 패치는 커널에 적용되는 패치인데, 어차피 wacom_wac.c 파일은 input-wacom 쪽에도 있으니 이 패치 내용을 수동으로 적용해주면 되겠죠<

혹시 귀찮다면 이 패치를 input-wacom에 적용하시면 될거에요< 요즘도 4.5 커널 아래를 쓰는 사람은 없을 것 같으니 4.5 버전 드라이버만 패치해두었는데, 만약 아래라면.. 수동으로 하셔야겠죠..<

이것도 귀찮으시다면 이 레포지토리 에 이미 패치를 적용해 두었으니 이걸 사용하시면 될거에요, 역시 4.5쪽만 패치했어요, 그리고 주기적으로 업데이트 안 할 거니 어지간하면 직접 패치하세요..<


컴파일 후 설치!

이제 이걸 설치하는 단계인데, 미노리는 아치 리눅스를 쓰고 있기 때문에, 아치 리눅스의 input-wacom-dkms AUR 패키지를 클론했어요<3)만약 데비안이나 우분투를 쓰고 계시다면… 수동으로 make 해서 커널모듈을 복사하거나, dkms를 설정하면 좀 더 편하겠죠..<

드라이버 버전이 업데이트 되어도 미노리를 귀찮게 하지 않도록 패키지 이름을 적당하게 바꾸고, 패키지의 소스 위치를 적당히 수정하면 앞으로 커널 버전이 업데이트 될 때마다 자동으로 모듈이 업데이트 되겠죠<


Profit!

마지막으로 디지타이저를 연결하고 나서 dmesg를 보니

[23309.595292] input: Wacom One by Wacom S Pen as /devices/pci0000:00/0000:00:14.0/usb1/1-1/1-1.1/1-1.1.3/1-1.1.3:1.0/0003:056A:037A.0007/input/input52
[23309.595920] wacom 0003:056A:037A.0007: hidraw5: USB HID v1.10 Mouse [Wacom Co.,Ltd. CTL-472] on usb-0000:00:14.0-1.1.3/input0

Krita를 실행해서 선을 한번 그어보니 필압 감지가 잘 되네요, 이제 그리기만 하면 되는데…. 이게 제일 어렵겠죠<

Sn   [ + ]

i7-8550U를 리눅스에서 언더볼팅

물론 언더볼팅은 윈도에서는 아주 쉬운 작업이지만1)ThrottleStop 이라거나, Intel XTU 라거나… GUI 프로그램이 몇 있죠<, 리눅스에선 아주 오래오래 된 PHC 이후2)아마 한 샌디브릿지..? 이후론 동작하지 않았죠…로 제대로 된 유저랜드 유틸리티가 없었어요<

U 시리즈 프로세서의 성능 하락의 주범은 TDP 제한과 스로틀링인 경우가 많기 때문에, 열을 줄이고 TDP 제한도 다소 완화시키면서 성능 향상, 그리고 더 나아가서 소음 감소와 수명 연장과 미세한 배터리 향상까지 같이 가져오기 위해서 한번 언더볼팅을 하려고 정보를 모아봤어요<3)물론 언더볼팅 안정화가 제대로 안된 상태에서의 무리한 언더볼팅은 작업하던 자료의 손실을 가져올 수 있으니, 만능은 아니겠죠<

찾다 보니까 이게 나오더라구요< CPU에 있는 일종의 레지스터를 건드려서 전압 설정을 바꾸는 방법이고, 작성자의 말론 하스웰 (4xxx 번대의 CPU) 이후론 아마도 동작할 거라고 했는데, 과연 어떤지 보려고 직접™ 해 보았습니다<

닌텐도 전 대표, 이와타 사토루가 '직접' 이라고 말하면서 양 손을 얼굴 앞으로 뻗는 특유의 제스쳐를 취하는 그림
이와타 사토루 전 닌텐도 사장 / ‘닌텐도 다이렉트’의 저작권은 주식회사 닌텐도가 가지고 있습니다.

그러니 잘 되네요, 풀로드 시 온도는 똑같지만 부스트 배율이 18배에서 23배로 올라갔고, 아이들 시 온도는 5도 정도 내려갔어요< 관련해서 미노리가 쓰고 있는 스크립트를 언제나처럼 Gist에 올려두었으니, 관심이 있다면 참고하세요<

주의할 점은, 이 작업은 일단은 정상적인 CPU 전압에서 전압을 더 내리는 것이기 때문에 작업 중 CPU가 갑자기 못 버티고 재부팅 된다거나, 블루스크린이 뜨면서 얼어버린다거나 할 수 있고, 잠재적으로 CPU 수명이 더 짧아질 수 있는 가능성도 일단은 존재하니4)열이 줄어들기 때문에 수명이 늘어난다’ 랑 ‘전압이 적게 주어진 상태로 고속으로 계산해야 하니 수명이 줄어든다‘ 라는 의견이 팽팽하죠… 자기가 무슨 일을 하고 있는지 정확히 모른다면 하지 마세요<

Sn   [ + ]

LTE 회선 변경

전에 사용하던 SK(tplus MVNO) 11GB+2GB/200Kbps 유심이 비싸서 해지하고 T 포켓파이를 주문했어요, 요금제는 거의 비슷하게 10GB/200Kbps 죠<

그래서 새로운 라우터가 수중에 들어오게 되었고, 미노리는 네트워크 장비가 손에 들어오면 루트를 따는 습관이 있기 때문에 당분간은 이걸 주로 살펴 볼 생각이에요<

이 장치는 통신사와 밀접한 관련이 있기 때문에, 아마 관련된 대부분의 내부 정보는 공개할 수 없을 것 같아요1)고소고소 열매, 하지만 관련된 하드웨어 스팩이라거나 같은 악용할 여지가 없는 정보는 최대한 공개할 예정이에요<

다른건 잘 모르겠고 사용하던 화웨이 E5885랑 비교했을때 가벼워서 그건 마음에 드네요, 그리고 usb를 사용한 테더링도 된다는 점에서요< 화웨이도 물론 스팩상엔 그 기능이 있었지만, 드라이버의 버그인건지 리눅스에선 제대로 동작하지 않더라구요…

속도가 꽤 낮게 나오는 편인데, 사람이 없는 한적한 곳에선 10Mbps가 넘어가는 걸 보면 이건 게이트웨이 단에서의 QoS 제어는 아닌 것 같고, 아마 정말로 혼잡때문에 생기는 속도 저하 같아 보여요, 그걸 보면 이 장비는 아마도 단일 밴드만 주로 잡으면서 동작한다는 걸 알 수 있겠죠, 특히 10MHz 짜리로<

Sn   [ + ]

XPS 13 (9360), 잡다한 문제에 대한 해결 방법 포스트

TL;DR – If you are experiencing white noise (static noise) on your Dell XPS 13/15 after resuming from sleep, try removing/inserting sound related kernel module and restart sound subsystem. (Gist: Only for reference, tested in Arch Linux) This problem is solved at Linux kernel 4.15, if you are unable to update to that kernel, try applying this patch to your kernel. YMMV.


 

XPS를 사고 이제야 어느정도 설정을 마쳤는데, 그 과정에서 여러 문제를 만나게 되어서 그 문제를 어떻게 해결하였는지 (혹은 대충 쓸 순 있게 만져놨는지) 에 대해서 적을거에요<

우선은 화면의 내용에 따라서 밝기가 마음대로 변하는 문제(CABC)의 경우엔, QHD는 델에서 공식적으로 패치를 제공해요< 미노리같이 리눅스를 사용하는 사람이라면, Windows To Go 같은걸로 윈도로 켜서 잠깐 패널의 펌웨어를 업데이트 하면 될거에요< FHD는 어찌저찌 원래 제 짝은 아닌 델의 다른 컴퓨터용으로 패치가 있는 걸 어떻게 잘 수정해서 적용하면 된다는 말을 듣기는 했는데, 어지간하면 그냥 정식으로 패치가 나오면 그걸 적용하세요..< 이제 FHD도 패치가 나왔어요, 여기에요<



가장 개인적으로 신경쓰였던 문제는 그냥 꺼져있던 컴퓨터를 켜서 이어폰을 쓸 땐 멀쩡한 이어폰 단자가 절전모드로 갔다가 오면 전기 잡음이 들리는 거였는데, 이거의 경우엔 물론 컴퓨터를 껐다가 켜면 해결되긴 하지만, 그때마다 무지 귀찮으니 개인적으론 (권장하진 않지만) 이런 방법을 적용했어요<


Gist 링크 (파일의 내용을 반드시 검토한 후 관리자 권한으로 실행하세요)

소리 관련 커널 모듈을 강제로 제거했다가 다시 끼우고, 소리 관련 서브시스템을 다시 시작하는 스크립트인데요, 이렇게 하면 컴퓨터를 껐다가 켠 것 처럼 다시 잡음이 나지 않을 거에요< 이어폰을 끼워놨다면, 다시 소리가 스피커에서 나오기 시작할텐데, 그냥 이어폰을 다시 뺐다가 끼우면 될거에요<

이 문제는 4.15 커널에서 해결되었어요, 최신 커널을 올리거나 커널에 이 패치를 적용하세요<


만약 dmesg에서 아래와 같은 내용이 나오는데 동작엔 전혀 문제가 없다면…

[90067.428585] pcieport 0000:00:1c.4: AER: Corrected error received: id=00e4
[90067.428591] pcieport 0000:00:1c.4: PCIe Bus Error: severity=Corrected, type=Data Link Layer, id=00e4(Transmitter ID)
[90067.428594] pcieport 0000:00:1c.4: device [8086:9d14] error status/mask=00001000/00002000

커널 파라미터에

pci=noaer

옵션을 주면 사라질거에요<


만약 블루투스 장치가 연결 된 상태에서 노트북을 재웠다가 깨우면 블루투스가 죽어서 완전히 껐다가 켤 때 까지 돌아오지 않는다면, 재울 땐 강제로 블루투스를 끄고, 깨울 땐 다시 블루투스를 활성화 하는 방법을 써 보세요< (Gist)

근본적으로 이 문제는 Killer 무선랜카드의 문제니, 인텔 무선 랜카드라거나 다른 카드로 바꾸는 걸 한번 고려해보세요, 생각보다 별로 비싸진 않아요< 미국에선 계속 항의하면 델에서 공식으로 Intel 8260으로 바꿔주기도 한다는데, 한국에선 그게 과연 되려나 모르겠네요..<

명령어 하나로 실행하는 마크다운 문서 -> 감열지 인쇄

원래부터 메모 인쇄 용도로 쓰려고 감열지 프린터를 하나 샀지만, 생각보다 영수증 사이즈의 감열지에 효과적으로 인쇄를 하는 방법이 그리 쉽진 않더라구요..<

  1. 적당한 조판 기능이 있는 워드프로세서를 켠다.
  2. 용지 사이즈를 감열지에 맞게 조절한다.
  3. 여백 사이즈를 적당히 맞게 조절한다.
  4. 폰트도 적당한걸로 설정한다.
  5. 내용을 적어놓고, 인쇄한다.

이런 작업을 매번 간단한 메모를 뽑을때마다 계속하기도 좀 많이 귀찮아서, 그리고 워드 프로세서라는 물건은 메모를 간단하게 적기엔 너무 overkill인 무거운 물건이라서, ‘간편하고, 그러면서도 꽤 강력하게 서식을 적용할 수 있고, 배우기도 쉬운1)뭔가 편애가 좀 있는 것 같지만, 기분탓<’ 마크다운 문서를 감열지로 바로 인쇄할 수 있는 스크립트를 적당히 짰어요<

주소는 여기 이고, pandoc 이랑 wkhtml2pdf, 그리고 당연하게도 (인쇄를 해야 하니) cups에 의존해요< zsh 스크립트이긴 한데, 아마 각종 sh에서도 문제 없을거에요2)테스트는 안 해 봤지만< 정확히는:

  1. 마크다운 문서를 pandoc 을 사용해 html 문서로 변환
  2. html 문서를 적당한 옵션 – 여백이라거나, 용지 사이즈라거나, 색상이라거나… – 으로 pdf 로 변환
  3. pdf 문서를 lp 명령어를 사용해서 cups로 전송, 그리고 cups의 필터랑 레스터라이저를 통해 인쇄

일단 미노리의 사용 환경에선 잘 작동하긴 하는데, 당연하지만 프린터마다 인쇄 가능한 영역이라거나 다르고 그러니 환경에 맞게 저 대충 짜둔 스크립트를 수정해서 쓰세요<


전혀 효용성은 없지만, 날씨를 출력한다거나, 시스템의 로그를 출력한다거나, 아니면 심지어 소셜 네트워크의 타임라인을 출력한다거나 하는 용도로 사용이 가능하긴 하겠네요< 뭐, 종이랑 전기가 아깝지만요<

Sn   [ + ]

E5885, 장치상 밴드 설정 메뉴 구현<

추석이네요< 방문자 분들도 모두 좋은 한가위 되세요<

추석이니까 할 일 없고, 게임도 며칠 하다보니 너무 심심하고, 유튜브 구독 목록도 다 봐버려서 장치의 전원 버튼을 여러번 눌러 접근할 수 있는 메뉴에 LTE 밴드를 설정할 수 있는 기능을 구현했어요<

당연하지만 ValdikSS 씨의 커스텀 펌웨어에서 작동해요, 혹은 수동으로 oled 바이너리의 하이재킹이 필요해요<

소스는 이쪽이에요<1)ValdikSS씨의 코드를 포크했어요< 아직 SKT 이외의 통신사 밴드는 어떻게 표시할까 좀 고민이네요..< 이 장치가 지원하는 밴드가 너무 많아서 저 작은 화면에 그 밴드를 다 표시할 순 없고, 그렇다고 저렇게 SKT용만 덜렁 만들어놓기도 좀 애매한 것 같아서요..<

일단은 쓰는 사람이 없으니 저대로 놔두고, SMB 데몬을 컴파일해서 라우터에 한번 올려볼 생각이에요<

Sn   [ + ]