<?xml version="1.0" encoding="UTF-8"?><rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Selim Arda Çevik — Türkçe</title><description>Yazılım, araçlar ve not almaya değer şeyler.</description><link>https://www.selimardacevik.com/</link><language>tr</language><atom:link href="https://www.selimardacevik.com/tr/rss.xml" rel="self" type="application/rss+xml"/><item><title>Kaybolan interrupt&apos;ın izini sürmek: NVMe, Intel VMD ve 30 saniye</title><link>https://www.selimardacevik.com/tr/blog/nvme-timeout-intel-vmd/</link><guid isPermaLink="true">https://www.selimardacevik.com/tr/blog/nvme-timeout-intel-vmd/</guid><description>Boot 53 saniye, Chrome ilk tıklamada donuyor. İki ayrı şikâyet gibi görünen şeyin tek bir sebebi vardı: diskin completion interrupt&apos;ı kernel&apos;e hiç ulaşmıyordu.</description><pubDate>Fri, 04 Sep 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Yeni dizüstünde iki şikâyetim vardı ve ikisini de ayrı problem sanıyordum.&lt;/p&gt;
&lt;p&gt;Birincisi: boot 53 saniye sürüyordu. NVMe SSD&apos;li, 16 çekirdekli, 32 GB
RAM&apos;li bir makine için saçma bir rakam. İkincisi: Chrome&apos;un günün ilk açılışı
sonsuza kadar sürüyordu. Simgeye tıklıyorsun, hiçbir şey olmuyor. Yeniden
tıklıyorsun, yine hiçbir şey. Sonra bir anda iki pencere birden açılıyor.&lt;/p&gt;
&lt;p&gt;Tek bir sebebi vardı ve o sebep diskin arızalı olması değildi.&lt;/p&gt;
&lt;h2&gt;Kernel zaten söylüyordu&lt;/h2&gt;
&lt;pre&gt;&lt;code class=&quot;language-text&quot;&gt;nvme nvme0: I/O tag 77 (104d) QID 1 timeout, completion polled
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Bu satırın okunuşu şu: kernel diske bir komut gönderdi. Disk komutu
tamamladı. Ama completion interrupt kernel&apos;e &lt;strong&gt;hiç ulaşmadı&lt;/strong&gt;. Kernel
30 saniyelik timeout&apos;u (&lt;code&gt;nvme_core.io_timeout&lt;/code&gt;) sonuna kadar bekledi,
sonra pes edip queue&apos;yu elle yokladı — &lt;code&gt;completion polled&lt;/code&gt; — ve
&quot;aslında çoktan bitmiş&quot; dedi.&lt;/p&gt;
&lt;p&gt;Veri kaybı yok, disk sağlıklı. Kaybolan şey sadece bir interrupt. Bedeli 30
saniye, ve o 30 saniye boyunca diske dokunan &lt;strong&gt;her şey&lt;/strong&gt; donuyor.&lt;/p&gt;
&lt;h2&gt;Kanıt 1: boot&apos;un 31 saniyesi tek bir takılma&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;systemd-analyze&lt;/code&gt; suçluyu neredeyse tek başına gösterdi:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-text&quot;&gt;$ systemd-analyze
Startup finished in 7.093s (firmware) + 2.384s (loader) + 1.568s (kernel)
                  + 3.244s (initrd) + 38.753s (userspace) = 53.044s

