2nd patch submit to DPDK

Page content

AVX2가 지원되지 않는 머신에서 쓸데없이 ACL library 빌드할 때 AVX2를 이용해서 빌드하려는 문제를 확인했다. 지금까지 아무도 고치지 않은 게 이상하긴 한데 그래도 내가 생각한 수정 방법이 제대로 동작하는 듯 해서 패치를 한번 보내보기로 했다.

수정사항은 비교적 간단하다. ACL 라이브러리 빌드할 때 AVX2를 이용해서 빌드해야 하는 경우인지를 검사하는 코드가 lib/librte_acl/Makefile에 정의되어 있는데 여기서 항상 -march=core-avx2 옵션을 사용해서 AVX2가 지원되지 않는 머신에서도 AVX2를 사용해서 gcc가 빌드하도록 하는 걸로 보였다. 다른 코드 빌드할 때는 문제가 없는데 유독 ACL library에서만 이런 문제가 나서 보다 보니 아무래도 Makefile이 잘못된 듯 하다.

https://www.dpdk.org/contribute/ 페이지 내용을 참고해서

git clone git://dpdk.org/dpdk

코드 수정

$ git commit --signoff 

mk: Detect AVX2 capability based on the target CPU architecture

AVX2 support check should be based on the target CPU architecure.
For this, -march option should be $(RTE_MACHINE) instead of core-avx2.

commit comment 를 수정하려면

$ git commit --amend

이제 patch를 생성해 보자. 최근 1개의 commit으로 패치 파일을 만드려면 - 옵션을 사용한다.

$ git format-patch -1

패치 파일 내용 확인해 보고

$ cat 0001-mk-Detect-AVX2-capability-based-on-the-target-CPU-ar.patch 
From 7bed8881339afee9bbef31638d3f15dad27efb87 Mon Sep 17 00:00:00 2001
From: Chaeyong Chong <cychong@samsung.com>
Date: Sat, 21 Jul 2018 22:51:19 +0900
Subject: [PATCH] mk: Detect AVX2 capability based on the target CPU
 architecture

AVX2 support check should be based on the target CPU architecure.
For this, -march option should be $(RTE_MACHINE) instead of core-avx2.

Cc: stable@dpdk.org

Signed-off-by: Chaeyong Chong <cychong@samsung.com>
---
 lib/librte_acl/Makefile | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/lib/librte_acl/Makefile b/lib/librte_acl/Makefile
index ea5edf00a..c756eaeb2 100644
--- a/lib/librte_acl/Makefile
+++ b/lib/librte_acl/Makefile
@@ -44,7 +44,7 @@ ifeq ($(findstring RTE_MACHINE_CPUFLAG_AVX2,$(CFLAGS)),RTE_MACHINE_CPUFLAG_AVX2)
 	CC_AVX2_SUPPORT=1
 else
 	CC_AVX2_SUPPORT=\
