삼성 디카가 종류별로 배터리가 호환되는 모델을 정리한 것을 캡쳐 해둠




'잡담' 카테고리의 다른 글

삼성 카메라 배터리별 모델  (0) 2016.01.05
구내염  (0) 2015.08.27
우리집 건물 화재사건(2014.04.26) #1  (0) 2014.05.02
NLL 회담 전문 주석  (0) 2013.06.26
김어준의 “지금 청춘에게 가장 필요한 것은?”  (0) 2013.04.24
우래옥 냉면  (0) 2011.06.19
Posted by 없다캐라

2015.08.27 18:48 잡담

구내염

구내염 정말 아프다. 이거 나면 정말 너무 우울하고 피곤하다.


개인적으로는 오라메디, 알보칠을 사용해봤고 민간요법 중 하나인 백반도 사용해보고 꿀도 사용해봤지만 지금은 다 별로다.

특히, 알보칠은 예전에 농도 찐했을 때 날 여러차례 울렸었지만 지금은 말그대로 울리기만 한다. 그리고 안낫는다.

효과가 많이 약해진건지 내가 이제 안듣는건지 구분은 안가지만 여튼 지금은 아프기만하고 별로 도움이 안된다.


그래서 지금은 치료약이 아닌 비타민제로만 대체하고 있는 편인데 쉽게 구할 수는 없지만 좋아하는 약이 있다.

예전에 중국 출장 동안 지인과 같이 약국을 돌아당기면서 구했던 약인데 의외로 정말 편하고 효과가 좋았었다.

보통 자는 동안 붙여 놓는 편인데 부위마다 다르지만 잘 붙어 있는 경우에는 약간의 효과가 있었다.


어차피 알보칠도 나에겐 이제 잘 듣지도 않는다. 이 약은 전혀 고통스럽지 않게 약간의 효과가 있어서 좋다.

그리고 비교적 잘 붙는 편이다.


한국에서도 같은 종류로 구할 수 있으면 좋겠다.


아래 사진은 혐짤이긴 하지만 기록이다. 한번에 10개가 훨씬 넘게 나기 시작하더니 자기네끼리 합치기도 한다.

이 사진 찍을 때 저기 말고도 혀에도 5~6개 정도 있고 위에도 한 2~3개 있었다.

미친다. 우울하다.




'잡담' 카테고리의 다른 글

삼성 카메라 배터리별 모델  (0) 2016.01.05
구내염  (0) 2015.08.27
우리집 건물 화재사건(2014.04.26) #1  (0) 2014.05.02
NLL 회담 전문 주석  (0) 2013.06.26
김어준의 “지금 청춘에게 가장 필요한 것은?”  (0) 2013.04.24
우래옥 냉면  (0) 2011.06.19
Posted by 없다캐라

Short-Circuit Evaluation 은 &&이나 || 에서 첫번째 argument 에서 조건의 결과값에서 이미 전체 결과값이 판단되었을 경우 첫번째로만 수행하는 것을 말한다.


예를 들어,

BOOL condition1(int pValue)
{
    printf("condition1() has been executed\n");
    return 0 == pValue;
}

BOOL condition2(int pValue)
{
    printf("condition2() has been executed\n");
    return 0 == pValue;
}

int main()
{
    int count1 = 1;
    int count2 = 0;

    if (condition1(count1) && condition2(count2))
    {
        printf("&& test\n");
    }

    count1 = 0;
    if (condition1(count1) || condition2(count2))
    {
        printf("|| test\n");
    }
}

첫번째 && 연산에서는 condition1 이 false 이므로 condition2() 까지는 수행 시키지 않는다.

두번째 || 연산에서는 condition1 이 true 이므로 condition2() 까지는 수행 시키지 않는다.


여기까지만 보면 그렇구나 싶긴 한데 골치 아픈건 다음의 경우이다.

static void *cache_alloc_refill(struct kmem_cache *cachep, gfp_t flags)
{
...
    while (slabp->inuse < cachep->num && batchcount--) {
        STATS_INC_ALLOCED(cachep);
        STATS_INC_ACTIVE(cachep);
        STATS_SET_HIGH(cachep);

        ac->entry[ac->avail++] = slab_get_obj(cachep, slabp,
				    node);
    }
    check_slabp(cachep, slabp);
....
}

linux-2.6.24의 커널 코드 중 일부이다.

저기 while 문 안의 경우를 보면 && 연산자는 충분히 Short-Circuit Evaluation 를 할 수 있으며 따라서 2번째 조건인 batchcount--를 수행하지 않을 수도 있다.

물론 리눅스 커널 코드야 저런경우까지 고려해서 작성되었겠지만 Short-Circuit Evaluation을 모르고 막쓰다가 2번째 조건에 뭔가 연산을 일으키지 못한다면 흐름을 이해하지 못하게 될 것이다.


정 헷갈리면 나이브하게 다 풀어서 해야 한다.


Posted by 없다캐라

What is Forced Unit Access (FUA)?

FUA란 write 명령을 직접 스토리지에 사용하는 것을 말하며 디스크 캐시 사용 여부와는 관계 없다.

SCSI T10 스펙에서 처음 나왔으며,  (WRITE DMA FUA EXT – 3Dh, WRITE DMA QUEUED FUA EXT – 3Eh, WRITE MULTIPLE FUA EXT – CEh) 와 같은 SCSI 명령어들이 있다.

FUA는 디스크 미디어에 직접 쓰기가 마무리 되어야 하므로 flush 같은 명령이 떨어지기 전에 파워문제가 발생해도 data에 consistent를 보장할 수 있다.