$ systemd-analyze blame | grep -v &apos;\.device$&apos; | head -3
30.836s initrd-switch-root.service
22.381s fwupd.service
 6.370s NetworkManager-wait-online.service
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;38,7 saniyelik userspace&apos;in 30,8&apos;i tek bir birimde. Ama asıl kanıt journal&apos;da,
ve ilginç biçimde &lt;strong&gt;bir şeyin yokluğu&lt;/strong&gt; olarak duruyordu: 4,74 saniye ile
35,66 saniye arasında tek bir satır bile yazılmamıştı. 31 saniyelik tam
sessizlik. Sessizliği bitiren satır da zaten timeout&apos;un kendisiydi:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-text&quot;&gt;[    4.741257] systemd[1]: Closed systemd-udevd-control.socket
[   35.663220] kernel: nvme nvme0: I/O tag 77 QID 1 timeout, completion polled
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Aradaki fark 30,92 saniye. &lt;code&gt;nvme_core.io_timeout&lt;/code&gt; 30 saniye. Boot&apos;un kayıp
süresi, tek bir timeout&apos;un süresine &lt;strong&gt;birebir&lt;/strong&gt; eşitti.&lt;/p&gt;
&lt;p&gt;Bu arada yan tarafta duran &lt;code&gt;i915 GSC proxy component didn&apos;t bind within the expected timeout&lt;/code&gt; hatası da beni bir süre oyaladı. O bir sonuçtu, ayrı bir
sorun değil: &lt;code&gt;mei_gsc_proxy&lt;/code&gt;, disk çözülür çözülmez 36,24&apos;te bağlandı.&lt;/p&gt;
&lt;h2&gt;Kanıt 2: Chrome donması da aynı takılma&lt;/h2&gt;
&lt;p&gt;Aynı deseni Chrome şikâyetinde de aradım ve buldum:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-text&quot;&gt;[  340.004125] kernel: nvme0: I/O tag 735 QID 1 timeout, completion polled
[  340.167394] chrome: ERROR:process_singleton_posix.cc:347]
               Failed to create .../SingletonLock: File exists (17)
[  341.149448] chrome: Opening in existing browser session.
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Chrome yaklaşık 310. saniyede başlatılmış, profilini okurken takılmıştı.
Açılmayınca ikinci kez tıklamışım — &lt;code&gt;SingletonLock: File exists&lt;/code&gt; satırı tam
olarak bunun izi. İkisi de 340,00&apos;da, yani timeout&apos;un çözüldüğü saniyede
canlandı.&lt;/p&gt;
&lt;p&gt;Chrome&apos;un kendisi yavaş değildi. Aynı profille (394 MB, 16 eklenti), page
cache sıcakken ölçüm 0,28 saniye veriyordu. Aradaki fark tamamen diskti.&lt;/p&gt;
&lt;h2&gt;Kanıt 3: her boot&apos;ta oluyordu&lt;/h2&gt;
&lt;p&gt;Tek seferlik bir tuhaflık mı diye önceki boot&apos;lara baktım:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;for b in 0 -1 -2 -3 -4; do
  echo &quot;boot $b: $(journalctl -b $b | grep -c &apos;completion polled&apos;)&quot;
done
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code class=&quot;language-text&quot;&gt;boot  0: 2
boot -1: 7
boot -2: 2
boot -3: 4
boot -4: 1
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Bir oturumda yedi kez. Yedi kere otuz saniye.&lt;/p&gt;
&lt;h2&gt;Yanlış hipotez: APST&lt;/h2&gt;
&lt;p&gt;İlk teorim APST&apos;ydi (Autonomous Power State Transition): disk boştayken düşük
power state&apos;e geçiyor, uyanırken bir interrupt kaçırıyor. Teori makuldü ve ölçüm
de destekliyordu — disk gerçekten agresif uyuyordu:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-text&quot;&gt;$ sudo nvme get-feature /dev/nvme0 -f 0x0c -H
Autonomous Power State Transition Enable (APSTE): Enabled
Entry[0]  Idle Time Prior to Transition: 100 ms   -&amp;gt; power state 3
Entry[3]  Idle Time Prior to Transition: 2000 ms  -&amp;gt; power state 4
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;100 milisaniye boşta kalınca uyuyan bir disk. Kapattım:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;sudo grubby --update-kernel=ALL \
  --args=&quot;nvme_core.default_ps_max_latency_us=0&quot;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;İşe yaramadı.&lt;/strong&gt; O parametreyle açılan boot&apos;ta takılmalar aynen sürdü:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-text&quot;&gt;[   35.684191] nvme0: I/O tag 0   QID 6 timeout, completion polled