-	$(shell $(CC) -march=core-avx2 -dM -E - </dev/null 2>&1 | \
+	$(shell $(CC) -march=$(RTE_MACHINE) -dM -E - </dev/null 2>&1 | \
 	grep -q AVX2 && echo 1)
 	ifeq ($(CC_AVX2_SUPPORT), 1)
 		ifeq ($(CONFIG_RTE_TOOLCHAIN_ICC),y)
-- 
2.18.0    

git에서 바로 패치 내용을 전송할 수 있는데 그러려면 SMTP 관련 설정을 해 봐야 한다. 관련 파일은 ~/.gitconfig 이거나 git repo에 있는 .git/config

[sendemail]
from = Chaeyong Chong <cychong@gmail.com>
smtpserver = smtp.gmail.com
smtpuser = cychong@gmail.com
smtpencryption = tls
smtppass = XXXXXXX
chainreplyto = false
smtpserverport = 587

이제 보내볼까?

mbpr15:dpdk cychong$ git send-email --to konstantin.ananyev@intel.com --cc dev@dpdk.org 0001-mk-Detect-AVX2-capability-based-on-the-target-CPU-ar.patch 
0001-mk-Detect-AVX2-capability-based-on-the-target-CPU-ar.patch
(mbox) Adding cc: Chaeyong Chong <cychong@samsung.com> from line 'From: Chaeyong Chong <cychong@samsung.com>'
(body) Adding cc: stable@dpdk.org from line 'Cc: stable@dpdk.org'
(body) Adding cc: Chaeyong Chong <cychong@samsung.com> from line 'Signed-off-by: Chaeyong Chong <cychong@samsung.com>'

From: Chaeyong Chong <cychong@gmail.com>
To: konstantin.ananyev@intel.com
Cc: dev@dpdk.org,
	Chaeyong Chong <cychong@samsung.com>,
	stable@dpdk.org
Subject: [PATCH] mk: Detect AVX2 capability based on the target CPU architecture
Date: Sat, 21 Jul 2018 23:06:23 +0900
Message-Id: <20180721140623.1293-1-cychong@gmail.com>
X-Mailer: git-send-email 2.18.0

    The Cc list above has been expanded by additional
    addresses found in the patch commit message. By default
    send-email prompts before sending whenever this occurs.
    This behavior is controlled by the sendemail.confirm
    configuration setting.

    For additional information, run 'git send-email --help'.
    To retain the current behavior, but squelch this message,
    run 'git config --global sendemail.confirm auto'.

Send this email? ([y]es|[n]o|[e]dit|[q]uit|[a]ll): y
Can't locate Net/SMTP/SSL.pm in @INC (you may need to install the Net::SMTP::SSL module) (@INC contains: /usr/local/Cellar/git/2.18.0/share/perl5 /Applications/Xcode.app/Contents/Developer/Library/Perl/5.18/darwin-thread-multi-2level /Library/Developer/CommandLineTools/Library/Perl/5.18/darwin-thread-multi-2level /Library/Perl/5.18/darwin-thread-multi-2level /Library/Perl/5.18 /Network/Library/Perl/5.18/darwin-thread-multi-2level /Network/Library/Perl/5.18 /Library/Perl/Updates/5.18.2 /System/Library/Perl/5.18/darwin-thread-multi-2level /System/Library/Perl/5.18 /System/Library/Perl/Extras/5.18/darwin-thread-multi-2level /System/Library/Perl/Extras/5.18 .) at /usr/local/Cellar/git/2.18.0/libexec/git-core/git-send-email line 1497.

무슨 에러가 난다. Perl 관련 에러로 보이는데 마땅한 해결책이 없나 보다. 인터넷을 뒤져 해결책을 찾아 적용해봤지만 백약이 무효

원인을 찾아 보니 위 에러 메시지의 마지막에 있는 것처럼 git-send-email 파일 1497 라인에서 Net/SMTP/SSL.pm을 찾는 데 못찾고 있다는 거. 근데 그냥 perl로 확인해 보면 멀쩡히 @INC 경로에 포함되어 있다는 사실

흥미로운 건 어디에 있는 perl을 쓰느냐에 따라 모듈 위치가 달라진 다는 거

이건 OS X에 기본 내장된 perl을 사용한 경우

$/usr/bin/perl -e 'print "@INC";'
/Library/Perl/5.18/darwin-thread-multi-2level /Library/Perl/5.18 /Network/Library/Perl/5.18/darwin-thread-multi-2level /Network/Library/Perl/5.18 /Library/Perl/Updates/5.18.2 /System/Library/Perl/5.18/darwin-thread-multi-2level /System/Library/Perl/5.18 /System/Library/Perl/Extras/5.18/darwin-thread-multi-2level /System/Library/Perl/Extras/5.18 .

이건 homebrew로 설치한 perl이 찾는 위치

mbpr15:dpdk cychong$ perl -e 'print "@INC";'
/usr/local/Cellar/perl/5.28.0/lib/perl5/site_perl/5.28.0/darwin-thread-multi-2level /usr/local/Cellar/perl/5.28.0/lib/perl5/site_perl/5.28.0 /usr/local/Cellar/perl/5.28.0/lib/perl5/5.28.0/darwin-thread-multi-2level /usr/local/Cellar/perl/5.28.0/lib/perl5/5.28.0 /usr/local/lib/perl5/site_perl/5.28.0/darwin-thread-multi-2level /usr/local/lib/perl5/site_perl/5.28.0

그리고 git send-email 명령이 못찾고 있는 SSL.pm의 위치는 이미 /usr/bin/perl이 아닌 그냥 perl(실제는 /usr/local/bin/perl의 모듈 경로에 이미 포함되어 있다는

mbpr15:dpdk cychong$ find / -name SSL.pm
find: /usr/sbin/authserver: Permission denied
/usr/local/Cellar/perl/5.28.0/lib/perl5/site_perl/5.28.0/Net/SMTP/SSL.pm

그래서 /usr/local/Cellar/git/2.18.0/libexec/git-core/git-send-email 이 brew 버전의 perl을 사용하도록 변경 후 다시 git send-email 시도

Send this email? ([y]es|[n]o|[e]dit|[q]uit|[a]ll): a
Need MIME::Base64 and Authen::SASL todo auth at /usr/local/Cellar/git/2.18.0/libexec/git-core/git-send-email line 1521.

이것 쯤이야 이젠 쉽게(?) 해결

mbpr15:dpdk cychong$ sudo -H cpan MIME:Base64
...

mbpr15:dpdk cychong$ sudo -H cpan Authen::SASL
...

이젠 정말 되겠지?

Send this email? ([y]es|[n]o|[e]dit|[q]uit|[a]ll): y
5.7.9 Application-specific password required. Learn more at
5.7.9  https://support.google.com/mail/?p=InvalidSecondFactor q81-v6sm10686681pfd.15 - gsmtp

음.. 깔끔하게 되었다는 말은 안 나오지만 그래도 이 메시지는 일단 메일 전송 요청을 받은 gmail server에서 보낸 걸로 보아 전송에 필요한 git 관련 이슈는 없나 보다. 이제 이 문제만 해결하면 이메일을 보낼 수 있겠다. 구글에서 gmail Application-specific password required 로 찾은 내용을 참고해서 gmail에 대해 mac에서 전송할 때 사용할 암호를 따로 지정. 왜 이렇게 해야 하는 지도 설명되어 있지만 일단 보내고 보자.

mbpr15:dpdk cychong$ git send-email --to konstantin.ananyev@intel.com --cc dev@dpdk.org 0001-mk-Detect-AVX2-capability-based-on-the-target-CPU-ar.patch 
0001-mk-Detect-AVX2-capability-based-on-the-target-CPU-ar.patch
(mbox) Adding cc: Chaeyong Chong <cychong@samsung.com> from line 'From: Chaeyong Chong <cychong@samsung.com>'
(body) Adding cc: stable@dpdk.org from line 'Cc: stable@dpdk.org'
(body) Adding cc: Chaeyong Chong <cychong@samsung.com> from line 'Signed-off-by: Chaeyong Chong <cychong@samsung.com>'

From: Chaeyong Chong <cychong@gmail.com>
To: konstantin.ananyev@intel.com
Cc: dev@dpdk.org,
	Chaeyong Chong <cychong@samsung.com>,
	stable@dpdk.org
Subject: [PATCH] mk: Detect AVX2 capability based on the target CPU architecture
Date: Sat, 21 Jul 2018 23:53:42 +0900
Message-Id: <20180721145342.6503-1-cychong@gmail.com>
X-Mailer: git-send-email 2.18.0

    The Cc list above has been expanded by additional
    addresses found in the patch commit message. By default
    send-email prompts before sending whenever this occurs.
    This behavior is controlled by the sendemail.confirm
    configuration setting.

    For additional information, run 'git send-email --help'.
    To retain the current behavior, but squelch this message,
    run 'git config --global sendemail.confirm auto'.

Send this email? ([y]es|[n]o|[e]dit|[q]uit|[a]ll): a
OK. Log says:
Server: smtp.gmail.com
MAIL FROM:<cychong@gmail.com>
RCPT TO:<konstantin.ananyev@intel.com>
RCPT TO:<dev@dpdk.org>
RCPT TO:<cychong@samsung.com>
RCPT TO:<stable@dpdk.org>
From: Chaeyong Chong <cychong@gmail.com>
To: konstantin.ananyev@intel.com
Cc: dev@dpdk.org,
	Chaeyong Chong <cychong@samsung.com>,
	stable@dpdk.org
Subject: [PATCH] mk: Detect AVX2 capability based on the target CPU architecture
Date: Sat, 21 Jul 2018 23:53:42 +0900
Message-Id: <20180721145342.6503-1-cychong@gmail.com>
X-Mailer: git-send-email 2.18.0

Result: 250 
mbpr15:dpdk cychong$ 

Result 250은 SMTP result code로 정상적으로 전송되었다는 의미란다.(https://www.greenend.org.uk/rjk/tech/smtpreplies.html)

드디어 끝났다.