Slackware This Forum is for the discussion of Slackware Linux.
Notices
Welcome to
LinuxQuestions.org , a friendly and active Linux Community.
You are currently viewing LQ as a guest. By joining our community you will have the ability to post topics, receive our newsletter, use the advanced search, subscribe to threads and access many other special features. Registration is quick, simple and absolutely free.
Join our community today!
Note that registered members see fewer ads, and ContentLink is completely disabled once you log in.
Are you new to LinuxQuestions.org? Visit the following links:
Site Howto |
Site FAQ |
Sitemap |
Register Now
If you have any problems with the registration process or your account login, please
contact us . If you need to reset your password,
click here .
Having a problem logging in? Please visit this page to clear all LQ-related cookies.
Get a
virtual cloud desktop with the Linux distro that you want in less than five minutes with Shells! With over 10 pre-installed distros to choose from, the worry-free installation life is here! Whether you are a digital nomad or just looking for flexibility, Shells can put your Linux machine on the device that you want to use.
Exclusive for LQ members, get up to 45% off per month.
Click here for more info.
11-06-2015, 11:41 AM
#1
Member
Registered: Feb 2013
Posts: 412
Rep:
slackware and SSD
Hello,
I have received a new laptop for work (HP Zbook), and I have installed slackware64-current on it in 15 minutes. It works very well.
But by running smartctl, I realized that the hard disk is a SSD (SanDisk SD7SB2Q-512G-1006). And I would like to know if there is something special to do to take care of it.
thank you in advance
11-06-2015, 12:07 PM
#2
LQ Guru
Registered: Nov 2003
Location: West Jordan, UT, USA
Distribution: Slackware
Posts: 8,792
It would probably be beneficial to switch the scheduler to deadline, as CFQ is designed more for platter drives. Also, you'll want to look into TRIM for your drive. Devices vary drastically, and it is generally recommended to set up an automated "manual" trim through cron or something similar (the other option is to put discard in your mount options, but depending on your device, this can cause data loss -- see
this and
this ).
As usual, Arch's wiki has a pretty in-depth article on SSD (covering both of the above points), and you can learn a lot from there.
https://wiki.archlinux.org/index.php/Solid_State_Drives
11-06-2015, 01:13 PM
#3
Member
Registered: Nov 2014
Location: Moscow
Distribution: Slackware
Posts: 233
There is an interesting
post that, in particular, explains that the default scheduler CFQ has SSD support (since 2008).
Checking if trim is enabled can be done with the command
If both the DISC-GRAN and DISC-MAX columns contain non-zero values, then trim is enabled.
11-06-2015, 01:47 PM
#4
LQ Guru
Registered: Nov 2003
Location: West Jordan, UT, USA
Distribution: Slackware
Posts: 8,792
CFQ certainly has support for SSDs, but it
still doesn't perform as well as deadline in almost all tests . Now, whether or not those will be noticeable in real world usage is uncertain, but I still try and get performance increases when possible, especially when it is as simple as changing the scheduler.
11-06-2015, 03:52 PM
#5
Member
Registered: Feb 2013
Posts: 412
Original Poster
Rep:
Thank you for your answers.
I have added this line in my /etc/fstab
tmpfs /tmp tmpfs defaults,size=500M 0 0
but it seems that this prevented the nouveau modules to behave correctly, and X11 could not be started:
Code:
[ 10.071264] ACPI Warning: \_SB_.PCI0.PEGP.DGFX._DSM: Argument #4 type mismatch - Found [Buffer], ACPI requires [Package] (20150410/nsarguments-95)
[ 10.072018] ACPI: \_SB_.PCI0.PEGP.DGFX: failed to evaluate _DSM
[ 10.072521] nouveau [ DEVICE][0000:01:00.0] BOOT0 : 0x0e7360a2
[ 10.072714] nouveau [ DEVICE][0000:01:00.0] Chipset: GK107 (NVE7)
[ 10.072993] nouveau [ DEVICE][0000:01:00.0] Family : NVE0
[ 10.077936] nouveau [ VBIOS][0000:01:00.0] using image from ACPI
[ 10.078211] nouveau [ VBIOS][0000:01:00.0] BIT signature found
[ 10.078410] nouveau [ VBIOS][0000:01:00.0] version 80.07.ef.00.03
[ 10.079352] nouveau [ MXM][0000:01:00.0] BIOS version 3.0
[ 10.081776] ACPI Warning: \_SB_.PCI0.PEGP.DGFX._DSM: Argument #4 type mismatch - Found [Buffer], ACPI requires [Package] (20150410/nsarguments-95)
[ 10.082618] nouveau [ MXM][0000:01:00.0] MXMS Version 3.0
[ 10.082878] nouveau [ PMC][0000:01:00.0] MSI interrupts enabled
[ 10.083115] nouveau [ PFB][0000:01:00.0] RAM type: GDDR5
[ 10.083430] nouveau [ PFB][0000:01:00.0] RAM size: 2048 MiB
[ 10.083746] nouveau [ PFB][0000:01:00.0] ZCOMP: 0 tags
[ 10.086204] nouveau [ VOLT][0000:01:00.0] GPU voltage: 600000uv
[ 10.102857] Bluetooth: hci0: Intel Bluetooth firmware patch completed and activated
[ 10.138956] nouveau [ PTHERM][0000:01:00.0] FAN control: none / external
[ 10.139285] nouveau [ PTHERM][0000:01:00.0] fan management: automatic
[ 10.139625] nouveau [ PTHERM][0000:01:00.0] internal sensor: yes
[ 10.140056] nouveau [ CLK][0000:01:00.0] 07: core 405 MHz memory 810 MHz
[ 10.140603] nouveau [ CLK][0000:01:00.0] 0a: core 405-705 MHz memory 1600 MHz
[ 10.141215] nouveau [ CLK][0000:01:00.0] 0f: core 405-705 MHz memory 2800 MHz
[ 10.141885] nouveau [ CLK][0000:01:00.0] --: core 405 MHz memory 810 MHz
[ 10.174603] [TTM] Zone kernel: Available graphics memory: 4035870 kiB
[ 10.174959] [TTM] Zone dma32: Available graphics memory: 2097152 kiB
[ 10.175288] [TTM] Initializing pool allocator
[ 10.175617] [TTM] Initializing DMA pool allocator
[ 10.175948] nouveau [ DRM] VRAM: 2048 MiB
[ 10.176274] nouveau [ DRM] GART: 1048576 MiB
[ 10.176602] nouveau [ DRM] TMDS table version 2.0
[ 10.176929] nouveau [ DRM] DCB version 4.0
[ 10.177256] nouveau [ DRM] DCB outp 03: 01075fd6 0f420020
[ 10.177585] nouveau [ DRM] DCB outp 04: 01075f92 00020020
[ 10.177912] nouveau [ DRM] DCB outp 05: 08014fc6 0f420010
[ 10.178240] nouveau [ DRM] DCB outp 06: 08014f82 00020010
[ 10.178568] nouveau [ DRM] DCB outp 08: 04038fb6 0f420010
[ 10.178892] nouveau [ DRM] DCB outp 09: 04038f72 00020010
[ 10.179221] nouveau [ DRM] DCB outp 10: 02027fa6 0f420014
[ 10.179550] nouveau [ DRM] DCB outp 13: 02049f00 00000000
[ 10.179876] nouveau [ DRM] DCB conn 04: 01000446
[ 10.180305] nouveau [ DRM] DCB conn 05: 02000546
[ 10.180732] nouveau [ DRM] DCB conn 06: 00010647
[ 10.181158] nouveau [ DRM] DCB conn 07: 00010747
[ 10.181580] nouveau [ DRM] DCB conn 08: 00020846
[ 10.182005] nouveau [ DRM] DCB conn 09: 00000900
[ 10.196059] [drm] Supports vblank timestamp caching Rev 2 (21.10.2013).
[ 10.196396] [drm] Driver supports precise vblank timestamp query.
[ 10.203143] nouveau [ DRM] MM: using COPY for buffer copies
[ 10.506021] psmouse serio3: synaptics: queried max coordinates: x [..5660], y [..4730]
[ 10.541423] psmouse serio3: synaptics: queried min coordinates: x [1324..], y [1248..]
[ 10.576233] nouveau [ DRM] allocated 1920x1080 fb: 0x60000, bo ffff8800579c7400
[ 10.576913] fbcon: nouveaufb (fb0) is primary device
[ 10.606181] psmouse serio3: synaptics: Touchpad model: 1, fw: 8.1, id: 0x1e2b1, caps: 0xd40123/0x840300/0x26800, board id: 2706, fw id: 1486004
[ 10.643096] input: SynPS/2 Synaptics TouchPad as /devices/platform/i8042/serio3/input/input19
[ 11.232576] Console: switching to colour frame buffer device 240x67
[ 11.235200] nouveau 0000:01:00.0: fb0: nouveaufb frame buffer device
[ 11.235213] nouveau 0000:01:00.0: registered panic notifier
[ 11.240205] [drm] Initialized nouveau 1.2.2 20120801 for 0000:01:00.0 on minor 0
[ 11.292690] BUG: unable to handle kernel NULL pointer dereference at 0000000000000008
[ 11.292707] IP: [<ffffffffc0a06a10>] nvkm_i2c_try_acquire_pad+0x40/0x80 [nouveau]
[ 11.292729] PGD 28f087067 PUD 28fd23067 PMD 0
[ 11.292737] Oops: 0000 [#1] SMP
[ 11.292743] Modules linked in: nouveau joydev uvcvideo hid_generic videobuf2_vmalloc videobuf2_memops videobuf2_core v4l2_common usbhid videodev hid btusb btbcm btintel bluetooth snd_hda_codec_hdmi tpm_infineon snd_hda_codec_realtek snd_hda_codec_generic hp_wmi mxm_wmi sparse_keymap i2c_dev iwlmvm mac80211 ttm snd_hda_intel snd_hda_controller drm_kms_helper snd_hda_codec snd_hda_core rtsx_pci_sdmmc snd_hwdep rtsx_pci_ms mmc_core memstick ppdev iwlwifi drm snd_pcm e1000e snd_timer cfg80211 agpgart i2c_i801 psmouse snd ptp i2c_algo_bit xhci_pci evdev i2c_core ehci_pci soundcore rfkill mei_me serio_raw xhci_hcd ehci_hcd rtsx_pci lpc_ich tpm_tis hp_accel parport_pc pps_core mei parport lis3lv02d thermal processor video 8250_fintek thermal_sys wmi tpm hwmon input_polldev battery hp_wireless ac button
[ 11.292902] loop
[ 11.292906] CPU: 1 PID: 403 Comm: xcmddc Not tainted 4.1.12 #2
[ 11.292911] Hardware name: Hewlett-Packard HP ZBook 17 G2/2255, BIOS M70 Ver. 01.12 09/23/2015
[ 11.292917] task: ffff8802925d5cd0 ti: ffff88028dd40000 task.ti: ffff88028dd40000
[ 11.292922] RIP: 0010:[<ffffffffc0a06a10>] [<ffffffffc0a06a10>] nvkm_i2c_try_acquire_pad+0x40/0x80 [nouveau]
[ 11.292936] RSP: 0018:ffff88028dd43b88 EFLAGS: 00010286
[ 11.292940] RAX: 0000000000000000 RBX: 0000000000000000 RCX: 0000000010000000
[ 11.292945] RDX: ffff88029079b840 RSI: 0000000000000005 RDI: ffff880292d42000
[ 11.292949] RBP: ffff88028dd43b88 R08: 0000000000018de0 R09: ffff880294803e00
[ 11.292954] R10: ffff880294803e00 R11: 0000000000000246 R12: ffff880292d42000
[ 11.292958] R13: 0000000000000000 R14: ffff88029241e900 R15: 0000000000000007
[ 11.292963] FS: 00007f834cbc6780(0000) GS:ffff88029dc40000(0000) knlGS:0000000000000000
[ 11.292968] CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033
[ 11.292973] CR2: 0000000000000008 CR3: 000000028fe7c000 CR4: 00000000001406e0
[ 11.292977] Stack:
[ 11.292980] ffff88028dd43bf8 ffffffffc0a06b1d ffff88028dd43bf8 ffff88028f195800
[ 11.292989] ffff88028dd43bd8 ffffffffc0538fe9 ffff88028f195800 0000000000000027
[ 11.292998] 0000000000000006 ffff88028f195800 ffff880292d42000 ffff880292d42398
[ 11.293008] Call Trace:
[ 11.293019] [<ffffffffc0a06b1d>] nvkm_i2c_acquire_pad+0xcd/0x150 [nouveau]
[ 11.293029] [<ffffffffc0538fe9>] ? _object_find+0x69/0xa0 [drm]
[ 11.293039] [<ffffffffc0a06930>] nvkm_i2c_acquire+0x40/0x60 [nouveau]
[ 11.293053] [<ffffffffc0a67297>] ? find_encoder+0x37/0x80 [nouveau]
[ 11.293065] [<ffffffffc0a677d8>] nouveau_connector_aux_xfer+0x78/0x110 [nouveau]
[ 11.293073] [<ffffffffc068f15d>] drm_dp_i2c_do_msg+0x3d/0x250 [drm_kms_helper]
[ 11.293080] [<ffffffffc068f4c3>] drm_dp_i2c_xfer+0x153/0x210 [drm_kms_helper]
[ 11.293088] [<ffffffffc0328bf5>] __i2c_transfer+0x245/0x440 [i2c_core]
[ 11.293095] [<ffffffffc0328e44>] i2c_transfer+0x54/0x90 [i2c_core]
[ 11.293102] [<ffffffffc0328ebf>] i2c_master_send+0x3f/0x50 [i2c_core]
[ 11.293482] [<ffffffffc07f1460>] i2cdev_write+0x50/0x70 [i2c_dev]
[ 11.294111] [<ffffffff811b2e58>] __vfs_write+0x28/0xf0
[ 11.294779] [<ffffffff81cc90f2>] ? do_nanosleep+0x82/0x110
[ 11.295463] [<ffffffff815e3393>] ? security_file_permission+0x23/0xa0
[ 11.296121] [<ffffffff811b32f3>] ? rw_verify_area+0x53/0x100
[ 11.296800] [<ffffffff811b3589>] vfs_write+0xa9/0x1b0
[ 11.297519] [<ffffffff810e4290>] ? hrtimer_get_res+0x50/0x50
[ 11.298199] [<ffffffff811b4396>] SyS_write+0x46/0xb0
[ 11.298888] [<ffffffff81cc9e1b>] system_call_fastpath+0x16/0x6e
[ 11.299579] Code: 42 08 48 8b 08 8b 09 81 e1 00 00 00 10 74 ec b8 01 00 00 00 f0 0f c1 42 1c 85 c0 74 36 48 8b 42 28 eb 11 0f 1f 84 00 00 00 00 00 <48> 8b 40 08 48 85 c0 74 0f 48 39 c7 75 f2 31 c0 5d c3 66 0f 1f
[ 11.300358] RIP [<ffffffffc0a06a10>] nvkm_i2c_try_acquire_pad+0x40/0x80 [nouveau]
[ 11.301127] RSP <ffff88028dd43b88>
[ 11.301868] CR2: 0000000000000008
[ 11.302614] BUG: unable to handle kernel NULL pointer dereference
[ 11.302622] ---[ end trace 1ceb61e59c001755 ]---
[ 11.303383] at 0000000000000008
[ 11.303383] IP:
[ 11.303392] [<ffffffffc0a06a10>] nvkm_i2c_try_acquire_pad+0x40/0x80 [nouveau]
[ 11.303393] PGD 2f67067
[ 11.303393] PUD 581e3067
[ 11.303393] PMD 0
[ 11.303394] Oops: 0000 [#2]
[ 11.303394] SMP
[ 11.303395] Modules linked in:
[ 11.303395] nouveau
[ 11.303396] joydev
[ 11.303396] uvcvideo
[ 11.303396] hid_generic
[ 11.303397] videobuf2_vmalloc
[ 11.303397] videobuf2_memops
[ 11.303414] videobuf2_core v4l2_common usbhid videodev hid btusb btbcm btintel bluetooth snd_hda_codec_hdmi tpm_infineon snd_hda_codec_realtek snd_hda_codec_generic hp_wmi mxm_wmi sparse_keymap i2c_dev iwlmvm mac80211 ttm snd_hda_intel snd_hda_controller drm_kms_helper snd_hda_codec snd_hda_core rtsx_pci_sdmmc snd_hwdep rtsx_pci_ms mmc_core memstick ppdev iwlwifi drm snd_pcm e1000e snd_timer cfg80211 agpgart i2c_i801 psmouse snd ptp i2c_algo_bit xhci_pci evdev i2c_core ehci_pci soundcore rfkill mei_me serio_raw xhci_hcd ehci_hcd rtsx_pci lpc_ich tpm_tis hp_accel parport_pc pps_core mei parport lis3lv02d thermal processor video 8250_fintek thermal_sys wmi tpm hwmon input_polldev battery hp_wireless ac button loop
[ 11.303415] CPU: 4 PID: 406 Comm: xcmddc Tainted: G D 4.1.12 #2
[ 11.303416] Hardware name: Hewlett-Packard HP ZBook 17 G2/2255, BIOS M70 Ver. 01.12 09/23/2015
[ 11.303417] task: ffff8802933b0000 ti: ffff88028dd4c000 task.ti: ffff88028dd4c000
[ 11.303424] RIP: 0010:[<ffffffffc0a06a10>] [<ffffffffc0a06a10>] nvkm_i2c_try_acquire_pad+0x40/0x80 [nouveau]
[ 11.303425] RSP: 0018:ffff88028dd4fbe8 EFLAGS: 00010286
[ 11.303425] RAX: 0000000000000000 RBX: 0000000000000003 RCX: 0000000010000000
[ 11.303426] RDX: ffff88029079b7c0 RSI: 0000000000000005 RDI: ffff880292d41c00
[ 11.303426] RBP: ffff88028dd4fbe8 R08: 0000000000018de0 R09: ffff880294803e00
[ 11.303426] R10: ffff880294803e00 R11: 0000000000000246 R12: ffff880292d41c00
[ 11.303427] R13: 0000000000000003 R14: ffff88029241e900 R15: 0000000000000000
[ 11.303428] FS: 00007fee285b2780(0000) GS:ffff88029dd00000(0000) knlGS:0000000000000000
[ 11.303428] CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033
[ 11.303429] CR2: 0000000000000008 CR3: 000000005809f000 CR4: 00000000001406e0
[ 11.303429] Stack:
[ 11.303430] ffff88028dd4fc58 ffffffffc0a06a8d ffff880292da31a0 ffff88028ebc0780
[ 11.303431] ffff88028dd4fc28 ffffffff81163489 0000000000000000 ffff880292da3100
[ 11.303432] ffff88028dd4fc78 ffff8802922796c0 ffff880292d41c00 ffff880292d41f98
[ 11.303432] Call Trace:
[ 11.303438] [<ffffffffc0a06a8d>] nvkm_i2c_acquire_pad+0x3d/0x150 [nouveau]
[ 11.303441] [<ffffffff81163489>] ? file_ra_state_init+0x19/0x30
[ 11.303446] [<ffffffffc0a06930>] nvkm_i2c_acquire+0x40/0x60 [nouveau]
[ 11.303448] [<ffffffff811d4394>] ? mntput+0x24/0x40
[ 11.303453] [<ffffffffc0a0678f>] nvkm_i2c_pre_xfer+0x2f/0x40 [nouveau]
[ 11.303455] [<ffffffffc03677f7>] bit_xfer+0x37/0x555 [i2c_algo_bit]
[ 11.303458] [<ffffffffc0328bf5>] __i2c_transfer+0x245/0x440 [i2c_core]
[ 11.303460] [<ffffffffc0328e44>] i2c_transfer+0x54/0x90 [i2c_core]
[ 11.303462] [<ffffffffc0328ebf>] i2c_master_send+0x3f/0x50 [i2c_core]
[ 11.303464] [<ffffffffc07f1460>] i2cdev_write+0x50/0x70 [i2c_dev]
[ 11.303465] [<ffffffff811b2e58>] __vfs_write+0x28/0xf0
[ 11.303467] [<ffffffff81cc90f2>] ? do_nanosleep+0x82/0x110
[ 11.303469] [<ffffffff815e3393>] ? security_file_permission+0x23/0xa0
[ 11.303471] [<ffffffff811b32f3>] ? rw_verify_area+0x53/0x100
[ 11.303472] [<ffffffff811b3589>] vfs_write+0xa9/0x1b0
[ 11.303474] [<ffffffff810e4290>] ? hrtimer_get_res+0x50/0x50
[ 11.303476] [<ffffffff811b4396>] SyS_write+0x46/0xb0
[ 11.303477] [<ffffffff81cc9e1b>] system_call_fastpath+0x16/0x6e
[ 11.303487] Code: 42 08 48 8b 08 8b 09 81 e1 00 00 00 10 74 ec b8 01 00 00 00 f0 0f c1 42 1c 85 c0 74 36 48 8b 42 28 eb 11 0f 1f 84 00 00 00 00 00 <48> 8b 40 08 48 85 c0 74 0f 48 39 c7 75 f2 31 c0 5d c3 66 0f 1f
[ 11.303492] RIP [<ffffffffc0a06a10>] nvkm_i2c_try_acquire_pad+0x40/0x80 [nouveau]
[ 11.303492] RSP <ffff88028dd4fbe8>
[ 11.303492] CR2: 0000000000000008
[ 11.303502] ---[ end trace 1ceb61e59c001756 ]---
After commenting this line and rebooting X11 is back
What is the problem ?
11-06-2015, 07:25 PM
#6
LQ Newbie
Registered: Jun 2010
Posts: 9
Rep:
Any chance it's a permissions problem? Can you write to /tmp as a normal user after mounting the ramdisk there?
11-06-2015, 10:00 PM
#7
LQ Guru
Registered: Nov 2003
Location: West Jordan, UT, USA
Distribution: Slackware
Posts: 8,792
Try
Code:
tmpfs /tmp tmpfs nodev,nosuid,size=500M 0 0
11-07-2015, 12:17 AM
#8
Member
Registered: Feb 2013
Posts: 412
Original Poster
Rep:
,@natals, @bassmadrigal
I think it was a permission problem.
I have tried this
tmpfs /tmp tmpfs defaults,noatime,mode=1777,size=500M 0 0
and it works.
It seems that in my first attempt the driver and X did need, but were not allowed to write in /tmp, this is now possible with the option "mode=1777". I don't know if "nosuid" is related to this. "nodev" seems related to security.
Anyway, the possible ways of better using SSDs seem to be
1) change the I/O scheduler
2) execute fstrim from time to time
3) use RAM filesystems, as for /tmp . I will also see if I can put the browser caches if a RAMFS, and also compile there.
11-07-2015, 06:04 AM
#9
Member
Registered: Nov 2014
Location: Moscow
Distribution: Slackware
Posts: 233
Quote:
Originally Posted by
Toutatis
Anyway, the possible ways of better using SSDs seem to be
1) change the I/O scheduler
It's very easy to test. I did and find no difference in speed, so I decided to stick with the default cfq, of course, YMMV.
Quote:
Originally Posted by Toutatis
2) execute fstrim from time to time
Arch wiki bases this recommendation on a
message by Theodore Ts'o. But he concludes his message in the following way:
Quote:
Which is why I hesitate to recommend switching to fstrim for a device which is known to mishandle the DISCARD command, and to suggest simply not using the DISCARD feature at all --- and if this results in increased performance lost or increased write wear, to just replace the SSD as an inferior quality product before it does any further damage to your data.
11-07-2015, 07:15 AM
#10
Moderator
Registered: Dec 2009
Location: Germany
Distribution: Whatever fits the task best
Posts: 17,148
Quote:
Originally Posted by
Toutatis
3) use RAM filesystems, as for /tmp . I will also see if I can put the browser caches if a RAMFS, and also compile there.
People usually recommended this to prevent unnecessary writes to SSDs in hope to extend their lifetime. With modern SSDs this isn't a problem anymore, so only do it if you really want to. Having said that, if you have enough RAM keep your /tmp in RAM, it will speed up some workloads that use /tmp (for example compiling packages from SBo) just because RAM is still magnitudes faster than SSDs.
11-07-2015, 10:06 AM
#11
Senior Member
Registered: Sep 2014
Distribution: Slackware
Posts: 1,754
Rep:
Quote:
Originally Posted by
Toutatis
I will also see if I can put the browser caches if a RAMFS, and also compile there.
I've set the browser cache in tmpfs with a user.js file in my local profile.
Code:
# Mozilla User Preferences
user_pref("browser.cache.disk.parent_directory", "/tmp");
Should work for Icecat, Firefox, Seamonkey.. not sure about setting this up with other browsers.
All times are GMT -5. The time now is 11:22 AM .
LinuxQuestions.org is looking for people interested in writing
Editorials, Articles, Reviews, and more. If you'd like to contribute
content, let us know .
Latest Threads
LQ News