[   96.870108] nvme0: I/O tag 257 QID 5 timeout, completion polled
[  127.078093] nvme0: I/O tag 256 QID 5 timeout, completion polled
[  227.942038] nvme0: I/O tag 930 QID 3 timeout, completion polled
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Dahası, o boot&apos;ta &lt;strong&gt;giriş ekranı hiç gelmedi&lt;/strong&gt;. Siyah ekran. İlk refleksim
&quot;parametreyi verirken sistemi bozdum&quot; oldu, ama önceki boot&apos;un logu başka bir
şey söylüyordu:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-text&quot;&gt;[  127.078] nvme0: I/O tag 256 QID 5 timeout, completion polled
[  128.163] plasma-login-kwin_wayland.service: Failed with result &apos;timeout&apos;
[  128.216] plasma-login-greeter: no Qt platform plugin could be initialized
[  128.314] systemd-coredump: Process 1386 (plasma-login-wa) dumped core
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Zincir okunuyor: takılma bu sefer display manager&apos;ın başlangıç yoluna denk
gelmişti. &lt;code&gt;plasma-login-kwin_wayland&lt;/code&gt; systemd&apos;nin start timeout&apos;unu aştı ve
öldürüldü. Wayland compositor&apos;ı olmayınca greeter Qt platform plugin&apos;ini
başlatamadı ve çöktü. Ekran siyah kaldı.&lt;/p&gt;
&lt;p&gt;Buradan çıkan ders parametreyle ilgili değil: &lt;strong&gt;&quot;açılmıyor&quot; her zaman bir
boot hatası değildir.&lt;/strong&gt; Sistem açılmıştı; gelmeyen şey giriş ekranıydı.
Böyle bir durumda &lt;code&gt;journalctl -b -1&lt;/code&gt; ile bir önceki boot&apos;un loguna bakmak,
tahmin yürütmekten hızlıdır. Sebep orada düz metin olarak yazıyordu.&lt;/p&gt;
&lt;h2&gt;Gerçek sebep: Intel VMD&lt;/h2&gt;
&lt;p&gt;Sıradaki soru şuydu: interrupt nerede kayboluyor? &lt;code&gt;/proc/interrupts&lt;/code&gt; cevabı
doğrudan verdi:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-text&quot;&gt;178: ... VMD-PCI-MSIX-10000:e1:00.0    0  nvme0q0
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;İki şey var bu satırda. Birincisi &lt;code&gt;VMD-PCI-MSIX&lt;/code&gt;: disk PCIe&apos;ye doğrudan değil,
&lt;strong&gt;Intel VMD&lt;/strong&gt; (Volume Management Device) üzerinden bağlıydı. VMD, NVMe
controller&apos;larıyla CPU&apos;nun arasına oturan ve interrupt&apos;ları çoğullayan bir katman.&lt;/p&gt;
&lt;p&gt;İkincisi ve daha çarpıcı olanı, sayaç: &lt;strong&gt;sıfır&lt;/strong&gt;. Disk on binlerce G/Ç
yapmıştı ve tek bir interrupt sayılmamıştı. Interrupt&apos;lar VMD katmanında toplanıyor,
arada bir de düşüyordu.&lt;/p&gt;
&lt;p&gt;Diskin kendisi de durumu ağırlaştıran türdendi — &lt;strong&gt;DRAM&apos;siz&lt;/strong&gt; bir model:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-text&quot;&gt;Micron 2500 NVMe SSD (DRAM-less) [1344:5425]
kernel: nvme nvme0: allocated 64 MiB host memory buffer (16 segments)
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Kendi cache&apos;i yok; mapping table&apos;ını tutmak için sistem belleğinden 64 MiB
ödünç alıyor (HMB, Host Memory Buffer). Yani disk sürekli sistem belleğine DMA
yapıyor. Bu trafiğin bir de VMD&apos;nin adres ve interrupt remapping&apos;inden
geçmesi, kayıpların yaşandığı yer.&lt;/p&gt;
&lt;h2&gt;Çözüm BIOS&apos;ta&lt;/h2&gt;
&lt;p&gt;ASUS BIOS&apos;ta: &lt;strong&gt;Advanced → VMD Configuration → Enable VMD controller:
Disabled&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Disk artık doğrudan PCIe&apos;de:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-text&quot;&gt;$ lspci -nn | grep -i non-volatile
01:00.0 Non-Volatile memory controller: Micron 2500 NVMe SSD (DRAM-less)
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Ve interrupt&apos;lar gerçekten sayılıyor:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-text&quot;&gt;$ grep nvme0q /proc/interrupts | head -2
159: ... IR-PCI-MSIX-0000:01:00.0    0-edge   nvme0q0
160: ... IR-PCI-MSIX-0000:01:00.0    1-edge   nvme0q1
toplam: 34663 interrupt  (VMD ile: 0)
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Bir uyarı: kaynaklar bu değişiklikten &lt;strong&gt;önce&lt;/strong&gt; initramfs&apos;i genelleştirmeyi
öneriyor (&lt;code&gt;sudo dracut --regenerate-all --force --no-hostonly&lt;/code&gt;), çünkü
initramfs&apos;te &lt;code&gt;nvme&lt;/code&gt; driver&apos;ı yoksa sistem VMD kapatıldığında açılmaz. Ben bunu
çalıştırmadım ve makine yine de sorunsuz açıldı — Fedora&apos;nın initramfs&apos;i
&lt;code&gt;nvme&lt;/code&gt;&apos;yi zaten içeriyor. Yine de risksiz olan yol önce initramfs&apos;i
hazırlamak. Geri dönmek istersen BIOS&apos;ta tekrar &lt;code&gt;Enabled&lt;/code&gt; yapman yeterli; kök
&lt;code&gt;UUID=&lt;/code&gt; ile bağlandığı için cihaz yolunun değişmesi sorun çıkarmıyor.&lt;/p&gt;
&lt;p&gt;Bir de yol üstünde bulunan küçük bir kazanç: &lt;code&gt;NetworkManager-wait-online&lt;/code&gt;
critical chain&apos;de wifi DHCP&apos;sini bekliyordu. Masaüstünde gereksiz, 6,4 saniye
ediyordu.&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;sudo systemctl disable NetworkManager-wait-online.service
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;Sonuç&lt;/h2&gt;
&lt;pre&gt;&lt;code class=&quot;language-text&quot;&gt;$ systemd-analyze
Startup finished in 7.190s (firmware) + 2.745s (loader) + 1.587s (kernel)
                  + 3.738s (initrd) + 2.879s (userspace) = 18.141s