SCSI에서 나온 스펙이지만 이 후에 ATA T7(2002) 스펙에도 포함 되었다. (이상 위키내용 발췌)


Windows

윈도우즈에서는 Transactional NTFS(이하 TxF)에서 SCSI, Fiber Channel 장비의 경우는 지원한다. 그 외 (ATA/SATA/USB) 에선 지원이 안되기에 power failure 문제에 위험성을 가지고 있기에 캐시 disable 같은 다른 대안을 사용해야 한다.

Disk Cache Disabling

디스크 장치에 대한 cache disable을 하기 위해서는 DeviceIOControl 의 아래 code를 사용하여 정할 수 있다.

MSDN의 Querying for the Write Cache Property 에서 살펴볼 수 있다.

ATA 스펙에 FUA가 포함되었지만 그것이 제대로 구현되었는지 gurantee 되지 않아서 Windows 에서는 채용하지 않았으며 SATA 같은 디스크에서 지원하지 않는다.

NTFS에서는 SCSI 경우 meta data의 integrity를 지켜주기 위해 FUA가 사용된다. 그 외의 데이터 영역이 FUA 사용에 대한 것은 기능이 support 된다고 하는데 어떻게 사용하는지는 확인 할 수 없다.

Transactional 이란 용어에서 meta를 의식한 표현으로 짐작되며 meta는 확실히 FUA를 쓴다고는 하는데 data 부분에 대한 write는 못찾겠다.

그리고 MSDN에서는 TxF를 대체할 수 있는 방법을 찾으라고 강력하게 권장하는데 TxF의 API들이 강력하지만 복잡해서 deprecating시키는 것을 고려중이기에 다른 시나리오를 권고하고 있다. (Alternatives to using Transactional NTFS)

TxF에서 FUA 사용한다는데 TxF를 안쓰면??? 거기까진 언급되지 않아서 모르겠다.

하지만, Windows 8, Windows Server 2012 부터는 metadata에 대한 FUA를 사용하지 않고 대신 캐시를 사용하여 바로 flush 시키는 방식으로 변경하였다고 한다.

그 내용은 Windows Server 2012 64TB NTFS Volumes and the Flush Command 와 Windows Server 2012 64TB NTFS Volumes and the Flush Command 문서에서 확인할 수 있다.

 

FUA 구현을 직접적으로 하기 위해서는 User layer에서는 FILE_FLAG_NO_BUFFERING와 FILE_FLAG_WRITE_THROUGH 플래그가 있는 write를 구현하면 된다.

커널 드라이버에서는 file system, volume 단에서는 IRP_MJ_WRITE의 IRP Stack Location의 Flags에서  SL_WRITE_THROUGH | SL_FT_SEQUENTIAL_WRITE 을 추가시켜주면 된다.

SL_WRITE_THROUGH 은 밑의 linux에서 request io의 REQ_FUA와 같은 거라고 보여진다.

SL_FT_SEQUENTIAL_WRITE은 FT에서 사용하는 값 같은데 정확히 무엇인지는 모르겠다(OSR 참조). 다만, 2개를 같이 묶어서 사용하는 것 같다.

Linux

리눅스에서는 이런 FUA가 block layer lever에서 지원 된다.

SATA 같은 경우는 2007년 즈음 Linux가 NCQ를 지원했고 이런 SATA/NCQ 에 대한 FUA 기능은 2012까지는 안되었다.

리눅스 커널 코드에서는

#define REQ_FUA         (1ULL << __REQ_FUA)

file system 단에서는 bio의 r/w flag에 매스킹 시켜 FUA를 요청할 수 있으며 실 구현은 block device 밑단에서 FUA 관련 기능이 구현되어 있다.

물론 이것은 FUA가 지원되는 device에 한하며 그렇지 못한 경우는  Linux 3.14 kernel document 중 writeback_cache_control.txt 를 보면 마지막에 

bq. If the FUA bit is not natively supported the block layer turns it into an empty REQ_FLUSH request after the actual write.

write이후 FLUSH를 연이어 요청하여 비슷한 동작을 하게끔 한 것 같다. 물론 거기에 대한 payload를 지불할 만하면....


Reference


'Development > System' 카테고리의 다른 글

FUA (Force Unit Access) 관련  (0) 2015.05.13
Posted by 없다캐라



천호동으로 얼마전에 이사왔다.

엘지 유플러스 약정이 1년 남은 관계로 이전 신청하였다.

일반 주택이니깐 주택광랜 같은 상품일 것이다.


처음에는 지연시간이 100까지 갔는데 몇일 지나니 이정도의 속도가 나온다.

휴~ 약정 끝나면 옮겨야 겠다는 생각이 든다.


  • 다운 : 72.55 Mbps
  • 업 : 2.93 Mbps
  • 지연 : 48.85 ms
  • 손실율 : 0.00 %



'IT > 인터넷' 카테고리의 다른 글

강동구 천호동 LG U+ 인터넷 속도  (0) 2015.03.03
통영 KT 인터넷 속도  (2) 2013.09.17
송파동 LG U+ 인터넷 속도  (0) 2013.02.16
통영에서 KT adsl lite 인터넷 속도 측정  (1) 2009.10.04
삼전동 인터넷 속도 측정.  (2) 2009.06.27
Posted by 없다캐라

블로그 이미지
없다캐라

태그목록

공지사항

Yesterday26
Today6
Total189,888

달력

 « |  » 2018.12
            1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31          

글 보관함