$ journalctl -b | grep -c &quot;completion polled&quot;
0
&lt;/code&gt;&lt;/pre&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;Önce&lt;/th&gt;
&lt;th&gt;Sonra&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;firmware&lt;/td&gt;
&lt;td&gt;7,1 s&lt;/td&gt;
&lt;td&gt;7,2 s&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;loader&lt;/td&gt;
&lt;td&gt;2,4 s&lt;/td&gt;
&lt;td&gt;2,7 s&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;kernel + initrd&lt;/td&gt;
&lt;td&gt;4,8 s&lt;/td&gt;
&lt;td&gt;5,3 s&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;userspace&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;38,8 s&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;2,9 s&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;toplam&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;53,0 s&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;18,1 s&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;takılma / boot&lt;/td&gt;
&lt;td&gt;1–7 kez&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;0&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Değişen tek şeyin userspace olduğuna dikkat: firmware ve loader aynı kaldı.
Zaten öyle olması gerekiyordu — sorun diskin ilk okunduğu yerde değil, sistemin
diski yoğun kullanmaya başladığı yerdeydi.&lt;/p&gt;
&lt;p&gt;Chrome de boot&apos;tan sonra hiç çalıştırılmamışken, yani cache gerçekten
boşken ölçüldü:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-text&quot;&gt;GPU süreci : 0,051 s
Renderer   : 0,091 s
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Eskiden 30 saniye donan açılış, artık onda bir saniyenin altında.&lt;/p&gt;
&lt;h2&gt;APST parametresini geri aldım&lt;/h2&gt;
&lt;p&gt;Yanlış hipotezin bıraktığı kernel parametresi hâlâ duruyordu. İşe
yaramadığını zaten biliyordum ama makinede kalmasının bir bedeli vardı: APST
kapalıyken disk boştayken uyumuyor, boşuna güç harcıyor.&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;sudo grubby --update-kernel=ALL \
  --remove-args=&quot;nvme_core.default_ps_max_latency_us&quot;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Parametresiz boot, parametreli boot&apos;la bire bir aynı çıktı:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-text&quot;&gt;$ grep -c nvme_core /proc/cmdline
0
$ cat /sys/module/nvme_core/parameters/default_ps_max_latency_us
100000                        # APST tekrar açık
$ journalctl -b | grep -c &quot;completion polled&quot;
0
$ systemd-analyze
... = 18.147s
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;18,147 ile 18,141 arasındaki fark ölçüm gürültüsü. Yani takılmaları bitiren
tek şey VMD&apos;nin kapatılmasıydı; disk boştayken uyumaya devam edebilir ve bunun
hiçbir bedeli yok.&lt;/p&gt;
&lt;p&gt;Bu adımı atlamak kolaydı — sorun zaten çözülmüştü. Ama işe yaramadığı
kanıtlanmış bir parametre kernel komut satırında durmaya devam ederse, altı ay
sonra başka bir şeyi ayıklarken &quot;bu neden burada?&quot; diye bakacağın gereksiz bir
değişken olur.&lt;/p&gt;
&lt;h2&gt;Geriye kalan&lt;/h2&gt;
&lt;p&gt;Üç şey aklımda kaldı.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Sessizlik de bir veridir.&lt;/strong&gt; Bu işi çözen tek gözlem, journal&apos;da 31 saniye
boyunca hiçbir satır olmamasıydı. Log okurken yazılana bakmaya alışığız; burada
bilgi, yazılmayan yerdeydi.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Ölçülmemiş hipotez, çözüm sayılmaz.&lt;/strong&gt; APST teorisi makuldü, ölçüm onu
destekliyordu ve yanlıştı. &lt;code&gt;nvme get-feature&lt;/code&gt; çıktısı &quot;disk agresif uyuyor&quot;
diyordu — doğruydu da, sadece problemle ilgisi yoktu. Doğru soru &quot;bu bulgu
gerçek mi&quot; değil, &quot;bu bulgu &lt;em&gt;bu&lt;/em&gt; problemin sebebi mi&quot;.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Aynı anda iki şey bozulmuş gibi görünüyorsa, muhtemelen bir şey bozuktur.&lt;/strong&gt;
Yavaş boot ve donan Chrome birbiriyle alakasız iki şikâyetti; ortak sebep,
ikisinin de aynı 30 saniyeyi bekliyor olmasıydı.&lt;/p&gt;
&lt;p&gt;Not defterimdeki asıl kayıt biraz daha uzun ve tüm çıktıları içeriyor. Bu
tür şeyleri artık düzenli olarak yazıyorum, çünkü aynı problemi ikinci kez
sıfırdan araştırmak, ilkinden daha sinir bozucu.&lt;/p&gt;
</content:encoded><category>linux</category><category>fedora</category><category>hardware</category><category>debugging</category></item><item><title>Merhaba dünya</title><link>https://www.selimardacevik.com/tr/blog/hello-world/</link><guid isPermaLink="true">https://www.selimardacevik.com/tr/blog/hello-world/</guid><description>Bu blogun ilk yazısı: kimim, burada ne yazacağım ve site nasıl kurulu.</description><pubDate>Sat, 29 Aug 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Bu, blogun ilk yazısı. Uzun bir açılış konuşması yapmayacağım; burada ne
bulacağını anlatıp yoluma devam edeyim.&lt;/p&gt;
&lt;p&gt;Platform mühendisiyim. İşimin bir yarısı ekibin ürünü sahaya çıkardığı yol —
CI pipeline&apos;ları, container&apos;lar, ortamlar — diğer yarısı da o yolun üstünde koşan
uygulama kodu. Finans tarafında, işlem hacminin ve hataların gerçekten
önemsendiği sistemlerle çalışıyorum.&lt;/p&gt;
&lt;h2&gt;Burada ne yazacağım&lt;/h2&gt;
&lt;p&gt;Günlük tutmayacağım. Yazmaya değer bulduğum şey şu: bir problemi çözmek
gereğinden uzun sürdüyse, sebebi genelde hiçbir yerde yazmayan küçük bir
detaydır. Onları buraya not alacağım.&lt;/p&gt;
&lt;p&gt;Muhtemel konular:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Kubernetes ve container&apos;larla ilgili, belgelerde tek satır geçen ama üç saatimi
alan davranışlar&lt;/li&gt;
&lt;li&gt;Jenkins ve Argo CD ile deploy pipeline&apos;ı kurarken verdiğim kararlar ve sonradan
pişman olduklarım&lt;/li&gt;
&lt;li&gt;Spring Boot tarafında tekrar tekrar karşılaştığım desenler&lt;/li&gt;
&lt;li&gt;Fedora&apos;da geliştirme ortamı: ne çalışıyor, ne çalışmıyor&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Her yazının sonunda &quot;şunu şöyle yaptım, sen de yapabilirsin&quot; gibi bir şey
olmayabilir. Bazen sadece &quot;bu böyleymiş&quot; demek de yeterli.&lt;/p&gt;
&lt;h2&gt;Site hakkında&lt;/h2&gt;
&lt;p&gt;Site statik: Astro ile üretiliyor, yazılar repo içinde MDX dosyaları olarak
duruyor. Yani bir yazı yayınlamak bir commit atmak demek — düzeltmeler de
sürüm geçmişinde kalıyor.&lt;/p&gt;
&lt;p&gt;İki dilli. İngilizce sürüm kökte, Türkçe sürüm &lt;code&gt;/tr&lt;/code&gt; altında; aynı yazının iki
dili aynı dosya adıyla eşleşiyor. Bir yazının diğer dilde karşılığı yoksa dil
değiştirici seni o dilin blog listesine götürür, kırık bağlantıya değil.&lt;/p&gt;
&lt;p&gt;Her başlık kendi bağlantısını taşıyor, uzun yazılarda gövdenin üstünde
içindekiler çıkıyor, arama sayfası da iki dildeki tüm yazıları kapsıyor.
Tamamını RSS ile de okuyabilirsin:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-text&quot;&gt;https://selimardacevik.com/tr/rss.xml
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;Bundan sonrası&lt;/h2&gt;
&lt;p&gt;İlk teknik yazı yakında. O zamana kadar &lt;a href=&quot;https://www.selimardacevik.com/tr/projeler/&quot;&gt;projeler&lt;/a&gt; ve
&lt;a href=&quot;https://www.selimardacevik.com/tr/cv/&quot;&gt;özgeçmiş&lt;/a&gt; sayfalarına bakabilir, bir şey sormak istersen
e-posta atabilirsin.&lt;/p&gt;
</content:encoded><category>meta</category></item></channel></rss>